ext4 可以检测损坏的文件内容吗?

Can ext4 detect corrupted file contents?

ext4 文件系统可以检测文件内容的数据损坏吗?如果是,它是否默认启用,我如何检查损坏的数据?

我读到 ext4 维护文件元数据及其日志的校验和,但我无法找到有关实际文件内容的校验和的任何信息。

为清楚起见:我想知道自上次写入操作以来文件是否已更改。

"Can the ext4 filesystem detect data corruption of file contents?" 不是你期望的那种感觉。它执行日志记录,创建一个布尔值 {before vs after} 副本以确保 io 完成。

CRC/校验和是对已知状态进行修改的测试,尽管 CRC 或校验和可能无法与原始文件进行比较,但这并不意味着文件 "corrupt"(又名无效)- - 它只是说它已被更改。严格来说,"corruption" 的一种形式是更改文件开头的 'magic number',例如将 %PDF 更改为 %xYz - - 这将使内容无法用于任何程序。

“...了解自上次写入操作以来文件是否已更改”。 跟踪 mtime() 的系统将统一执行此操作,因此每次写入都会修改 mtime(),从而使您的请求无法实现。

mtime() 不会反映最后写入 io 的唯一方法是介质降级。

不,ext4 不会也无法检测文件内容损坏。

众所周知的文件系统实现静默数据损坏检测,因此能够在有足够的冗余可用时纠正它是 ZFSbtrfs

他们通过为每个写入的数据块计算和存储 CRC 并检查 CRC 或每个读取的数据块来实现。如果 CRC 与数据不匹配,则后者不会提供给调用者并且 RAID 允许使用替代块,或者报告 I/O 错误。

读取过程永远不会收到损坏的数据,无论是正确的还是读取失败。