删除Grub中的旧内核条目

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

我正在使用Precise。 但是在我的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 

Sudo 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-29generics 

  ls -l /etc/grub.d 

收益率:

 总计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 2011年5月3日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自述文件
 gdisk -l /dev/sda 

收益率:

 分区表扫描:
   MBR:仅限MBR
   BSD:不在场
   APM:不在场
   GPT:不存在


 ************************************************** *************
发现无效的GPT和有效的MBR; 将MBR转换为GPT格式。
 ************************************************** *************

磁盘/ dev / sda:312581808扇区,149.1 GiB
逻辑扇区大小:512字节
磁盘标识符(GUID):F832A498-05E1-4615-B5B1-757ACB4A757A
分区表最多可容纳128个条目
第一个可用扇区是34,最后一个可用扇区是312581774
分区将在2048个扇区边界上对齐
总可用空间为4183661个扇区(2.0 GiB)

号码开始(扇区)结束(扇区)大小代码名称
    1 2048 61442047 29.3 GiB 0700 Microsoft基本数据
    3 163842048 169986047 2.9 GiB 8200 Linux交换
    4 169986048 312578047 68.0 GiB 0700 Microsoft基本数据
    5 61444096 159666175 46.8 GiB 8300 Linux文件系统

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

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

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

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

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

  • 要删除内核,请运行: sudo apt-get purge linux-image-xxxx-xyz用适当的内核替换内核名称 )。

  • 更新GRUB: sudo update-grub2

而且,你已经完成了。

额外奖励:这里有一个小小的单行自动完成所有操作:

 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 

通过使用autoremove替换remove ,删除过程会自动查找并删除其他依赖项,因此您将获得一个干净的卸载,而不必去往那里并删除剩余部分。

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

之后,跑

 sudo update-grub 

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

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

必须有一个漂亮的单行命令才能做到这一点,但手动执行此操作会感觉更安全

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

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

 sudo update-grub 

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

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

如果你有一个非常混乱的配置,最好的解决方案可能是启动你的Ubuntu系统并重新安装grub:

 sudo apt-get --reinstall install grub2 

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

适用于Ubuntu 12.04 LTS(精确)64位(非PAE 32位)

检查存在哪些版本:

 sudo update-grub 

删除最旧的第一个, 不要删除当前/最新版本:

 sudo apt-get remove linux-image-3.2.0-23-generic sudo apt-get remove linux-image-3.2.0-24-generic sudo apt-get remove linux-image-3.2.0-25-generic 

重新检查现在的版本。 (可选的)

注意: 如果您删除除最新版本(或仅保留一个版本)以外的所有版本,则此步骤是必需的

 sudo update-grub 

对于Ubuntu 12.04 LTS(精确)32位(PAE)

检查存在哪些版本:

 sudo update-grub 

删除最旧的第一个, 不要删除当前/最新版本:

 sudo apt-get remove linux-image-3.2.0-23-generic-pae sudo apt-get remove linux-image-3.2.0-24-generic-pae sudo apt-get remove linux-image-3.2.0-25-generic-pae 

重新检查现在的版本。 (可选的)

注意: 如果您删除除最新版本(或仅保留一个版本)以外的所有版本,则此步骤是必需的

 sudo update-grub