日志文件系统是否可以保证在电源故障后不会损坏?


Answers:


21

没有保证。日记文件系统更具弹性,不易损坏,但不能幸免。

所有日志都是最近对文件系统执行的操作的列表。关键部分是日记帐分录是操作发生之前进行的。大多数操作都有多个步骤。例如,删除文件可能需要删除文件系统目录中文件的条目,然后将驱动器上的扇区标记为空闲。如果两个步骤之间发生了某些情况,则日记文件系统可以立即告知并执行必要的清理以使所有内容保持一致。对于非日志文件系统则不是这种情况,非文件系统必须查看卷的整个内容以查找错误。

尽管此日志记录比不记录日志更不容易受到损坏,但损坏仍然可能发生。例如,如果硬盘驱动器发生机械故障,或者写入日志本身失败或中断。

日记的基本前提是,写日记条目通常比其描述的实际交易要快得多。因此,操作系统订购(日志)写入和硬盘驱动器完成写入之间的时间比正常写入要短得多:出现问题的窗口更窄,但是仍然有一个窗口。

进一步阅读


您能否详细说明为什么这是真的?也许您可以举一个在特定情况下如何发生腐败的示例。
内森·奥斯曼

1
@乔治·爱迪生(George Edison)看到我的扩展答案。
安德鲁·兰伯特

2
最后一点是不正确的;没有出错的窗口。由于它在开始执行操作之前就记录了要执行的操作,因此无论电源在操作过程中发生在什么位置,都可以在电源故障后重新开始操作。这是排序问题,而不是时间问题。
psusi 2011年

@psusi仍然有一个窗口可以中断对日志的写入。日志写入对操作系统而言似乎是原子的,但它们仍在写入磁盘。
安德鲁·兰伯特

5
@Amazed它们是原子的,因为它们具有序列号和/或校验和,因此日记条目要么完全写入,要么不完全写入。如果未完全写入,则在系统重新启动后将其忽略,并且不会对fs进行任何进一步的更改,因此它保持一致。
psusi 2011年

18

没有。

最常见的日志记录类型称为元数据日志记录,仅保护文件系统的完整性,而不保护数据的完整性。这包括xfs,和ext3/ ext4在默认data=ordered模式。

如果非日志文件系统崩溃,将fsck在下次启动时使用对其进行检查。 fsck扫描文件系统上的每个索引节点,查找标记为已使用但不可访问的块(即没有文件名),并将这些块标记为未使用。这样做需要很长时间。

使用元数据日记文件系统,它无需执行fsck,而是知道它在更改过程中处于哪个块,因此可以将它们标记为空闲,而无需在整个分区中搜索它们。

有一种不太常见的日志记录类型,称为数据日志记录,ext3如果您使用data=journal选件将其挂载,它将执行该操作。

它尝试通过不仅写入逻辑操作列表,而且还将每次写入日志的全部内容写入日志来保护所有数据。但是由于它要两次写入数据,所以速度可能慢得多。

正如其他人指出的那样,即使这也不是保证,因为硬盘驱动器可能已经告诉操作系统它已经存储了数据,而实际上它仍在硬盘驱动器的缓存中。

有关更多信息,请参阅Wikipedia Journaling File System文章ext4文档的Data Mode部分。


1
+1用于区分文件系统损坏和数据损坏。在实践中,这种微不足道的区别确实令人费解。
SplinterReality

请原谅我的无知,但是data=journal作为功​​能完全没有意义吗?
boehj 2011年

同样,OS知道驱动器何时缓存数据,并在需要时强制将其刷新以保持一致的fs。当然,如果在电源故障时正在编写数据的应用程序没有认真执行,则该数据文件可能会丢失或损坏,并且无论您是否使用data = journal都适用。
psusi 2011年

@psusi并不重要,程序在写入数据时有多认真,大量硬盘驱动器在读取时静默破坏了数据stackoverflow.com/q/34141117/3338098
user3338098 '16

@ user3338098,以静默方式破坏数据的驱动器被严重破坏,永远不应该使用,并且与软件做错了事而导致的破坏完全不同。
psusi

8

如果发生电源故障,文件系统不能保证其文件系统的一致性,因为它不知道硬件会做什么。

如果硬盘驱动器缓冲要写入的数据,但告知操作系统它已写入数据且不支持适当的写入障碍,则在较早的写入未达到正常状态但后来写入的情况下,可能会发生乱序写入拥有。有关更多详细信息,请参见此serverfault答案

而且,磁头在磁性硬盘驱动器上的位置由电磁铁控制。如果在写入过程中断电,则可能在磁头移动时继续写入某些数据,从而破坏了文件系统从未打算写入的块上的数据。


缩回磁头时,驱动器的固件是否不够智能,无法暂停写入?
内森·奥斯曼

@乔治:这将取决于驱动器。那里有很多东西,您不知道自己(便宜)的硬盘做得如何。
卡姆(Camh)2011年

1
硬盘驱动器会告知操作系统是否使用了回写式高速缓存,并且操作系统会采取措施确保以正确的顺序刷新它们。此外,还对驱动器进行了设计,以便在断电时停止写入。我已经看到一些情况,在断电时写入的扇区由于未完成更新ecc而变得损坏(但可以很容易地正确地重写),但是从未听说过随机扇区在断电时被损坏。
psusi 2011年

3

ZFS接近但不完全是日记文件系统,它通过设计保证在电源故障后不会损坏。

正在进行的写入是否在中间中断都没关系,在这种情况下,其校验和肯定是错误的,因此该块将被忽略。由于文件系统是在写入时复制的,因此以前的正确数据(或元数据)仍在磁盘上,将被代替使用。


2

在大多数情况下,答案是否定的:

  • 正如mikel所说,大多数日记文件系统只能保护文件元数据(例如文件名,大小,权限等信息),而不能保护文件数据(文件内容)。之所以发生这种情况,是因为保护文件数据会导致文件系统非常缓慢(实际上是无用的)。
  • 由于日志也是存储在硬盘上的一种特殊文件,因此断电后可能会损坏日志。因此,如果日志已损坏,则文件系统将无法完成发生电源故障时发生的任何未完成的事务。

哪些事件可能导致期刊损坏?我唯一能想到的就是坏部门-还有其他吗?
内森·奥斯曼

没错,硬件故障是通常的情况。
sakisk 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.