为什么删除旧内核是不安全的?

我在启动驱动器上的空间已经用完了,所以我决定删除旧内核。我找到了这个页面,里面详细描述了我应该做什么:Lubuntu文档:删除旧内核
我已经手动删除了最旧的内核,现在一切都正常了,但是有一件事我不明白:文章末尾有一些代码可以删除所有旧内核版本,但被标记为仅供高级用户使用。
我真的不明白这里的危险在哪里。听起来很傻,但他们似乎在说一个特定机器可能同时使用多个内核。
我的Ubuntu机器上的不同应用程序是否可能同时使用不同的内核?为什么自动删除所有旧内核被认为是危险的?

8实际上,这篇文章并没有使用"危险"和"不安全"这两个词。你是怎么得出如此极端夸张的结论的呢? - mikewhatever
2有几次,我升级到最新的内核并在重新启动之前删除了旧内核,结果发现(在我的特定系统上)该内核无法正常工作,系统无法启动。现在,如果一切正常,我会先重新启动,然后再删除旧内核。 - Matthew Read
4个回答

删除旧内核本身并不安全,但如果您删除了所有内核并重新启动,您将会看到一个愤怒的Grub屏幕。修复这个问题需要相当的专业知识(就像那样,最后加上apt-get install linux-generic)。
第一次这样做确实令人兴奋,但那些希望清理Grub菜单或释放一些磁盘空间的人并不是在寻找刺激。 危险来自于用户复制粘贴一段代码,而他们并不知道也没有意识到其中的风险。检测旧内核有很多例子,但几乎没有完美的方法。即使是我最新的努力仍然存在缺陷。而我们讨论的是一个可以修复的问题;如果使用不当,Ask Ubuntu上的许多帖子可能导致永久数据丢失。
我们试图通过提示风险,让用户意识到潜在问题,以防止损害发生。在最好的情况下,用户将会有所准备和装备来处理问题,而在最坏的情况下,至少他们不能抱怨他们没有被警告过。

11不要删除所有的内核(显然),但如果你刚刚安装了更新的内核并且还没有重新启动,请不要删除当前正在运行的内核。为什么呢?如果更新的内核出现问题,你可以在Grub中选择之前的内核并继续工作。否则,你将陷入无法启动的系统中,并不得不玩“LiveCD游戏”(顺便说一句,这不是一个有趣的游戏)。 - Nathan Osman
1那几乎和 dd if=/dev/zero of=/dev/sda bs=512 count=1 一样有趣。我不记得当时我试图做什么(与多个引导管理器让我的生活变得烦人有关的事情)。我花了大约七个小时用 LiveCD 尝试修复我的分区表。 - phyrfox
1就是这么简单,保留至少一个经过测试并确实有效的内核。 @NathanOsman 这位仁兄必须真正将其表达出来。在这里学到的第二个重要教训是,不要去做你不了解后果的事情。 - Nicolai Grossherr
1我不会用“令人兴奋”的词,但当我做这件事时,感觉确实很强烈。 - MDeBusk
过去解决了内核问题后,我更愿意保留三个内核。通常我选择当前正在运行的内核、最新的内核以及当前内核之前的一个版本。这样在重启时,我可以使用最新的内核,已知可正常工作的内核,以及如果出现某些原因导致前两个内核无法使用时的上一个版本。这可能有点多余,但是可以确保安全。 - flickerfly

旧内核是软件包的一部分。如果你只删除/boot/vmlinuz-3.13.0-44-generic,那么会留下软件包的残余文件。
首先,找出你正在运行的内核。不要删除任何以此值为名称的文件。
$ uname -r  
3.13.0-49-generic  

YMMV。然后,询问dpkg它所知道的内容:
$ dpkg -l linux-*

一些包可以被删除,但还有什么?使用从dpkg -l linux-*输出中(在我的系统上)提取的一行进行操作:
 ii  linux-image-3.13.0-44-generic       3.13.0-44.73           amd64                  Linux kernel image for version 3.13.0 on 64 bit x86 SMP

现在我们来看看其他包的名称中是否有-3.13.0-44
$ dpkg -l *-3.13.0-44*

一旦你做最后的检查,确保当前的内核(uname -r)不在包列表中,你可以通过你选择的软件包管理系统开始移除它们。

这并不是不安全的。使用Linux,只要你知道正确的命令,你可以做任何你想做的事情。

/boot目录下,你可以简单地运行ls -la命令来获取详细列表,并找到任何隐藏的文件或目录(如果有的话,它们不应该存在!)。

通过这些信息,你可以评估日期和旧版本的文件。不要删除所有文件,只删除与相同版本对应的最旧的文件。

我曾经认为,如果你从源代码编译了内核,那么你将需要调整一个新的内核。我不认为你的解释中有.config文件,所以它会保留在那里。

因此,如果在删除与单个版本对应的旧文件并重新启动计算机后,可能会遇到内核恐慌的情况。

简单的解决办法是使用Live USB或CD/DVD Linux引导计算机。使用chroot进入其中,并使用像dracut这样的工具重新构建内核。


上次我删除旧内核时,借用了一个旧的代码片段。嗯,这个代码片段要求我在安装新内核后重新启动,所以我没有内核可用。幸运的是,在重新启动之前我发现了这个问题,但正如其他人所说,我可能会被留下“愤怒的 grub 屏幕”。
长话短说,这只是一件容易搞砸的事情,结果可能导致系统变砖,很难恢复。