我注意到 XFS 不会在系统启动时实现 fsck,日志文件系统有助于确保文件系统在非正常关闭后处于一致状态的原因之一;在下一次安装时(例如重新启动后),日志将被重播。
不正常关机后是否仍需要 fsck?为什么?
答案1
我在“日志文件系统”的一般背景下回答这个问题。
我认为如果你进行了多次“不干净的关闭”(通过拉电源线什么的)迟早你会进入一个需要fsck
fsck 或道德上等同的文件系统状态,xfs_repair
.我的笔记本电脑上的fileystsmext4
大多数情况下只是在每次重新启动时重播日志,包括干净的关闭,但每隔一段时间,它就会执行一次完整的fsck
.
但问问自己“重播日记”能取得什么成果。重播日志只是确保文件系统其余部分的磁盘块与日志条目要求的顺序匹配。重播日记相当于一小部分fsck
,或者是整篇日记的一部分fsck
。
我认为存在一些口头花招:重放日志的作用是传统的作用的一部分fsck
,并且与(或任何其他文件系统的)xfs_repair
程序完全相同。 XFS 人们只是相信或者他们的经验导致他们不会在每次启动时运行,而只是重放日志。e2fs.fsck
fsck
xfs_repair
答案2
帮助确保文件系统在非正常关闭后处于一致状态
首先要注意的是,XFS、reiser 和 ext 的大多数配置仅实现元数据日志记录,这都是为了避免 fsck。该日志并不总是在启动时重播 - 如果它不完整,它可能会被丢弃。
有些系统支持完整的数据日志记录,但实际上,在现实场景中,这些系统仅提供元数据日志记录的保证水平非常小。
因此,“不一致状态”以及 fsck 解决的问题是元数据和文件本身之间的不匹配。为了避免这种情况,操作系统将建议的元数据更改写入日志,然后将实际数据写入磁盘,然后将日志中复制的元数据更改应用到磁盘。唯一的问题是磁盘控制器将缓冲并可能重新排序请求。为了避免这种情况,大多数日志文件系统都实现了屏障:它们将每个操作分开并等待磁盘确认它已完成操作。但许多现代磁盘实际上在提交数据之前确认写入完成。因此,事情可能会变得混乱。
不正常关机后是否仍需要 fsck?为什么
大多数文件系统都会维护一个挂载计数 - 一旦达到此计数,下次尝试挂载磁盘时将触发完整的 fsck。原因是磁盘数据可能会被损坏,即使没有明确写入,即使软件没有错误。 psusi上面的评论是错误的。
答案3
不需要仅仅因为不正常的关闭而对日志文件系统进行 fsck。
这全部的忍受元数据日志记录的运行时性能损失的原因是,如果文件系统没有完全卸载,则可以通过在下一次挂载时自动重播元数据日志来确保文件系统可以再次保持 100% 一致。
fsck 的唯一作用是确保元数据一致性,因此仅仅因为文件系统未正确卸载而运行 fsck 是多余的。
不过,日志文件系统可能会因其他原因而损坏 - 硬件故障、驱动程序错误、管理错误等 - 因此 fsck 工具当然是必要的。没有理由仅仅因为不正常的关闭而调用它们。