知识卡片
Btrfs写时复制与静默数据损坏防护
内容
静默数据损坏(Silent Data Corruption)指磁盘悄悄把数据从0x55读成0x54,但读操作本身并未报错,上层软件完全察觉不到,这类问题传统ext2/3因为对磁盘完全信任而无法发现。Btrfs的解法是写入数据时同步计算并保存校验和,读取时重新计算比对,不一致就尝试从镜像副本恢复;同时采用写时复制,修改数据不覆盖原位置而是写到新block,只有当所有相关元数据(如新建文件要同时创建inode、增加目录项)全部更新成功后才把指针切换过去,这样即使断电,磁盘上要么是旧状态要么是新状态,不会出现中间的不一致状态,也就不再需要fsck。发散:写时复制换来的原子性和数据库的MVCC思路是同源的——都是”永远不原地覆盖,靠指针切换实现原子可见性”。
参考来源
《Linux开源存储全栈详解从Ceph到容器存储》第3章《Linux存储栈》