4. 块设备与文件系统
本章目标
- 分清 RAID、LVM、文件系统三层的层次关系与各自职责
- 理解 RAID 各级别的容量/可靠性/写惩罚换算,以及"重建窗口"风险
- 建立"块设备"心智 —— 这是第二篇 RBD 的直接前置
4.1 从一盘 raw 到可用的存储
一块新盘到应用可用,通常经过这几层(自下而上):
text
/dev/nvme0n1、/dev/sdb ... 物理/网络块设备
│
▼ 分区(可选)parted/fdisk/sgdisk
/dev/nvme0n1p1
│
▼ RAID(mdadm)或直通
/dev/md0 冗余/条带化
│
▼ LVM(PV → VG → LV)
/dev/vg0/data 弹性:扩容/快照/瘦置备
│
▼ 文件系统 mkfs + mount
/mnt/data 语义:文件/目录/权限每层只做自己擅长的事:RAID 管冗余,LVM 管弹性,文件系统管语义。第二篇你会看到 Ceph 把这三件事全部揽下(副本/EC 管冗余、pool 管弹性、RBD/CephFS/RGW 管接口)—— 但理解分层职责是理解一切组合方案的前提。
4.2 RAID 不是备份
| 级别 | 容量利用率 | 容错 | 写惩罚 | 适用 |
|---|---|---|---|---|
| RAID 0 | 100% | 0 | 1× | 临时数据、追求极致性能 |
| RAID 1 | 50% | 1 盘 | 2× | 系统盘、小容量高可靠 |
| RAID 5 | (N-1)/N | 1 盘 | 4×(读改写) | 读多写少 |
| RAID 6 | (N-2)/N | 2 盘 | 6× | 大容量 HDD |
| RAID 10 | 50% | 每组 1 盘 | 2× | 写密集 |
三个必须刻进脑子的认知:
- 写惩罚:RAID5 的一次 4K 随机写实际产生"读数据+读校验+写数据+写校验"4 次 IO —— 这就是 第 1 章 块层观测到的 IOPS 会是应用层 4 倍的原因
- 重建窗口:一块盘故障后到重建完成前,阵列处于降级状态;大容量 HDD 重建以天计,期间第二块盘故障 = 全毁。盘龄相近的批次故障是相关的,不是独立的 —— 这是 EC/多副本把校验/副本散步到更多故障域的原因
- RAID ≠ 备份:RAID 防单盘故障,防不了误删、 ransomware、机房级灾难
Ceph 对照:3 副本 ≈ 每对象 RAID1×3;EC 4+2 ≈ RAID6 思路但数据散步在 hosts 级故障域而非单机内 —— 重建时全集群盘并行参与(恢复吞吐远高于单机 RAID)。
4.3 LVM:快照与弹性的启蒙
bash
pvcreate /dev/md0 # 物理卷:LVM 接管块设备
vgcreate vg0 /dev/md0 # 卷组:池化空间
lvcreate -L 100G -n data vg0 # 逻辑卷:从池里切空间
lvcreate -s -L 10G -n snap /dev/vg0/data # 快照(写时复制)
lvextend -r -L +50G /dev/vg0/data # 在线扩容(-r 同步扩文件系统)快照原理(COW,写时复制):快照不复制数据,只记录"改了哪些块"。原卷写入某块前,旧块先搬到快照区。于是:
- 快照创建是 O(1) 的,瞬间完成
- 快照读 = "未改动的块直接读原卷 + 已改动的块读快照区"
- 原卷改动越快,快照区越早写满(写满即失效)
这套 COW 机制与 Ceph 的 RBD 快照、K8s VolumeSnapshot、GPFS 快照概念同源,一次学透处处复用。
4.4 XFS vs ext4
| 维度 | ext4 | XFS |
|---|---|---|
| 日志 | 元数据日志 | 元数据日志(可选 CRC 校验) |
| 大文件并发写 | 一般 | 强(extent + 分配组并行) |
| 缩容 | 不支持 | 不支持 |
| 海量小文件 | 均衡 | inode 分配策略好,GB 级数据卷常用 |
| 修复速度 | 大卷较慢 | 并行修复快 |
经验法则:大卷(TB 级)、高并发、grow-only → XFS;桌面/小卷/兼容性优先 → ext4。Ceph 的历史也印证了这个演进:Jewel 之前 OSD 数据目录用 XFS,之后 BlueStore 直接裸管块设备、绕过文件系统 —— 因为 POSIX 语义对 OSD 是多余开销(日志双写、元数据冗余)。
4.5 网络块设备:块设备越出单机
bash
# iSCSI: target 端共享块设备,initiator 端像本地盘一样用
targetcli /backstores/block create data /dev/vg0/lv0
iscsiadm -m discovery -t st -p <target-ip>
iscsiadm -m node --login
# 之后本地多出一块 /dev/sdX,可 mkfs、可 lvm、可直通给虚拟机NVMe-oF 同理,走 RDMA/TCP,延迟更低。关键认知:块设备只是"可寻址的块流",本地还是网络对上层透明。RBD 的本质就是"网络块设备 + 多副本 + 自愈 + 精简置备" —— 第二篇拆开看,没有新魔法。
本章小结
- 分层职责:RAID 管冗余、LVM 管弹性、文件系统管语义;Ceph 是三合一的分布式版本
- RAID 写惩罚与重建窗口解释了分布式 EC/副本的存在理由
- COW 快照机制一次学透(LVM/RBD/K8s Snapshot 同源)
- 网络块设备是 RBD 的直接前置心智
自测
QuizRAID5 上运行 4K 随机写负载,应用层测得 1000 IOPS。块层观测到的 IOPS 大约是多少?
多选关于 LVM COW 快照,下列说法正确的是?(多选)
Lab · 搭建一个多层存储栈进阶
1. 用 4 块盘建 mdadm RAID10(`mdadm -C /dev/md0 -l 10 -n 4 /dev/sd{b..e}`),观察 `cat /proc/mdstat` 的条带布局。 2. RAID10 之上建 LVM(PV/VG),再建 XFS 文件系统并挂载。 3. `lvcreate -s` 建快照 → 在原卷写入 2GB 新数据 → 观察快照区占用变化 → 从快照挂载读回旧数据。 4. 拔掉一块虚拟盘(或 `mdadm /dev/md0 -f /dev/sdb`),观察降级状态;补盘后观察重建速度。 5. **验收标准**:能画出自己环境的层次图并说出每层提供的保障;能用 `iostat -x` 在重建时观察到各盘的读放大。