使用Journalled文件系统启动时fsck的重要性?


10

我注意到XFS在系统启动时未实现fsck,在日志文件系统中吹捧的原因之一是确保不干净的关机后文件系统处于一致的状态。在下一次安装(例如,重新启动后)时,将重播日志。

不正常关机后是否仍需要fsck,为什么?

fsck 

Answers:


4

我在“新闻文件系统”的一般上下文中回答这个问题。

我认为,如果你做了一些“不洁关机”(由拉电源线或某事),你迟早会得到一个文件系统的状态,将要求fsck,或者fsck的道德等价物,xfs_repairext4我的笔记本电脑上的fileystsm在大多数情况下只会在每次重新启动(包括干净的关闭)时重播日志,但偶尔也会执行一次完整操作fsck

但是,问问自己“重播日记”能完成什么工作。重放日志仅可确保其余文件系统的磁盘块与日志条目所需的顺序匹配。重播日记等于很小的fsck或等于完整的一部分fsck

我认为这是一种语言上的技巧:重放日志确实是传统方法的一部分fsck,并且确实xfs_repair是同一种程序e2fs.fsck(或任何其他文件系统的fsck)相同的程序。刚刚相信XFS的人或他们的经验使他们没有xfs_repair在每次启动时都运行,而只是重播日志。


3
除非日志代码或磁盘驱动器中存在错误,否则任何数量的不正常关机都不会使磁盘处于需要fsck的状态。ext [34]在进行了如此多的安装后仍保留了自动的fsck,这是ext2的遗留物,结合了……“以防万一”的良好的骑行态度。至少在最新版本的Ubuntu中,默认情况下已禁用此功能。
psusi

根据我的经验,自动fsck操作不是“花哨的”。据我了解,我将ext3 LVM分区转换为,ext4并开始出现“ ext4_mb_generate_buddy”错误,这是由于代码中的错误引起的,该错误ext4导致转换后的“ LVM”分区上的位图在磁盘上和内存中的副本不匹配。据我所知fsck,没有发生腐败。解决方案是关闭该UNINIT_BG选项或移动数据并将分区重新初始化为ext4; 我选了后者。但是我仍然认为,等待数分钟fsck不值得丢失数据!
StarNamer

1
这个答案有很多遗漏的信息,因此被否决了。
symcbean 2012年

4

帮助确保在不正常关机后文件系统处于一致状态

首先要注意的是,XFS,reiser和ext的大多数配置仅实现元数据日志记录,这都是为了避免fsck。日志在启动时并不总是重播-如果日志不完整,则可能会被丢弃。

有一些系统支持完整的数据日记功能-但实际上,在实际情况下,这些系统仅提供元数据日记功能的保证水平很小。

因此,“不一致状态”以及fsck解决的问题是元数据和文件本身之间的不匹配。为避免这种情况,操作系统将提议的元数据更改写到日志中,然后将实际数据写到磁盘,然后将复制在日志中的元数据更改应用到磁盘。唯一的问题是磁盘控制器将缓冲并可能重新排序请求。为避免这种情况,大多数日志文件系统都设置了障碍:它们将每个操作分开,并等待磁盘确认其已完成该操作。但是许多现代磁盘实际上在提交数据之前就承认写入已完成。因此,事情可能变得混乱。

不正常关机后还需要fsck吗,为什么

大多数文件系统都会维护一个装载次数-一旦达到该次数,在下一次尝试装载磁盘时将触发完整的fsck。原因是即使没有显式写入磁盘数据,即使软件中没有错误,磁盘数据也可能被破坏。上面psusi的评论是错误的。


您正在将排序与障碍混为一谈。除非您启用了写缓存,否则在使用磁盘之前,磁盘不会报告写入已完成,除非在使用者级别的磁盘上默认禁用该缓存,因此使用它们时,fs只需要等待一个写完成就可以发出下一个。对于具有写缓存的硬件,使用屏障来防止重新排序并强制磁盘刷新其写缓存,从而防止fs损坏。
psusi

1
psusi-您在吸烟什么?“磁盘未报告写入已完成...” –是的。“启用写缓存,默认情况下处于禁用状态”-不在我配置的任何磁盘上。“使用障碍物来防止重新排序”-但是您说我正在“将订
货物

不,他们没有。如果您未启用磁盘写缓存(hdparm -W),则磁盘在介质上之前不会完成写请求。您为什么认为该选项存在?发出多个请求时,屏障会阻止重新排序。没有障碍,fs只会在前一个请求完成之前才发出更多请求,从而保持排序没有障碍...只要未启用磁盘写缓存。屏障的目的是允许您启用写缓存,而不会在崩溃时损坏fs。
psusi 2012年

糟糕,我在那里有点不知所措,忘了sync。让我再试一遍。无障碍写入磁盘的过程是写入日志sync,从而刷新所有写入缓存,然后写入实际数据。这样可以确保在崩溃后始终可以使用日志来恢复fs,但是同步会降低速度,有一半会破坏写入缓存的目的。因此,屏障被添加为更好的替代品sync,并且有了适当的磁盘支持,它们可以安全地收回同步带走的大部分性能。
psusi 2012年

2

无需仅仅因为关机不干净而就对日记文件系统进行fsck操作。

忍受元数据日记的运行时性能损失的全部原因是,如果未彻底卸载文件系统,则可以通过在下一次安装时自动重播元数据日志来确保再次使文件系统保持100%一致。

fsck的唯一作用是确保元数据的一致性,因此仅由于未正确卸载文件系统而运行fsck是多余的。

但是,日记文件系统可能会由于其他原因而损坏-硬件故障,驱动程序错误,管理员错误等-因此,fsck工具无疑是必需的。完全没有理由仅因关机不干净而调用它们。


每次“ n”重新启动时调用它们怎么办?有用?还是只是等待要报告的问题,然后运行fsck?
simpleuser
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.