ext4文件系统能否检测到文件内容的数据损坏?如果是,默认情况下是否启用,如何检查损坏的数据?
我已经读过ext4维护文件元数据及其日志的校验和,但是我无法找到有关实际文件内容的校验和的任何信息。
为清楚起见:我想知道自上次写入操作以来文件是否已更改。
答案 0 :(得分:12)
不,ext4
无法检测到文件内容损坏。
众所周知的文件系统实现静默数据损坏检测,因此能够在有足够冗余时纠正它ZFS
和btrfs
。
他们通过为每个写入的数据块计算和存储CRC
并检查CRC
或每个读取的数据块来实现。如果CRC与数据不匹配,则后者不会提供给调用者,RAID
允许使用替代块,或者报告I/O
错误。
读取过程永远不会收到损坏的数据,无论是正确还是读取失败。
答案 1 :(得分:4)
“ext4文件系统能否检测到文件内容的数据损坏?” 不是你期待的意义。它执行日志记录,创建一个布尔{before vs after}副本以确保完成。
CRC /校验和是对来自已知状态的修改的测试,虽然CRC或校验和可能与原始状态不比较,但这并不意味着该文件然后“损坏”(也称为无效) - 它只是说它已被改变。严格来说,一种形式的“腐败”就是改变文件开头的“幻数”,比如将%PDF更改为%xYz - 这会使内容无法用于任何程序。
“...了解自上次写入操作后文件是否已更改”。 跟踪mtime()的系统将统一执行,因此每次写入都会修改mtime(),使您的请求无法进行。
mtime()不会反映最后一次写入的唯一方法就是媒体降级。