日志文件系统能否保证断电后不会损坏?

日志文件系统能否保证断电后不会损坏?

我代表以下人问这个问题另一位提出该问题的用户在 Ubuntu 聊天室中。

日志文件系统能否保证在发生电源故障时不会发生损坏?

如果这个答案取决于文件系统,请指出哪些可以防止损坏,哪些不能。

答案1

没有任何保证。日志文件系统更具弹性并且不易损坏,但也不能幸免。

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

虽然这种日志记录比不记录日志的情况更不容易发生损坏,但仍然可能发生损坏。例如,如果硬盘驱动器出现机械故障,或者对日志本身的写入失败或中断。

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

进一步阅读已存档的 IBM 页面:

答案2

不。

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

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

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

有一种不太常见的日志类型,称为数据日志,ext3如果您使用该选项安装它,就会发生这种情况data=journal

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

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

欲了解更多信息,请查看维基百科日志文件系统文章和数据模式部分ext4 文档

答案3

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

如果硬盘驱动器缓冲写入数据,但告诉操作系统它已写入数据并且不支持适当的写入屏障,则可能会发生乱序写入,即较早的写入未命中盘片,但较晚的写入会命中盘片有。看这个服务器错误答案更多细节。

此外,磁头在磁性 HDD 上的位置是由电磁体控制的。如果在写入过程中断电,则在磁头移动时某些数据可能会继续写入,从而损坏文件系统从未打算写入的块上的数据。

答案4

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

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

相关内容