我有一台没有内置硬盘的笔记本电脑。为了充分利用它,我考虑将根分区放在外部介质上,通过 USB。我看不出这有什么不可行的原因,但我想知道如果我意外断开并重新连接 USB 会发生什么。
显然,一般情况下可以自动重新连接设备,但如果根分区断开连接,这仍然可行吗?我很确定,如果根分区消失,正在运行的系统不会立即死机,但如果重新安装变得不可能,我也不会感到惊讶。
我有一台没有内置硬盘的笔记本电脑。为了充分利用它,我考虑将根分区放在外部介质上,通过 USB。我看不出这有什么不可行的原因,但我想知道如果我意外断开并重新连接 USB 会发生什么。
显然,一般情况下可以自动重新连接设备,但如果根分区断开连接,这仍然可行吗?我很确定,如果根分区消失,正在运行的系统不会立即死机,但如果重新安装变得不可能,我也不会感到惊讶。
通常,如果拔出已安装的 USB,已安装的文件系统将变得不可读且不可写。如果 RAM 中有未写入的脏页,USB 上的文件系统状态也可能损坏。(fsck 可能会修复此问题,但也可能会导致数据丢失。)
在此状态下重新插入 USB 时,它将映射到新设备名称,无法重新连接旧安装。这里唯一的解决方案是卸载损坏的安装并从新设备名称重新安装。(旧设备名称可能会在卸载后立即消失,使该名称可用于下一个插入的 USB。)
但是,由于这是根文件系统,您无法卸载并重新安装它(因为它正在使用中),因此这种情况无法恢复。这当然是致命的,但不是立即的。
仍然缓存在内存中的内容在一段时间内仍然可以读取,直到它们的缓存页面被逐出,然后也将不可读。
您将无法运行新程序(尚未缓存在内存中)。甚至它们所在的目录也变得不可读,因此几乎所有操作都会显示“未找到命令”。
需要内存中不存在的页面的现有程序可能会崩溃并突然死亡,没有任何警告,甚至可能没有明显的错误。
有些东西(比如可能是你的 shell)可能永远不会崩溃,因为它们在内存中并且正在使用中,但由于其他一切都会被破坏,因此它们将无法做太多事情。
如果您使用 GUI,GUI 的某些部分可能会因为发现缺少所需页面而死机,包括保存您的 shell 的终端窗口,并且当您尝试在窗口中键入内容时它们可能会消失,或者整个 GUI 最终可能崩溃,让您进入文本终端(由于所有内容都已损坏,您将无法从该终端登录)。
在发生故障的根挂载上打开的关键系统服务即使没有崩溃也无法正常运行,因此情况会逐渐恶化。
如果您碰巧打开了根 shell,您可能能够将恢复的 USB 重新挂载到现有的损坏的根挂载之上,但这很可能不会被允许,而且即使被允许,它也无法修复从已经半崩溃的旧挂载运行的程序,并且一些使用旧挂载运行的程序将看不到新的挂载,并且仍然会卡住。
当您最后剩下的 shell 崩溃(没有任何错误或记录错误的方式)时,没有什么能够替代它,因此它可能看起来只是变得没有响应并且似乎被锁定,而实际上它只是默默地死了。
这是一种不可恢复的状态,随着你的不断尝试,情况会变得越来越糟,直到一切都崩溃并且你重新启动。
您甚至无法关闭或运行重启命令,因为这会触发服务尝试干净地关闭(尽管为时已晚)。
唯一明智的恢复方法是重新启动。这将需要硬重启,如果您幸运的话,可以使用命令完成,
reboot -f -f
但很可能无法使用,您必须通过按住电源按钮直到关闭来手动执行等效操作。(如果您启用了 sysreq 键,您可以执行等效操作,AltSysRqb该操作始终有效(如果已启用)。)