我最近删除了活跃的 Linux 内核并继续使用该系统,就好像没有发生任何重大事情一样。删除当前正在使用的 Linux 内核是否有任何副作用?那么其他非 Windows 内核呢?
答案1
Linux 内核在启动时完全加载到 RAM 中。系统启动后,它永远不会返回并尝试从该文件中读取任何内容。一旦加载到内核中,驱动程序也是如此。
如果删除了磁盘上唯一的内核映像,唯一的后果是系统无法成功重新启动,除非您在重新启动之前安装替换内核映像。
至于其他操作系统,我想也是一样的,这只是由于操作系统内核的性质所致。它们是故意保留的小代码,始终保持运行,因此没有动力继续返回磁盘再次“查看”代码。它一直在记忆中。 (RAM 或虚拟机。)
答案2
好吧,如果你有适当的访问权限,讽刺的是,内核支持/dev/kmem
你可以覆盖 RAM 中正在运行的内核。完全可以用dd
或 来完成cat
。您可能会导致内核恐慌或机器锁定。
有一个内核选项“netuers” /dev/kmem
,它只允许访问某些地址范围(PCI 地址空间等),我想这在大多数发行版库存内核中都已启用,因此您可能无法在真实系统上执行此操作,除非你自己编译了内核。但是...试试这个完全用 Javascript 在浏览器中运行的 Linux 实例: cat /dev/zero > /dev/ram
- 在真实的系统上也会发生类似的情况。
然而,Linux 提供了一个名为 的功能(可选)kexec
,它将加载到另一个内核中,然后执行它,覆盖当前正在执行的内核。为了安全地执行此操作,必须在没有驱动程序/设备/文件处于活动状态时执行此操作,即系统必须执行其关闭程序,卸载所有磁盘等,就像它在“切换”之前关闭一样。可用于在不通过 BIOS 的情况下重新启动系统。如果您喜欢在正在运行的系统中,您也可以完全忽略所有这些预防措施以及kexec
内核或任何代码 - 存在类似于在没有正确关闭的情况下关闭电源的损坏风险。