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