关于校验磁盘的思考

btrfs 分区支持 single 模式,将不同大小的硬盘合并为一个硬盘池,还支持快照,平衡,看着很诱人。 unraid 将不同的硬盘内容合并为一个硬盘池,添加上校验盘后,支持实时校验,对数据有保护作用。

一直在思考有没有办法将 unraid 的校验盘的方式放到 btrfs 的 single 模式上,毕竟,single 模式就差了一个文件级别的校验方式了。如果带上校验的话,完全可以不用 unraid 的这种校验模式了。

我研究了 snapraid 的方式,因为 snapraid 属于文件级别的校验。 原来的想法是在 btrfs 开始写入到磁盘之前,在内存中先使用 raid5 算法,计算好相关的内容,然后 btrfs 写入文件内容,完成后,将校验结果按照虚拟磁盘布局的方式, 写入校验盘。 但对于流类的文件,或者在持续写入的文件,因为无法知道文件的完整内容,如果文件过大,造成无法先进行计算,这种方式必然没办法了。如果不先计算结果,在写入完成后再计算,这样必须每次写入完成的时候,开始计算相关内容,然后写入校验盘,这样就是按照块设备的方式,但这不就是目前的 raid5 么,据说不稳定。因为是按照块设备处理的,当读取的时候,校验盘无法确定这是哪个文件,然后读取内容后,为了看数据是否正确,需要旋转所有的硬盘设备,如果按照 snapraid 的算法,有更多的校验盘的话,就需要旋转更多的磁盘了,读写效率将大幅降低,实用性就不大了。

btrfs 的 single 模式,在某块磁盘出问题后,可以使用降级的方式挂载,然后读取数据,不管如何,算是恢复了一部分数据。只是不带校验始终是不安全。

发表评论

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据