如何测试 fsck 完成的文件系统校正

如何测试 fsck 完成的文件系统校正

如何确保 fsck 纠正损坏,同时保持文件系统的完整性?

假设客户端通过 NFS 将大量文件写入服务器,并且发生了导致损坏的情况(异常关闭/其他内核崩溃)。因此文件系统的当前状态未知(部分写入等)。然后,如果我们运行 fsck,它会纠正损坏(例如无效块),并且文件系统现在是应该保持最新状态。如何确保我的文件系统是最新的?

通常,我会使用 diff 或 dt 再次检查写入文件的源。但在这种情况下,假设写入文件后源不再存在。

答案1

Fsck 将您的文件系统返回到持续的状态。这不一定是文件系统的“最新”状态,因为该状态可能在崩溃中丢失。事实上,如果崩溃时有半写入的文件,那么文件系统就没有处于一致的状态,而这正是 fsck 旨在修复的问题。换句话说,运行 fsck 后,您的文件系统将尽可能保持最新状态。

如果您的应用程序需要有关崩溃时磁盘上存储的内容的反馈,那么您需要做的工作不仅仅是写入文件。你需要打电话sync, 或更好fsync,在写入操作之后确保特定的写入已提交到磁盘(但如果您最终频繁执行此操作,您的性能将会下降,并且您将需要切换到数据库引擎)。您需要一个配置为最大崩溃生存率(而不是最大速度)的日志文件系统。

已执行的操作(例如磁盘写入)无法撤消(即使系统崩溃)的属性称为耐用性。这是其中之一数据库的四个基本属性(ACID)。如果您需要该属性,请阅读交易

尽管文件系统是一种数据库,但它们通常设计得在 ACID 属性方面表现不佳:它们更强调灵活性。您将从专用数据库引擎中获得更好的耐用性。然后考虑万一您的磁盘(而不是系统)崩溃时会发生什么:为了获得高耐用性,您还需要复制。

答案2

-N 不执行,只显示将要执行的操作。

同样,您只需执行以下操作:shell> fsck -N /dev/sda1

相关内容