假设你正在用ssd或机械磁盘(操作系统也在同一个磁盘上,没有电池/不间断电源)在一个linux pc盒子中对磁盘进行全速写入:
cat /dev/urandom > omg.txt
如果在这个过程中突然断电或者其他任何不正常的关机/重启。
文件是否会被破坏,无法修复(即没有任何数据可以恢复?),文件系统是否有可能完全无法启动?
文件是否被损坏,无法修复(即没有任何数据可以恢复?)
可能,是的。 有两条明显的路线可以发生。
Ext4是一个元数据日志文件系统 – 它只logging对文件元数据(大小,位置,date)的更改 – 而不是文件内容(btrfs和zfs执行全数据日志logging,性能成本很高)。 所以,尽pipe你不应该使用磁盘,但并不是每一次打开文件和closures+刷新缓冲区的写操作都已经完成。 对写入文件数据没有事务控制。
第二种可能性是磁盘可能由于电源尖峰而受到物理损坏。 尽pipe其他硬件往往把隔离硬盘做得很好,但仍然会有一些漏洞。
会有文件系统完全无法启动的机会吗?
这是一个非常不同的问题 – 这是不太可能的。 当然,第一种情况只适用于在发生故障时正在编写内核,引导程序,虚拟硬盘等。
另请参阅关于unix.stackexchange的这个问答
它不应该损害你的文件系统(假设你使用Ext4并且启用了障碍 – 因为它是默认的)。
从https://ext4.wiki.kernel.org/index.php/Ext4_Howto引用:
障碍默认
这是一个可以提高文件系统完整性的选项,但要牺牲一些性能(可以用“mount -o barrier = 0”来禁用它,build议在基准testing中尝试它)。 从这个LWN的文章:“文件系统代码必须在写入日志提交logging之前,确保所有的事务信息已经写入日志,只要按照正确的顺序进行写入是不够的;当代驱动器维护所以文件系统必须明确地指示磁盘在写入提交logging之前把所有的日志数据放到介质上;如果先写入提交logging,日志可能会被破坏。内核的块I / O子系统通过使用障碍使得这个function可用;实质上,障碍是禁止在障碍之后写入任何块,直到在障碍之前写入的所有块都被委托给介质为止,通过使用障碍,文件系统可以使确保他们的磁盘结构始终保持一致。“
更多阅读: https : //lwn.net/Articles/283161/ 。
这不是关于你select的文件系统,而是关于在你的硬盘/ RAID控制器上写caching。
如果你失去了能力,caching中的所有东西都会丢失,但是通常不会影响你的操作系统,但是文件可能会损坏,是的。
如果您的服务器上有重要数据,请始终使用带有电池的UPS或RAID控制器。