南京大学 操作系统 (JYY) 学习笔记:持久化的终极防御——RAID、崩溃一致性与日志

📅 2026/8/5 2:52:05
南京大学 操作系统 (JYY) 学习笔记:持久化的终极防御——RAID、崩溃一致性与日志
写在前面这是本系列的第二十四篇。文件系统是建立在块存储设备上的数据结构。和内存中随用随弃的数据结构不同持久数据的丢失可能会造成无法挽回的重大损失比如银行存款清零。与此同时现实世界中又绝对不存在百分之百可靠的物理设备。那么我们能否在不可靠的物理硬件之上为应用程序构建出坚如磐石的可靠持久存储本讲内容我们将化身存储架构师探讨在存储系统的各个层次提高可靠性的机制从物理层面的 RAID 阵列到系统层面的 fsck再到现代文件系统保命的核心黑科技——崩溃一致性与 Journaling日志机制。实现可靠的磁盘与数据存储持久数据的“持久”如果我们的数据“就地消失”会发生什么即刻挂科/退学如果你的毕业论文在 D 盘瞬间蒸发存款/贷款清零要是真能把贷款清零倒也不失为一件美事世界上没有一个绝对可靠的物理设备临时失效:比如 Kernel panic (内核 Bug) 导致死机机房突然断电。部分失效:硬件 ECC 纠错失败硬盘出现坏道导致 Fail-slow极度缓慢但没完全死。永久失效:小概率事件硬盘物理损坏但在拥有几百万块硬盘的数据中心里小概率 每天必然发生。极小概率事件战争爆发 / 三体人进攻地球 / 世界毁灭。RAID存储设备的虚拟化性能和可靠性我们能不能全都要呢RAID (Redundant Array of Inexpensive/Independent Disks):廉价/独立磁盘冗余阵列。核心思想:把多个不可靠、便宜的物理磁盘虚拟成一块极其可靠且性能极高的虚拟超级磁盘这是 1988 年图灵奖得主 David Patterson 等人在 SIGMOD 发表的划时代论文。这是一个“反向”的虚拟化进程 / 虚存 / 文件把“一个物理设备”虚拟成多份给应用。RAID把“多个物理设备”融合成一个虚拟设备计算机系统的黄金时代在 1980 年代IBM 卖的是极其昂贵的单体大硬盘 “Single Large Expensive Disks” (IBM 3380)。而黑客们想的是能不能凑几块便宜的“废铜烂铁”干一番新事业这就是 RAID 的起点。当一个领域极其成熟、收益递减天坑化时就要有勇气去“无人区”占领新的地盘。RAID 的设计空间 (Design Space)RAID 虚拟化本质 建立从“虚拟块号”到“(物理磁盘, 块号)”的映射表。因为物理磁盘的读写是完全并行的所以多块盘既能提升速度也能提供容错。RAID-0 (Striping / 条带化): 更大的容量、更快的速度数据交错排列在不同盘上。读写速度直接×N\times N×N。缺点没有任何容错能力一块盘坏了全完蛋。RAID-1 (Mirroring / 镜像): 容错保命保持两块盘的数据完全一模一样。缺点浪费了一半的容量写速度依然是 1 倍虽然读速度可以并行×2\times 2×2。容错的终极魔法RAID-5 (奇偶校验)RAID-1 太浪费了如果我们有 100 块盘难道为了容错要浪费 50 块盘吗在实际运维中两块盘在同一瞬间同时 Fail-stop彻底暴毙的概率极低。能不能只用 1 块盘的冗余来保护其余 99 块盘的数据答案是异或运算 (⊕\oplus⊕)假设我们有数据盘a,b,ca, b, ca,b,c我们额外加一块校验盘记录xa⊕b⊕cx a \oplus b \oplus cxa⊕b⊕c。如果盘bbb炸了没关系利用异或的自反性ba⊕x⊕cb a \oplus x \oplus cba⊕x⊕c数据完美找回在 100 块盘的阵列里99 块盘都可以装真实数据只浪费 1 块盘的容量RAID-5Rotating Parity (旋转校验)如果单独用一块盘专门做校验盘RAID-4那块盘会成为疯狂写入的性能瓶颈。RAID-5 极其聪明地把 Parity校验块均匀分布轮转在各个磁盘上完美实现了负载均衡。RAID 讨论存储界的神级发明更快、更可靠、近乎免费的大容量磁盘。从此以后企业级机房里再也不需要去买单体天价的“高可靠性磁盘”了。RAID 的致命盲区与进阶 (Spicy ️)RAID 物理磁盘在异常断电时不能完美同步如果写入到一半突然机房停电有的盘写进去了有的盘没写进去重新开机后校验位和数据就对不上了。如何解决分布式系统时代的降维打击2000 年代初期Google 的“三驾马车”论文GFS, MapReduce, BigTable开启了大数据时代。它们本质上是一个跨越数据中心网络的分布式超级 RAIDEverything is Virtual万物皆虚拟化例如阿里云的 Elastic Block Storage (EBS, FAST’24 论文)。算上 3X 的跨机架副本备份通过各种极致的压缩和纠删码算法物理放大倍数甚至能做到 1。现在明白为什么云厂商能躺着挣钱了吧挑战Fail-slow 僵尸磁盘磁盘看起来在转读写命令也没报错但实际上由于固件 Bug、坏道重试它的速度降到了几 KB/s。这种在庞大集群中如同瘟疫一般蔓延的性能问题比直接死机更难排查。崩溃一致性 (Crash Consistency)文件系统面对的最大死敌突然拔掉电源。Crash: 内存里的一切瞬间丢失。崩溃一致性 (Crash Consistency):能够将文件系统从一个一致的状态例如追加数据前原子地移动到另一个一致的状态例如 inode、bitmap 和新数据块全部安全落盘后。暗藏杀机的简单系统调用复杂数据结构的更新一定涉及Multiple Writes多次离散写入。write(fd,buf,4096);// 在应用层看只是轻轻地调了一次追加写