Answers:
没有保证。日记文件系统更具弹性,不易损坏,但不能幸免。
所有日志都是最近对文件系统执行的操作的列表。关键部分是日记帐分录是在操作发生之前进行的。大多数操作都有多个步骤。例如,删除文件可能需要删除文件系统目录中文件的条目,然后将驱动器上的扇区标记为空闲。如果两个步骤之间发生了某些情况,则日记文件系统可以立即告知并执行必要的清理以使所有内容保持一致。对于非日志文件系统则不是这种情况,非文件系统必须查看卷的整个内容以查找错误。
尽管此日志记录比不记录日志更不容易受到损坏,但损坏仍然可能发生。例如,如果硬盘驱动器发生机械故障,或者写入日志本身失败或中断。
日记的基本前提是,写日记条目通常比其描述的实际交易要快得多。因此,操作系统订购(日志)写入和硬盘驱动器完成写入之间的时间比正常写入要短得多:出现问题的窗口更窄,但是仍然有一个窗口。
没有。
最常见的日志记录类型称为元数据日志记录,仅保护文件系统的完整性,而不保护数据的完整性。这包括xfs
,和ext3
/ ext4
在默认data=ordered
模式。
如果非日志文件系统崩溃,将fsck
在下次启动时使用对其进行检查。 fsck
扫描文件系统上的每个索引节点,查找标记为已使用但不可访问的块(即没有文件名),并将这些块标记为未使用。这样做需要很长时间。
使用元数据日记文件系统,它无需执行fsck
,而是知道它在更改过程中处于哪个块,因此可以将它们标记为空闲,而无需在整个分区中搜索它们。
有一种不太常见的日志记录类型,称为数据日志记录,ext3
如果您使用data=journal
选件将其挂载,它将执行该操作。
它尝试通过不仅写入逻辑操作列表,而且还将每次写入日志的全部内容写入日志来保护所有数据。但是由于它要两次写入数据,所以速度可能慢得多。
正如其他人指出的那样,即使这也不是保证,因为硬盘驱动器可能已经告诉操作系统它已经存储了数据,而实际上它仍在硬盘驱动器的缓存中。
有关更多信息,请参阅Wikipedia Journaling File System文章和ext4文档的Data Mode部分。
data=journal
作为功能完全没有意义吗?
如果发生电源故障,文件系统不能保证其文件系统的一致性,因为它不知道硬件会做什么。
如果硬盘驱动器缓冲要写入的数据,但告知操作系统它已写入数据且不支持适当的写入障碍,则在较早的写入未达到正常状态但后来写入的情况下,可能会发生乱序写入拥有。有关更多详细信息,请参见此serverfault答案。
而且,磁头在磁性硬盘驱动器上的位置由电磁铁控制。如果在写入过程中断电,则可能在磁头移动时继续写入某些数据,从而破坏了文件系统从未打算写入的块上的数据。