马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
先说为什么Btrfs发现不了一些错误,什么错误是Btrfs扫不出来的 Btrfs Scrub只能扫描已分配数据块、元数据块;校验checksum,因此它能发现静默位翻转;介质老化导致的数据块损坏和单一副本和镜像不一致。它无法处理元数据树损坏(checksum树自己坏了),这也是很多现代文件系统绕不过去的一道坎(元数据完整性很重要,如果checksum/extent/root树里面有损坏,就会出现根本找不到校验错误、无法遍历到某些extent、挂载时炸了、Scrub时报元数据腐坏)。 在以上情况执行Scrub时就像是:邮递员拿到了破损的地图,如果地图坏掉了,邮递员就无法知道哪个地点的存在性。 即便是逻辑正确,语义也能错误。比如固件bug或者不当关机(断电等)会导致B+树指针合法,checksum正确但是引用关系错了的情况,只查看不验证的话就“看上去是对的”。Scrub只验证块内容正确性,不验证它属不属于这里。这就像书页每一页都没有印刷错误,但是装订的时候实际部分页位置是错的,但是只看页码完全看不出问题。这个情况只能靠挂载的时候检查树或者使用btrfs check(离线)来检查,再或者使用transaction replay检查。 因此结论是:Btrfs只能发现元数据的metadata block checksum mismatch和metadata read error,不一定可以抓到树逻辑引用异常、某些还能解析但是语义错误的树状态和已经导致不可达的orphaned extent。 Btrfs功能演进快、某些新特性成熟情况差别大还有Linux内核的块层、驱动、固件相互影响大。和OpenZFS比,ZFS经受住了企业环境严苛的考验,严格划分SPA层、DMU和ZAP。但是Btrfs的B+树同时承担数据索引、extent管理、checksum、设备映射等功能,有很多错误模式、边缘意外无法被预测完。因此Btrfs复杂到爆炸很难搞,每增加一个特性维护难度指数级增长,完全不适合给家用。OpenZFS是最适合家用的文件系统,所有NAS都应该使用ZFS,而且无论是x86还是arm都支持。ZFS可以帮助家庭用户像云盘的可靠性那样使用NAS,有端到端校验、自愈和事务性提交,还有元数据和数据块的强一致性与读取时强制校验功能以及迄今为止最稳定可靠的快照设计。
|