当前位置: 首页>>技术教程>>正文


grub2 – 删除 Grub 中的旧内核条目

,

问题描述

我定期使用 Synaptic 删除旧内核,只留下最新的两个条目。

我正在使用精确。然而,在我的 Grub“以前的 Linux 版本”菜单中,有很多标有 2.6.8 的条目。我在 Synaptic 中找不到这些 linux-images。

dpkg -l | grep linux-image

给出:

rc  linux-image-3.0.0-17-generic           3.0.0-17.30                         
    Linux kernel image for version 3.0.0 on x86/x86_64
ii  linux-image-3.2.0-27-generic           3.2.0-27.43
Linux kernel image for version 3.2.0 on 32 bit x86 SMP
ii  linux-image-3.2.0-29-generic           3.2.0-29.46
Linux kernel image for version 3.2.0 on 32 bit x86 SMP
ii  linux-image-3.4.0-030400-generic       3.4.0-030400.201205210521
Linux kernel image for version 3.4.0 on 32 bit x86 SMP
ii  linux-image-generic                    3.2.0.29.31
Generic Linux kernel image

须藤 update-grub 给出:

Generating grub.cfg ...
Found linux image: /boot/vmlinuz-3.4.0-030400-generic
Found initrd image: /boot/initrd.img-3.4.0-030400-generic
Found linux image: /boot/vmlinuz-3.2.0-29-generic
Found initrd image: /boot/initrd.img-3.2.0-29-generic
Found linux image: /boot/vmlinuz-3.2.0-27-generic
Found initrd image: /boot/initrd.img-3.2.0-27-generic
Found linux image: /boot/vmlinuz-2.6.38-11-generic
Found initrd image: /boot/initrd.img-2.6.38-11-generic
Found linux image: /boot/vmlinuz-2.6.38-10-generic
Found initrd image: /boot/initrd.img-2.6.38-10-generic
Found linux image: /boot/vmlinuz-2.6.38-8-generic
Found initrd image: /boot/initrd.img-2.6.38-8-generic
Found memtest86+ image: /boot/memtest86+.bin
Found Windows Vista (loader) on /dev/sda1

sudo apt-get remove linux-image-2.6.8-8-generic 给出:

E: Unable to locate package linux-image-2.6.8-8-generic
E: Couldn't find any package by regex 'linux-image-2.6.8-8-generic'

我的引导文件夹包含以下内容:

abi-2.6.38-10-generic         initrd.img-3.4.0-030400-generic
abi-2.6.38-11-generic         memtest86+.bin
abi-2.6.38-8-generic          memtest86+_multiboot.bin
abi-3.2.0-27-generic          System.map-2.6.38-10-generic
abi-3.2.0-29-generic          System.map-2.6.38-11-generic
abi-3.4.0-030400-generic      System.map-2.6.38-8-generic
config-2.6.38-10-generic      System.map-3.2.0-27-generic
config-2.6.38-11-generic      System.map-3.2.0-29-generic
config-2.6.38-8-generic       System.map-3.4.0-030400-generic
config-3.2.0-27-generic       vmcoreinfo-2.6.38-10-generic
config-3.2.0-29-generic       vmcoreinfo-2.6.38-11-generic
config-3.4.0-030400-generic   vmcoreinfo-2.6.38-8-generic
extlinux                      vmlinuz-2.6.38-10-generic
grub                          vmlinuz-2.6.38-11-generic
initrd.img-2.6.38-10-generic  vmlinuz-2.6.38-8-generic
initrd.img-2.6.38-11-generic  vmlinuz-3.2.0-27-generic
initrd.img-2.6.38-8-generic   vmlinuz-3.2.0-29-generic
initrd.img-3.2.0-27-generic   vmlinuz-3.4.0-030400-generic
initrd.img-3.2.0-29-generic

ls -l /etc/grub.d

产量:

total 56
-rwxr-xr-x 1 root root 6715 Apr 17 20:16 00_header
-rwxr-xr-x 1 root root 5522 Oct  1  2011 05_debian_theme
-rwxr-xr-x 1 root root 7407 May 17 09:22 10_linux
-rwxr-xr-x 1 root root 6335 Apr 17 20:16 20_linux_xen
-rwxr-xr-x 1 root root 1588 May  3  2011 20_memtest86+
-rwxr-xr-x 1 root root 7603 Apr 17 20:16 30_os-prober
-rwxr-xr-x 1 root root  214 Oct  1  2011 40_custom
-rwxr-xr-x 1 root root   95 Oct  1  2011 41_custom
-rw-r--r-- 1 root root  483 Oct  1  2011 README
gdisk -l /dev/sda

产量:

Partition table scan:
  MBR: MBR only
  BSD: not present
  APM: not present
  GPT: not present


***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format.
***************************************************************

Disk /dev/sda: 312581808 sectors, 149.1 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): F832A498-05E1-4615-B5B1-757ACB4A757A
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 312581774
Partitions will be aligned on 2048-sector boundaries
Total free space is 4183661 sectors (2.0 GiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        61442047   29.3 GiB    0700  Microsoft basic data
   3       163842048       169986047   2.9 GiB     8200  Linux swap
   4       169986048       312578047   68.0 GiB    0700  Microsoft basic data
   5        61444096       159666175   46.8 GiB    8300  Linux filesystem

请帮助从 Grub 中删除旧的和不存在的内核。

最佳方法

  • 打开终端 ( Ctrl + Alt + T )。

  • 输入 uname -r 。这将向您显示您当前正在使用的内核,因此您不想删除它。

  • 运行以下命令:dpkg --list | grep linux-image。这将显示所有已安装的内核。

  • 记下要删除的所有内核的名称。

  • 要删除内核,请运行:sudo apt-get purge linux-image-x.x.x.x-xyz(将内核名称替换为合适的名称)。

  • 更新 GRUB:sudo update-grub2

而且,你完成了。

奖励:这里有一个小 one-liner 可以自动完成所有这些工作:

sudo apt-get purge $( dpkg --list | grep -P -o "linux-image-\d\S+" | grep -v $(uname -r | grep -P -o ".+\d") )

次佳方法

我发现了这个问题。

问题是,当我升级 Ubuntu 时,通过 liveUSB 安装而不是进行正常升级,它在 /boot 文件夹中留下了旧的内核文件。

现在用同样的方法从12.10升级到13.04,遇到了同样的情况。

解决办法是手动删除/boot文件夹下所有旧内核相关的文件,运行sudo update-grub。多余的条目消失了。

第三种方法

试试这个命令。它是同一 apt-get remove 命令的改进版本

sudo apt-get autoremove linux-image-3.2.0-23-generic-pae

通过将 remove 替换为 autoremove,删除过程会自动查找并删除其他剩余的依赖项,因此您将获得干净的卸载,而不必四处寻找并删除剩余的部分。

对其他旧内核也重复此过程。

之后,运行

sudo update-grub

之后,您将只会看到最新的内核。

第四种方法

我通常只是启动 Synaptic(这些天必须单独安装),在已安装类别中搜索 “linux” 并标记所有旧版本的内核和 linux-headers(即除当前版本之外的所有版本)以删除。卸载后,它们将从 GRUB 菜单中删除。

必须有一个漂亮的单行命令来执行此操作,但手动执行此操作感觉更安全

第五种方法

最巧妙的解决方案是使用 ubuntu-tweak 。安装后,启动它,转到 Janitor ,选择 Old Kernel ,选择要删除的旧内核和 Clean 。而已! (请注意,只有旧内核出现在看门人中)

第六种方法

我建议你在终端会话中输入它( AltCtrlT ):

sudo update-grub

此命令使 grub 使用 os-prober 并更新菜单。

如果您的分区上有使用过 grub 的旧 Ubuntu 版本(看起来 OP 在某处有一个 natty 版本分区,也许更多),则有必要在当前系统上运行 update-grub 之前清理它们。 os-prober 查找 Windows 和其他 Linux 分区。对于其他 Linux 分区,它会从它们的 grub 菜单中复制项目(如果有的话),而不是查看它们的内核文件。

如果你的配置真的一团糟,最好的解决办法可能是启动你的 Ubuntu 系统并重新安装 grub:

sudo apt-get --reinstall install grub2

在重新安装 grub 时,它将根据该分区中安装的内核和其他(可能是较旧的)Ubuntu 分区的 grub 配置中安装的内核重新创建 /etc/default/grub/boot/grub/menu.cfg 文件(OP 似乎没有) .

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/13237.html,未经允许,请勿转载。