南京大学 操作系统 (JYY) 学习笔记:持久化的终极防御——RAID、崩溃一致性与日志
2026/8/5 2:51:59 网站建设 项目流程

写在前面:这是本系列的第二十四篇。

文件系统是建立在(块)存储设备上的数据结构。和内存中随用随弃的数据结构不同,持久数据的丢失可能会造成无法挽回的重大损失(比如银行存款清零)。

与此同时,现实世界中又绝对不存在百分之百可靠的物理设备。那么,我们能否在不可靠的物理硬件之上,为应用程序构建出坚如磐石的可靠持久存储?

本讲内容:我们将化身存储架构师,探讨在存储系统的各个层次提高可靠性的机制:从物理层面的 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,我们额外加一块校验盘记录x=a⊕b⊕cx = a \oplus b \oplus cx=abc
  • 如果盘bbb炸了?没关系!利用异或的自反性:b=a⊕x⊕cb = a \oplus x \oplus cb=axc,数据完美找回!
  • 在 100 块盘的阵列里,99 块盘都可以装真实数据,只浪费 1 块盘的容量!

RAID-5:Rotating Parity (旋转校验)

如果单独用一块盘专门做校验盘(RAID-4),那块盘会成为疯狂写入的性能瓶颈。
RAID-5 极其聪明地把 Parity(校验块)均匀分布(轮转)在各个磁盘上,完美实现了负载均衡。

RAID 讨论:存储界的神级发明

更快、更可靠、近乎免费的大容量磁盘。从此以后,企业级机房里再也不需要去买单体天价的“高可靠性磁盘”了。

RAID 的致命盲区与进阶 (Spicy 🌶️)

RAID 物理磁盘在异常断电时不能完美同步!
如果写入到一半突然机房停电,有的盘写进去了,有的盘没写进去,重新开机后校验位和数据就对不上了。如何解决?

分布式系统时代的降维打击:

2000 年代初期,Google 的“三驾马车”论文(GFS, MapReduce, BigTable)开启了大数据时代。

  • 它们本质上是一个跨越数据中心网络的分布式超级 RAID

Everything 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);// 在应用层看,只是轻轻地调了一次追加写

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询