2015-07-10 28 views
10

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

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

为了清楚起见:我想知道自上次写入操作以来文件是否发生了变化。 “

回答

3

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

CRC /校验和是对已知状态进行修改的测试,虽然CRC或校验和可能不会与原始文件进行比较,但并不意味着该文件会“损坏”(又称无效)说它已经改变了。严格地说,一种形式的“腐败”将会是在文件开始时改变“幻数”,例如将%PDF改为%xYz - ,这会使内容对任何程序都无法使用。

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

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

+1

谢谢。为了确保我能理解你:假设我写了一个文件,然后关闭了我的电脑,出于某种原因文件内容发生了变化(因为媒体降级,环境影响等)。再次启动后,无法检测到更改? –

+3

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

+0

我并没有说ext4做了crc,而是指出crc是检测变化的一种手段,但是变化与“腐败”不一样。还指出“腐败”有不同的口味和变化这个幻数会成为使文件“无效”的腐败的一个例子。至于“故意重写”,这完全在IMO的问题之外,尽管这是真的。 – jobeard

10

不,ext4不能检测到文件内容损坏。

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

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

读取过程将永远不会收到损坏的数据,它是正确的或读取失败。

+0

Raid-2做到了这一点,但现在已经过时,ZFS在Sunmicro Solaris中实现,BTRFS在Linux中是一种选择(请参阅https://en.wikipedia.org/wiki/Btrfs) – jobeard

+0

@jobeard Solaris ZFS由Oracle开发现在。还有一个ZFS分支,用于构建OpenSolaris(Illumos)派生产品,FreeBSD,Linux和OS X的ZFS实现。 – jlliagre

+0

元数据CRC检查是现在唯一实现的。 –