ext4能否检测到损坏的文件内容?

Luk*_*sma 13 unix ext4

ext4文件系统能否检测到文件内容的数据损坏?如果是,默认情况下是否启用,如何检查损坏的数据?

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

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

jll*_*gre 12

不,ext4不能也无法检测到文件内容损坏.

实现无记载数据损坏检测,因此能够纠正它,当足够的冗余,提供众所周知的文件系统是ZFSbtrfs.

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

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


job*_*ard 5

“ext4 文件系统能否检测到文件内容的数据损坏?” 不是你所期待的。它执行日志记录,创建一个布尔值 {before vs after} 副本以确保 io 完成。

CRC / 校验和是从已知状态修改的测试,尽管 CRC 或校验和可能无法与原始文件进行比较,但这并不意味着该文件是“损坏的”(又名无效)--它仅表示它已被改变了。严格来说,一种形式的“损坏”是更改文件开头的“幻数”,例如将 %PDF 更改为 %xYz -- 这将使任何程序都无法使用该内容。

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

mtime() 不会反映上次写入 io 的唯一方法是媒体降级。

  • @jobeard ext4 不计算也不存储数据块上的 CRC。OP 正在询问静默数据损坏,您似乎在描述自愿数据损坏(例如:%xYz)。这是一个不同的故事。媒体降级是静默数据损坏的常见原因,但不是唯一可能发生的原因。文件的数据部分可能会被意外或有意地覆盖,而不会影响文件 mtime(原始访问)或在之后重置 mtime。 (3认同)