假设你在装有 SSD 或机械磁盘的 Linux PC 机箱中全速写入磁盘(操作系统也在同一磁盘上,没有电池/UPS):
cat /dev/urandom > omg.txt
如果在此过程中突然断电,或发生任何其他类型的非正常关机/重置。
文件是否会损坏且无法修复(即无法恢复任何数据?),文件系统是否有可能完全无法启动?
答案1
文件是否会损坏且无法修复(即无法恢复任何数据?)
有可能,是的。有 2 种明显的途径可以实现这一点。
Ext4 是一个元数据日志文件系统 - 它只记录文件元数据(大小、位置、日期)的更改 - 而不是文件内容(btrfs 和 zfs 会以很大的性能成本进行全数据日志记录)。因此,尽管您永远不需要对磁盘进行 fsck,但这并不意味着打开文件和关闭 + 刷新缓冲区之间的每个写入操作都会完成。对文件数据的写入没有事务控制。
第二种可能性是磁盘可能因电源尖峰而受到物理损坏。尽管其余硬件往往能很好地隔离硬盘,但仍会存在一些泄漏。
文件系统是否有可能完全无法启动?
这是一个非常不同的问题 - 这种可能性很小。当然,第一种情况仅适用于您在停机时恰好正在编写内核、引导加载程序、ramdisk 等。
答案2
它不应该损坏您的文件系统(假设您使用 Ext4 并启用了屏障 - 默认情况下如此)。
引自https://ext4.wiki.kernel.org/index.php/Ext4_Howto:
默认设置障碍
这是一个以牺牲部分性能为代价来提高文件系统完整性的选项(您可以使用“mount -o barrier=0”禁用它,如果您正在进行基准测试,建议您尝试一下)。摘自这篇 LWN 文章:“在写入 [日志] 提交记录之前,文件系统代码必须绝对确保所有事务信息都已写入日志。仅按正确顺序进行写入是不够的;当代驱动器维护着大型内部缓存,并将重新排序操作以获得更好的性能。因此,文件系统必须明确指示磁盘在写入提交记录之前将所有日志数据写入介质;如果提交记录先写入,日志可能会损坏。内核的块 I/O 子系统通过使用屏障来实现此功能;本质上,屏障禁止在屏障之后写入任何块,直到屏障之前写入的所有块都提交到介质。通过使用屏障,文件系统可以确保其磁盘结构始终保持一致。”
答案3
这实际上与您选择的文件系统无关,而是与硬盘驱动器/RAID 控制器上的写入缓存有关。
如果断电,缓存中的所有内容都会丢失,这通常不会影响您的操作系统,但文件可能会损坏,是的。
如果您的服务器上有关键数据,请始终使用带电池的 UPS 或 RAID 控制器。