问题描述
我定期使用 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
。而已! (请注意,只有旧内核出现在看门人中)
第六种方法
我建议你在终端会话中输入它( Alt
– Ctrl
– T
):
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 似乎没有) .