如果系统分区短时间内无法访问,操作系统会崩溃吗?

如果系统分区短时间内无法访问,操作系统会崩溃吗?

在虚拟机环境(如 VMWare 或 KVM)中安装了操作系统。使用网络共享磁盘卷(例如 iSCSI 磁盘)作为操作系统的系统分区。此操作系统中正在运行大量流量。如果共享磁盘卷暂时无法访问两三分钟(由于网络问题或其他原因),并且在此短暂时间之后再次上线,会发生什么情况?操作系统会崩溃,还是会继续运行而不会损坏数据?

我已经用 Linux 客户操作系统测试了我的案例。在非访问期间,Linux 桌面挂起,我无法操作它。但是当系统卷可以再次访问时,我可以再次使用桌面,并发现之前的任务仍在继续运行。

虽然我的测试似乎成功了,但我不能确保它总是没问题。我知道操作系统会重试 IO,所以如果磁盘在短时间内没有返回 IO,也许没关系。但操作系统还使用交换分区来交换内存中的一些页面。如果交换操作因磁盘而暂停,会有什么严重后果吗?

答案1

scsi 磁盘的默认超时时间为 30 秒,但您可以通过更改 /sys/block/disk/device/timeout 来更改它,例如使用 echo 180 > /sys/block/disk/sda/timeout 将超时时间增加到 180 秒。

答案2

如果我理解正确的话,从操作系统的角度来看,客户操作系统系统分区是本地的,而对于 VMWare 来说它只是远程的?

虽然不确定,但我使用 VMWare 的经验是,它会在这段时间内暂停虚拟机。实际上,我在使用 VMWare ESXi 时遇到了一个问题,在增加可增长分区的大小时,存储(包含所有虚拟机,并且是本地的!)已满。所有虚拟机都暂停了。我不得不删除快照以释放一些空间,但我不确定它们是否会在之后直接继续运行(或重新启动后继续运行)。虽然不是关键服务器,我只是一名开发人员,而不是系统管理员 :)

答案3

如果你丢失了磁盘 2-3 秒,你大概没问题,操作系统会在恢复后继续运行。尽管它会在日志中大声抱怨。

如果你丢失磁盘几分钟,操作系统可能会或可能不会出现内核恐慌/BSOD,但除非你真的很幸运,否则你将丢失数据和系统将要变得非常不稳定。

是的,I/O 子系统将重试...但几分钟内不会重试。

答案4

这其实是一个相当复杂的问题,答案取决于您的主机配置。首先,iSCSI 层有自己的超时时间和重试次数。控制块设备的设备映射器多路径也是如此,在此之上,您有 QEMU 磁盘层和客户操作系统中的磁盘控制器驱动程序。不必过多赘述,如果您预计使用不稳定的存储,将风险降至最低会更安全。这可以通过禁用 QEMU 磁盘缓存功能(cache=none在 cmd 行中)来实现,并使用werror=stop让客户机在遇到 IO 错误时暂停,而不是无限期地尝试推动该 IO。如果您不使用这些,使用不稳定的存储,您将面临图像损坏和数据丢失的风险,但在某些情况下,如果客户操作系统检测到 IO 错误(例如,如果您使用传播),它可能会简单地在 r/o 模式下重新安装其 FS。

无论如何,避免磁盘访问瓶颈通常更好,尤其是涉及虚拟机时。多条路径和仅用于 iSCSI 流量的单独网络是实现此目的的常用方法。

相关内容