Skip to content

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 0100%0临时数据、追求极致性能
RAID 150%1 盘系统盘、小容量高可靠
RAID 5(N-1)/N1 盘4×(读改写)读多写少
RAID 6(N-2)/N2 盘大容量 HDD
RAID 1050%每组 1 盘写密集

三个必须刻进脑子的认知:

  1. 写惩罚:RAID5 的一次 4K 随机写实际产生"读数据+读校验+写数据+写校验"4 次 IO —— 这就是 第 1 章 块层观测到的 IOPS 会是应用层 4 倍的原因
  2. 重建窗口:一块盘故障后到重建完成前,阵列处于降级状态;大容量 HDD 重建以天计,期间第二块盘故障 = 全毁。盘龄相近的批次故障是相关的,不是独立的 —— 这是 EC/多副本把校验/副本散步到更多故障域的原因
  3. 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

维度ext4XFS
日志元数据日志元数据日志(可选 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 · 搭建一个多层存储栈进阶
⏱ 45 分钟🖥 一台 Linux 虚拟机 + 4 块额外虚拟盘
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` 在重建时观察到各盘的读放大。

上一章 · 下一章:5. 网络基础与 IO 路径 →