复习
本次课回答的问题
本次课主要内容
存储:只要 CPU (DMA) 能处理得过来,我就能提供足够的带宽!
任何物理存储介质都有失效的可能
那么,性能和可靠性,我们能不能全都要呢?
Redundant Array of Inexpensive (Independent) Disks (RAID)
RAID 是一个 “反向” 的虚拟化
磁盘可能在某个时刻忽然彻底无法访问
在那个遍地是黄金的年代
在系统里多接入一块硬盘用于 Fault Tolerance (RAID-1)
块读写
RAID (虚拟化) = 虚拟磁盘块到物理磁盘块的 “映射”。
两块磁盘的其他拼接方法
RAID: 允许 “多对多” 的映射 (一组映射称为 “条带”, stripe)
RAID-10 = RAID-0 over RAID-1
RAID-10:有时能容忍两块盘坏,有时候却不能。如果我们有很多块盘,能否减少浪费?
换一个问法
专门留一块磁盘作为奇偶校验盘。
性能分析
“交错排列” parity block!
让每一块盘都有均等的机会存储 parity
更快、更可靠、近乎免费的大容量磁盘
RAID 的可靠性
磁盘并没有故障
文件系统:设备上的树结构
Crash Consistency: Move the file system from one consistent state (e.g., before the file got appended to) to another atomically (e.g., after the inode, bitmap, and new data block have been written to disk).
磁盘不提供多块读写 “all or nothing” 的支持
为 FAT 文件追加写入一个 cluster (4KB) 需要更新
这麻烦了……
根据磁盘上已有的信息,恢复出 “最可能” 的数据结构
针对 crash,我们需要更可靠的方法我们需要一个更可靠的方法
两个 “视角”
二者的融合
用 bread, bwrite 和 bflush 实现 append()
现在磁盘需要写入双份的数据
从应用视角来看,文件系统的行为可能很怪异
更为一劳永逸的方案:TxOS
本次课回答的问题
Takeaway messages