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

Dis*_*oat 17 grub2 kernel

当计算机启动时,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)
Run Code Online (Sandbox Code Playgroud)

从 中删除那些额外的“Ubuntu 10.10,内核”行是否安全/etc/grub/menu.lst?目前我已经注释掉了从第三个到(不包括)memtest86。但我想知道是否出于特定原因需要它们?

Oli*_*Oli 19

安全但毫无意义。下次update-grub运行时,它们可能会重新出现。

内核作为包安装,因此可以像其他包一样删除。仅使用 grub 的巨大好处是您将释放数百兆字节的磁盘空间。

它们曾经以非自动方式安装,但现在可以通过以下方式安全地移除:

sudo apt-get autoremove
Run Code Online (Sandbox Code Playgroud)

如果你已经手动安装了内核和各种辅助包,你可以通过这个命令查看安装的内核版本:

dpkg -l | awk '$2~/linux-(im|he|to).+[0-9]/ {print $2}'
Run Code Online (Sandbox Code Playgroud)

这会告诉你这样的事情:

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
Run Code Online (Sandbox Code Playgroud)

从那里您可以使用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
Run Code Online (Sandbox Code Playgroud)

注意:这仍然会践踏棘手的情况。它将删除诸如linux-image-generic安装 HWE 堆栈之类的内容。这对您来说可能是也可能不是大问题。这些包(尽管它们看起来很重要)不会级联删除您的整个桌面。您将使用当前(因为它有效)和最高版本的内核。如果您最近重新启动,那可能是一回事。


Lui*_*ado 9

是的。但我建议将前一个留在那里,以防万一您的默认设置出现任何奇怪的问题。如果您碰巧有至少一整周的测试没有问题,您可以删除旧的并更新 grub 的配置。或者,如果您只是不想看到其他版本,那么只需编辑 grub.cfg 文件并删除那里的菜单选项,而无需删除实际的旧内核。这样你就可以拥有它们以防万一。再说内核没那么大,不用担心呵呵。