如果在 Linux 内核运行时硬盘驱动器发生故障会发生什么?

Nat*_*man 7 hard-disk linux-kernel

我一直很好奇如果在 Linux 内核运行时硬盘驱动器发生故障会发生什么。由于内核映像本身已完全加载到 RAM 中,因此我认为不会出现任何内核故障。显然,任何试图访问磁盘的软件都会失败。

系统是否有可能无限期地继续运行?如果不是,什么会导致它恐慌(或至少变得无法操作)?

请考虑以下每种情况:

  • 内核可能会也可能不会启用交换文件。
  • 失败后不会尝试加载内核模块。
  • 如果文件系统的某些部分在不同的磁盘上有什么不同吗?

pen*_*359 13

硬件故障总是有导致内核崩溃的风险,因为这些代码路径的测试通常要少得多,但通常情况下,出现故障的硬盘驱动器不应使内核崩溃。究竟发生了什么取决于故障的性质。也许现在只有某些扇区不可读,导致 /home 分区的部分不可读,系统仍然可以运行以供系统管理员分析问题。如果根文件系统变得不可用,无论内核崩溃,系统几乎都死了,因为即使是简单的 shell 也不可用。如果一个交换分区变得不可用,当需要读入任何交换出的数据时,使用交换的程序将出现段错误。如果崩溃的硬盘驱动器只是额外的存储,除了一些文件系统变得不可读之外,它可能没有什么影响。

它还可能取决于硬盘驱动器抛出的错误类型。我已经看到一个驱动器有效地消失了,除了文件系统消失之外,一切都运行正常。我还看到硬盘驱动器在长时间超时后不断挂起系统并抛出错误,从而导致整个系统性能下降。如果使用像 MD 运行 RAID1/4/5 的层,严重错误通常只会导致内核将磁盘标记为失败,并且它会忽略它依靠剩余的驱动器来保持系统运行。

  • 实际上,即使是正在运行的应用程序也可能会崩溃。加载可执行文件时,其映像仅映射到虚拟内存中。如果程序执行跳转到尚未被分页的页面上的代码,那么 bang。 (2认同)