Debian 虚拟机作为客户 VirtualBox VM 运行。它的文件系统是 EXT3。主机系统断电,在启动主机系统和客户 VM 后,我发现 VM 的文件系统已回滚到以前的状态,丢失了断电前对文件系统所做的更改。回滚的操作在断电前已完全完成(文件完全复制、文件句柄关闭等),但在崩溃时 VM 上可能甚至很可能正在发生其他写入操作。
因此,我试图弄清楚是否是文件系统恢复过程在断电后遇到损坏后回滚文件系统操作,或者它可能与 VirtualBox 有关,以及它默认忽略刷新请求以提高性能的方式(讨论过这里)
还有什么因素会导致断电后文件系统回滚?
编辑:在 Windows 主机上使用相同的 VM 测试了一个简化的场景,方法是启动它,在文件系统上创建一对文件并终止运行 VM 的 VirtualBox.exe 进程。启动 VM 后,终止进程之前创建的文件消失了。我将写入文件和终止 VirtualBox 进程之间的时间从几秒到几分钟不等,结果相同。在这段时间内,测试 VM 上没有 IO 活动,当然除了通常的 Linux 活动,无论它是什么。还在使用 ext2 而不是 ext3 的 Debian VM 上尝试了相同的测试,结果完全相同。看起来它与 VirtualBox 的关系比与文件系统的关系更密切。
此外,在测试期间,VirtualBox 还配置了以下附加设置:
"VBoxInternal/Devices/piix3ide/0/LUN#[x]/Config/FlushInterval" 1
"VBoxInternal/Devices/piix3ide/0/LUN#[x]/Config/IgnoreFlush" 0
因此看起来它们对这个特定问题没有任何影响。
答案1
ext3 是一个日志文件系统,如果日志在电源故障后损坏,那么让您的文件系统丢失日志记录的更改总比得到损坏的文件系统要好。所以总的来说,这是为了保护您。
任何其他破坏日志或导致日志丢失的因素都会产生同样的效果(例如,电缆故障)。
还有更详细的讨论,例如这里: