btrfs:寻找有关坏扇区/读取错误/中等错误的btrfs错误模式的经验

在运行使用HDFS的Hadoop集群(因此数据已经被复制3次)时,我们经常遇到ext4的问题,因为一些坏扇区(文件系统无法读取或写入)导致ext4重新挂载文件系统。

到目前为止,我们正在努力更换磁盘,但是我偶然发现了btrfs,这是元数据重复,我对btrfs在这种情况下如何反应感兴趣?

数据错误对我们来说并不重要,因为数据已经由HDFS进行校验和复制,但是更强大的元数据处理(例如,如果元数据不能在一个地方被写入,使用重复的元数据)将会是有益的,因为理论上只读的重新加载和所需的fsck不应该经常发生,如果我们将切换到btrfs …

那么在这里,任何人都可以运行任何btrfs而不用突袭desktop-hdds,并且可以告诉我这个文件系统对于中等错误有多强大?

例如,单个磁盘上的元数据复制是否用于修复损坏的元数据,或文件系统是否失败?

我绝对不是专家 ,一般对文件系统有很less的经验。 所以,拿我写的掐(或less数盐):)

现在放弃免责声明:Btrfs(据我所知)不是容忍,它需要在该部门认真工作。如果我的记忆服务正确ZFS应该更好地服务于您的要求。 我自己一直在考虑btrfs,但我并不热衷于使用它。 无意中打开(我认为)提供支持,所以也许你会在那里find一些信息。

如果你在其他地方find解决scheme,请更新。

希望,我有一些帮助。

http://en.wikipedia.org/wiki/ZFS

对于ZFS,通过在整个文件系统树中使用(基于Fletcher的)校验和或(SHA-256)散列来实现数据完整性。 每个数据块都进行校验和,然后将校验和值保存在指向该块的指针中,而不是保存在实际的块本身。 接下来,块指针被校验和,其值被保存在其指针处。 这个校验和会一直延续到文件系统的数据层次结构,也就是校验和的根节点,从而创build一个Merkle树[17]。 数据损坏或幻像读/写(数据写/读校验和正确,但实际上是错误的)大多数文件系统无法检测,因为它们将校验和与数据一起存储。 ZFS将每个块的校验和存储在其父块指针中,以便整个池自我validation。

当一个块被访问时,无论它是数据还是元数据,它的校验和都会被计算出来,并与存储的“应该”的校验和值进行比较。 如果校验和匹配,则数据通过编程堆栈传递给请求的进程。 如果值不匹配,那么如果存储池通过ZFS镜像或RAID具有冗余,那么ZFS可以恢复数据[19]。 如果存储池由单个磁盘组成,则可以通过指定“copies = 2”(或“copies = 3”)来提供这种冗余,这意味着数据将被存储两次(三次)在磁盘上,实际上减半(或者,对于“份数= 3”,减less到三分之一)磁盘的存储容量。 如果存在冗余,ZFS将获取数据的副本(或通过RAID恢复机制重新创build数据),并重新计算校验和 – 理想情况下会导致原始期望值的重现。 如果数据通过了这个完整性检查,则系统可以用已知好的数据更新有故障的副本,从而可以恢复冗余。