从menu.lst中删除旧内核是否安全?

当计算机启动时,GRUB会显示一个长长的列表,其中包括以往的内核版本以及其他常见的内容。
Ubuntu 10.10, kernel 2.6.35-23-generic
Ubuntu 10.10, kernel 2.6.35-23-generic (recovery mode)
Ubuntu 10.10, kernel 2.6.35-22-generic
Ubuntu 10.10, kernel 2.6.35-22-generic (recovery mode)
[6 more similar]
Ubuntu 10.10, memtest86+
Other operating systems:
Dell Utility Partition
Windows Vista (loader)

/etc/grub/menu.lst中删除那些额外的"Ubuntu 10.10,内核"行是否安全?目前我已经将第三行及以上(不包括)到memtest86之间的行注释掉了。但是我想知道它们是否有特定的原因需要保留吗?

5个回答

安全但无意义。下次运行update-grub时,它们可能会再次出现。
内核被安装为软件包,因此可以像其他软件包一样进行删除。 与仅仅在grub上操作相比,巨大的好处是您将释放数百兆字节的磁盘空间。
它们过去是非自动安装的,但现在可以安全地使用以下命令进行删除:
sudo apt-get autoremove

如果您手动安装了内核和各种辅助软件包,您可以使用以下命令查看已安装的内核版本:
dpkg -l | awk '$2~/linux-(im|he|to).+[0-9]/ {print $2}'

这将会显示给你类似这样的东西:
linux-headers-3.13.0-24
linux-headers-3.13.0-24-generic
linux-image-3.13.0-24-generic
linux-image-extra-3.13.0-24-generic

从那里,你可以使用sudo apt-get purge <package-name>来删除东西。只要确保不要删除当前或最新的内核(使用uname -a查看你所在的版本),我同意其他人的观点,保留下一个最新的内核以防万一出现问题。
以下是我尽力检测和安全执行此操作的最佳努力:
current=$(uname -r)
kernels=( /lib/firmware/[0-9].* )

dpkg -l | awk '$2~/linux-(im|he|to).+[0-9]/ {print $2}' \
| grep -Ev "$current|${kernels[-1]##*/}" \
| xargs sudo apt-get purge

注意:这仍然可能会导致一些棘手的情况。如果你安装了HWE堆栈,它将删除像linux-image-generic这样的东西。对于你来说,这可能是一个大问题,也可能不是。那些软件包(尽管看起来很重要)不会级联删除你的整个桌面。你将保留当前版本(因为它可用)和最高版本的内核。如果你最近重新启动过,那可能是同一个版本。

1我总是回到这个答案...再次非常感谢! - ecoologic
@ecoologic 如果你不断需要回来,你可以在Unity Tweak中使用“清理旧内核”的功能。虽然这并不是必需的,因为上述方法已经很好用了,但也不是需要提醒自己如何操作的事情。 - Jon Hanna
1@ecoologic,关于删除旧内核的问题,你可以查看这些脚本。你可以将这些脚本保存为可执行文件,以便轻松访问。 - jarno

是的。但我建议保留之前的内核,以防万一你现在使用的默认内核出现任何奇怪的问题。如果你至少有一周的测试没有问题,你可以删除旧的内核并更新grub的配置。或者如果你只是不想看到其他版本,那么只需简单地编辑grub.cfg文件,在菜单中删除选项,而不删除实际的旧内核。这样你就有备用了。另外,内核的大小也不值得担心,呵呵。

是的,保留之前的版本可能是个不错的主意。 - Adam Thompson

是的,这是安全的。但只有在你确定最新的内核运行正常时才这样做。同时保留旧的内核,以便在出现问题时可以手动启动它们。

好的,memtest和当前内核以及当前内核恢复模式应该保留在那里,但只要新内核正常工作,删除旧内核就没有问题。


从软件包管理器中删除它们,它们将自动消失。
例如:
apt-get remove linux-image-2.6.35-22-generic