Ubuntu 内核管理

查看内核

# 查看内核列表
sudo dpkg --get-selections | grep linux-image

# Linux 已安装内核:
dpkg --get-selections | grep linux
# or
dpkg --list | grep linux

安装内核

# 显示所有可以获取的内核版本
apt-cache search linux
# 安装指定版本 <version> 内核
sudo apt-get install  -y linux-headers-<version>-generic \
                        linux-image-<version>-generic \
                        linux-image-extra-<version>-generic

删除内核

```bash
# 删除多余内核
sudo apt-get purge linux-image-<版本号> 命令
```

切换内核

  1. 查找内核名称

     grep menuentry /boot/grub/grub.cfg
    
     # if [ x"${feature_menuentry_id}" = xy ]; then
     #   menuentry_id_option="--id"
     #   menuentry_id_option=""
     # export menuentry_id_option
     # menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-078e99ce-eb46-4324-bd9b-6dc10573508b' {
     # submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-078e99ce-eb46-4324-bd9b-6dc10573508b' {
     # 	menuentry 'Ubuntu, with Linux 4.4.0-184-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-184-generic-advanced-078e99ce-eb46-4324-bd9b-6dc10573508b' {
     # 	menuentry 'Ubuntu, with Linux 4.4.0-184-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-184-generic-init-upstart-078e99ce-eb46-4324-bd9b-6dc10573508b' {
     # 	menuentry 'Ubuntu, with Linux 4.4.0-184-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-184-generic-recovery-078e99ce-eb46-4324-bd9b-6dc10573508b' {
     # 	menuentry 'Ubuntu, with Linux 4.4.0-179-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-179-generic-advanced-078e99ce-eb46-4324-bd9b-6dc10573508b' {
     # 	menuentry 'Ubuntu, with Linux 4.4.0-179-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-179-generic-init-upstart-078e99ce-eb46-4324-bd9b-6dc10573508b' {
     # 	menuentry 'Ubuntu, with Linux 4.4.0-179-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-179-generic-recovery-078e99ce-eb46-4324-bd9b-6dc10573508b' {
     # 	menuentry 'Ubuntu, with Linux 4.4.0-178-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-178-generic-advanced-078e99ce-eb46-4324-bd9b-6dc10573508b' {
     # 	menuentry 'Ubuntu, with Linux 4.4.0-178-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-178-generic-init-upstart-078e99ce-eb46-4324-bd9b-6dc10573508b' {
     # 	menuentry 'Ubuntu, with Linux 4.4.0-178-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-178-generic-recovery-078e99ce-eb46-4324-bd9b-6dc10573508b' {
     # 	menuentry 'Ubuntu, with Linux 4.4.0-21-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-advanced-078e99ce-eb46-4324-bd9b-6dc10573508b' {
     # 	menuentry 'Ubuntu, with Linux 4.4.0-21-generic (upstart)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-init-upstart-078e99ce-eb46-4324-bd9b-6dc10573508b' {
     # 	menuentry 'Ubuntu, with Linux 4.4.0-21-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.4.0-21-generic-recovery-078e99ce-eb46-4324-bd9b-6dc10573508b' {
     # menuentry 'Memory test (memtest86+)' {
     # menuentry 'Memory test (memtest86+, serial console 115200)' {
    

    比如我当前的内核是 Ubuntu,Linux 4.4.0-184-generic。我现在要切换为 Ubuntu,Linux 4.4.0-21-generic

  2. 修改配置文件

     // /etc/default/grub
     GRUB_DEFAULT=0
     GRUB_HIDDEN_TIMEOUT=0
     GRUB_HIDDEN_TIMEOUT_QUIET=true
     GRUB_TIMEOUT=10
     GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
     GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
     GRUB_CMDLINE_LINUX=""
    

    GRUB_DEFAULT 配置说明

    GRUB_DEFAULT 表示了开机的时候的默认选项(包括二级菜单选项)。

    图1

    一级菜单 (从 0 开始编号)

     Ubuntu                      对应 0
     Advanced options for Ubuntu 对应 1
     Memory test (memtest86+)    对应 2
     ...
    

    对于二级菜单也是一样的道理,每个菜单项下的子菜单都是从 0 开始编号。那么这里如果我要配置 Advanced options for Ubuntu 下的 Ubuntu,Linux 4.4.0-21-generic,我们的内核顺序就应该是 1>9,这里注意在填写 GRUB_DEFAULT 的时候一定要加上有引号,如:

     GRUB_DEFAULT="Ubuntu,Linux 4.4.0-21-generic"       # 默认一级菜单
     # or
     GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu,Linux 4.4.0-21-generic"
     # or
     GRUB_DEFAULT="Advanced options for Ubuntu>9"
     # or
     GRUB_DEFAULT="1>Ubuntu,Linux 4.4.0-21-generic"
     # or
     GRUB_DEFAULT="1>9"
    
  3. 更新启动项

     # 更新启动项
     sudo update-grub
    

    这时候会有 WARNING 提示修改 GRUB_DEFAULT 的名称

     Warning: Please don't use old title `Ubuntu, with Linux 4.4.0-179-generic' for GRUB_DEFAULT, use `Advanced options for Ubuntu>Ubuntu, with Linux 4.4.0-179-generic' (for versions before 2.00) or `gnulinux-advanced-078e99ce-eb46-4324-bd9b-6dc10573508b>gnulinux-4.4.0-179-generic-advanced-078e99ce-eb46-4324-bd9b-6dc10573508b' (for 2.00 or later)
    

    根据提示可以使用 “Advanced options for Ubuntu>Ubuntu, with Linux 4.4.0-179-generi” 或者 “gnulinux-advanced-078e99ce-eb46-4324-bd9b-6dc10573508b>gnulinux-4.4.0-179-generic-advanced-078e99ce-eb46-4324-bd9b-6dc10573508b” 将上面的代码放在 GRUB_DEFAULT=’’ 单引号里面

     GRUB_DEFAULT='gnulinux-advanced-078e99ce-eb46-4324-bd9b-6dc10573508b>gnulinux-4.4.0-179-generic-advanced-078e99ce-eb46-4324-bd9b-6dc10573508b'
    
  4. 验证

     # 重启
     sudo reboot
    
     # 验证
     uname -a
    
Table of Contents