Featured image of post Linux 磁盘与 LVM 深度实践:分区、PV/VG/LV、扩容缩容与 LVM Cache

Linux 磁盘与 LVM 深度实践:分区、PV/VG/LV、扩容缩容与 LVM Cache

2014 时代 Linux 服务器磁盘管理全攻略——fdisk 分区、fio 性能压测、mdadm RAID、LVM 创建/扩容/缩容/PE 转移、LVM Cache 加速、Ubuntu 重装 VG 重名处理

一、为什么是 2014 年这一份

2014 年这个时间点很有意思:

  • LVM 早已是 Linux 标配(2.6 内核时代),企业级应用普及
  • SSD 正在替换 HDD,但 NVMe 还在路上(NVMe 1.0 是 2011 年,主流消费级 NVMe SSD 在 2014-2015 才铺开)
  • fio 2.x 是性能压测的事实标准(fio 3.x 在 2017 才发布)
  • 软件 RAID 工具 mdadm 仍是单节点多盘管理的首选(硬件 RAID 控制器在企业级也仍有市场)

这一篇覆盖磁盘选型、IOPS 估算、fio 压测、LVM 全套操作、LVM Cache、mdadm RAID、Ubuntu 重装 VG 重名——一份"在生产环境用过"的工具书。

阅读建议:建议先通读目录定位场景,再回头看对应小节。LVM 部分是重点,几乎所有云厂商的 Linux 镜像底层都是 LVM。

二、磁盘速度与 IOPS 参考

2.1 接口速率参考

类型速率峰值备注
SATA 接口 SSD560 MB/s主流消费级 SATA SSD
M.2 SATA 总线 SSD560 MB/s形态不同但走 SATA 总线
M.2 NVMe 协议 SSD3 GB/s 左右2014 起步,2015-2016 主流化
5400 RPM 机械硬盘100 MB/s笔记本常见
7200 RPM 机械硬盘90-190 MB/s台式机/服务器常见

关于 NVMe 时间线:NVMe 1.0 标准 2011 年发布,2014-2015 年消费级 M.2 NVMe SSD 才逐步铺开。2014 年能见到 NVMe 已经很快了,但 3 GB/s 的速率对应的是 PCIe 3.0 x4 通道的 SSD。

查看磁盘转速:

1
hdparm -I /dev/sdb | grep Rotation

2.2 IOPS 估算

IOPS(Input/Output Operations Per Second)的简化公式:

1
IOPS = 1000 / (寻道时间 + 旋转延迟)

公式中忽略数据传输时间。机械硬盘的寻道时间通常 3-10 ms,旋转延迟 4-8 ms(按 7200 RPM 算半圈 4.17 ms),所以机械硬盘 IOPS 通常在 75-200 之间。SSD 因为没有寻道和旋转,IOPS 动辄上万。

常见设备的 IOPS 参考表(2014 数据):

设备类型IOPS接口备注
7,200 RPM SATA HDD机械~75-100SATA 3 Gbit/s入门级服务器
10,000 RPM SATA HDD机械~125-150SATA 3 Gbit/s中端服务器
10,000 RPM SAS HDD机械~140SAS企业级
15,000 RPM SAS HDD机械~175-210SAS高端企业级(如金融交易)
Intel X25-M G2 (MLC)SSD~8,600SATA 3 Gbit/s2010 年代初消费级 SSD
Intel X25-E (SLC)SSD~5,000SATA 3 Gbit/s企业级 SLC SSD
OCZ Vertex 3SSD~60,000SATA 6 Gbit/s2011 年代旗舰消费级
Corsair Force GTSSD~85,000SATA 6 Gbit/s240GB 型号,4K 随机写

关于 IOPS 时间点:表中数据是 2010-2012 时代的硬件水平。2014 年消费级 SSD 的 4K 随机写已经普遍 30K-80K IOPS,到 2018 年 NVMe SSD 已经百万级。

三、fio 性能压测:生产环境最常用的工具

fio(Flexible I/O Tester)是 Linux 性能压测的事实标准,2010 由 Jens Axboe 发布,2014 已是 2.x 时代。

3.1 参数速查

参数含义
filename=/dev/sdb1测试目标盘/文件路径
direct=1绕过 OS buffer(DirectIO),测试结果更真实
rw=randwrite随机写;randread 随机读;randrw 随机混合;read/write/rw 顺序
bs=4k单次 I/O 块大小
bsrange=512-2048数据块大小范围(多对一,模拟混合场景)
size=5G每个线程读写的数据量
numjobs=1每个任务开的线程数
name=job1任务名,重复无所谓;-name=job1 -name=job2 共享前面参数
threadpthread_create 创建线程(vs fork
runtime=1000测试时长(秒),不写则跑完 5G 才停
ioengine=libaio异步 I/O 引擎(Linux 本地异步 I/O)
iodepth=16队列深度 16
rwmixwrite=30混合读写时写占 30%
group_reporting汇总每个进程的信息

3.2 常用测试点(6 类场景)

场景组合
100% 随机读rw=randread
100% 顺序读rw=read
100% 顺序写rw=write
100% 随机写rw=randwrite
70% 顺序读 + 30% 顺序写rw=rw, rwmixread=70, rwmixwrite=30
70% 随机读 + 30% 随机写rw=randrw, rwmixread=70, rwmixwrite=30

3.3 完整命令模板

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 安装
apt install -y fio   # Debian/Ubuntu
yum install -y fio   # CentOS/RHEL

# 60 秒快速读测试
cd /tmp
fio -ioengine=libaio -bs=4k -direct=1 -thread -rw=read \
    -filename=/dev/sda \
    -name="BS 4KB read test" \
    -iodepth=16 -runtime=60

# 本地盘随机写 IOPS
fio -direct=1 -iodepth=32 -rw=randwrite -ioengine=libaio -bs=4k \
    -numjobs=4 -time_based=1 -runtime=1000 -group_reporting \
    -filename=/dev/sda -name=test

# 本地盘随机读 IOPS
fio -direct=1 -iodepth=32 -rw=randread -ioengine=libaio -bs=4k \
    -numjobs=4 -time_based=1 -runtime=1000 -group_reporting \
    -filename=/dev/sda -name=test

# 本地盘顺序写吞吐量
fio -direct=1 -iodepth=128 -rw=write -ioengine=libaio -bs=128k \
    -numjobs=1 -time_based=1 -runtime=1000 -group_reporting \
    -filename=/dev/sda -name=test

# 本地盘顺序读吞吐量
fio -direct=1 -iodepth=128 -rw=read -ioengine=libaio -bs=128k \
    -numjobs=1 -time_based=1 -runtime=1000 -group_reporting \
    -filename=/dev/sda -name=test

# 随机混合读写(写 30%)
fio -name=iops -rw=randrw -rwmixwrite=30 -bs=4k -runtime=10 \
    -iodepth=1 -filename=/dev/sda -ioengine=libaio -direct=1

3.4 结果解读

1
read: IOPS=1091, BW=4366KiB/s (4471kB/s)(260MiB/60882msec)

关键指标:

字段含义
io总共执行了多少 M 的 I/O
bw平均 I/O 带宽
iopsIOPS
runt线程运行时间
slat提交延迟(submission latency)
clat完成延迟(completion latency)
lat响应时间 = slat + clat
cpu利用率
IO depths队列深度分布
IO submit / complete / issued提交/完成/发出的 I/O 数量
ios / merge / ticks / utiliostat 风格的汇总(最终 Disk stats 段)

关于队列深度:磁盘属于"慢速设备",OS 会为每块盘分配一个队列用于缓冲 I/O 请求。加大队列深度 = 让硬盘持续工作、减少空闲时间。但队列深度太高会导致 clat 飙升(响应时间不可接受)。iodepth=16 是消费级 SSD 的常见甜点值。

四、LVM 完整实战

LVM(Logical Volume Manager)从 2.6 内核起就是 Linux 标配。它的核心思想是把"物理卷 → 卷组 → 逻辑卷"三层结构解耦,让扩容/缩容/跨盘迁移变成相对无痛的操作。

4.1 三个核心原则

原则一:逻辑卷不能分太多,卷组要留有余量——VG 相当于是个存储池,留 20-30% 空闲便于后续扩容。

原则二:扩容顺序是 PV → VG → LV → FS;缩容顺序相反,而且必须先卸载

原则三:生产环境做 LVM 操作前必有备份resize2fs 缩容时一旦写错大小,数据就没了。

4.2 创建场景:1 块 SSD + 1 块 HDD

假设要添加两块硬盘:

  • nvme0n2 —— 1 块 SSD(20G),准备做 nfs
  • sda —— 1 块机械盘(1T),准备做 data

完整步骤:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# 1. 查名称
fdisk -l

# 2. 分区
fdisk /dev/nvme0n2
# 命令序列:n, p, 回车, 回车, 回车, w, 回车
partprobe /dev/nvme0n2
mkfs.ext4 /dev/nvme0n2p1

# 3. 创建 PV(其实前面分区 + 格式化对 PV 来说可以省略)
pvcreate /dev/nvme0n2p1

# 4. 创建 VG
vgcreate vgssd /dev/nvme0n2p1

# 5. 创建 LV——满不了 20G
# 5119 PE × 4M PE = 20G;这里先用 10G,留扩容空间
lvcreate -L +10G -n lvssd vgssd

# 6. 格式化 LV
mkfs.ext4 /dev/vgssd/lvssd

# 7. 创建挂载目录
mkdir /nfs

# 8. 挂载 LV
mount /dev/vgssd/lvssd /nfs

# 9. 查看
df -h
# /dev/mapper/vgssd-lvssd   20G   24K   19G   1% /nfs

lsblk
# nvme0n2         259:3    0    20G  0 disk
# └─nvme0n2p1     259:5    0    20G  0 part
#   └─vgssd-lvssd 253:0    0    20G  0 lvm  /nfs

# 10. 永久挂载
echo '/dev/vgssd/lvssd  /nfs  ext4  defaults 0 0' | tee -a /etc/fstab
mount -a

# 11. 测一下速度
hdparm -tT --direct /dev/mapper/vgssd-lvssd
# Timing O_DIRECT cached reads:   5662 MB in  2.00 seconds = 2831.16 MB/sec
# Timing O_DIRECT disk reads: 20476 MB in  1.93 seconds = 10621.64 MB/sec

4.3 扩容:原盘扩容 + 新增盘加入 VG

4.3.1 原盘扩容(虚拟机里把磁盘从 20G 扩到 40G)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
lsblk
# nvme0n2         259:3    0    40G  0 disk
# └─nvme0n2p1     259:4    0    20G  0 part
#   └─vgssd-lvssd 253:0    0    20G  0 lvm  /nfs

# 显示 40G,但 LV 只用了 20G
pvs -a -o +devices
#  PV             VG    Fmt  Attr PSize   PFree Devices
#  /dev/nvme0n1              ---       0     0
#  /dev/nvme0n1p2            ---       0     0
#  /dev/nvme0n2              ---       0     0
#  /dev/nvme0n2p1 vgssd lvm2 a--  <40.00g <30.00g /dev/nvme0n2p1(0)

# 关键:先删分区再重建(fdisk 操作)
fdisk /dev/nvme0n2
# 命令序列:d(删), n(建), p(主分区), ... w(保存)

# PV 重置以识别新大小
pvresize /dev/nvme0n2p1

4.3.2 新增盘加入 VG

1
2
3
4
5
6
7
8
lsblk
# nvme0n2         259:3    0    40G  0 disk
# └─nvme0n2p1     259:4    0    40G  0 part
#   └─vgssd-lvssd 253:0    0    40G  0 lvm  /nfs
# nvme0n3         259:5    0    20G  0 disk    ← 新增

pvcreate /dev/nvme0n3
vgextend vgssd /dev/nvme0n3

4.3.3 LV 扩容

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 扩容 LV(增加 5G)
lvextend -L +5G /dev/vgssd/lvssd

# 刷新 LV(ext4 用 resize2fs,xfs 用 xfs_growfs)
resize2fs /dev/vgssd/lvssd

# 一条命令搞定(-r 自动调用 resize2fs)
lvextend -L +5G -r /dev/vgssd/lvssd

# 所有空闲全分配(不推荐,没扩容空间了)
lvextend -l +100%FREE -r /dev/vgssd/lvssd

4.4 缩容:从 15G 缩到 10G

警告:缩容有数据丢失风险,必须先备份!缩容顺序与扩容相反,且必须先卸载

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 1. 先卸载
umount /dev/vgssd/lvssd

# 2. 检查文件
e2fsck -f /dev/vgssd/lvssd
# e2fsck 1.46.5 (30-Dec-2021)
# Pass 1: Checking inodes, blocks, and sizes
# Pass 2: Checking directory structure
# Pass 3: Checking directory connectivity
# Pass 4: Checking reference counts
# Pass 5: Checking group summary information
# /dev/vgssd/lvssd: 308/983040 files (0.0% non-contiguous), 90144/3932160 blocks

# 3. 更新文件系统大小
resize2fs /dev/vgssd/lvssd 10G
# resize2fs 1.46.5 (30-Dec-2021)
# Resizing the filesystem on /dev/vgssd/lvssd to 2621440 (4k) blocks.

# 4. 重置 LV 大小
lvresize -L 10G /dev/vgssd/lvssd
#   WARNING: Reducing active logical volume to 10.00 GiB.
#   THIS MAY DESTROY YOUR DATA (filesystem etc.)
# Do you really want to reduce vgssd/lvssd? [y/n]: y

# 5. 重新挂载
mount /dev/vgssd/lvssd /nfs

# 6. 验证
df -h
# /dev/mapper/vgssd-lvssd  9.8G  7.1M  9.3G   1% /nfs

4.5 移除 PV:把数据从一个盘迁到另一个盘

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 先查看 PV
pvdisplay
#  --- Physical volume ---
#  PV Name               /dev/nvme0n2p1
#  VG Name               vgssd
#  PV Size               <40.00 GiB / not usable 2.00 MiB
#  PE Size               4.00 MiB
#  Total PE              10239
#  Free PE               7679
#  Allocated PE          2560

# /dev/nvme0n2p1 分配了 2560 个 PE,要把 PE 转移到 /dev/nvme0n3
pvmove /dev/nvme0n2p1 /dev/nvme0n3
#  /dev/nvme0n2p1: Moved: 2.38%
#  /dev/nvme0n2p1: Moved: 100.00%

# 从 VG 移除 PV
vgreduce vgssd /dev/nvme0n2p1
#  Removed "/dev/nvme0n2p1" from volume group "vgssd"

# 删除 PV
pvremove /dev/nvme0n2p1
#  Labels on physical volume "/dev/nvme0n2p1" successfully wiped.

4.6 删除整套 LVM

1
2
3
4
5
6
# 顺序:LV → VG → PV
umount /dev/vgssd/lvssd
lvremove /dev/vgssd/lvssd
vgremove /dev/vgssd
pvremove /dev/nvme0n2p1
pvremove /dev/nvme0n3

五、LVM Cache:用 SSD 给 HDD 加速

LVM Cache 是 LVM 内置的缓存功能,允许将高速缓存设备(如 SSD)与普通硬盘组合使用,以提高 I/O 性能。常见替代方案有 DM-cache、bcache、flashCache、EnhanceIO。

5.1 三个组件

  • data —— 存储数据
  • cache —— 缓存数据
  • meta —— 缓存元数据(size 需大于 cache 的 1/1000)

5.2 完整创建流程

假设有一块机械盘 sda + 一块 SSD nvme0n1

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 1. 把两块盘加入同一个 VG
pvcreate /dev/sda /dev/nvme0n1p1
vgcreate vg /dev/sda /dev/nvme0n1p1

# 2. 机械盘上创建 data LV
lvcreate -n data -L 200G vg /dev/sda

# 3. SSD 上创建 cache + meta LV
lvcreate -n cache -L 30G vg /dev/nvme0n1p1
lvcreate -n meta -L 6G vg /dev/nvme0n1p1

# 4. 创建缓存池,把 data 卷加入
#    cachemode 默认 writethrough;writeback 性能好但极端情况会丢数据
lvconvert --type cache-pool --poolmetadata vg/meta vg/cache
lvconvert --type cache --cachepool vg/cache --cachemode writeback vg/data

# 5. 格式化 + 挂载
mkfs.ext4 /dev/vg/data
mkdir /data
mount /dev/vg/data /data
echo '/dev/vg/data  /data ext4  defaults 0 0' | tee -a /etc/fstab
mount -a

cachemode 选择writeback(默认推荐的"性能模式")写入缓存就 ack,掉电可能丢数据;writethrough(默认)数据同时写缓存和后端,安全性高但性能略低。生产环境视业务重要程度选。

六、mdadm 软件 RAID

mdadm 是 Linux 软件 RAID 的管理工具,2014 已是 3.x 时代。

6.1 五种常用 RAID 等级

等级至少几块盘特性适用场景
RAID 02条带,无冗余,速度翻倍临时数据、缓存
RAID 12镜像,可容忍 1 块盘坏系统盘、关键数据
RAID 53一个校验盘,可容忍 1 块盘坏容量与冗余平衡
RAID 64两个校验盘,可容忍 2 块盘坏大容量存储
RAID 104RAID 1 + RAID 0,先镜像再条带数据库首选

企业数据库场景:几乎都选 RAID 10——4 块起步、性能翻倍、容错等于 RAID 1。

6.2 创建 RAID 10 完整流程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 1. 4 块盘分区(每块都要分一个主分区 + 标为 Linux RAID 类型)
fdisk /dev/sdb   # n, p, 1, 回车×2, t, fd, p, w
fdisk /dev/sdc   # 同上
fdisk /dev/sdd   # 同上
fdisk /dev/sde   # 同上

# 2. 检查是否有遗留 RAID 信息
mdadm -E /dev/sd[b-e]
mdadm -E /dev/sd[b-e]1

# 3. 创建 RAID 10
mdadm --create /dev/md0 --level=10 --raid-devices=4 \
      /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

# 4. 查看同步进度
cat /proc/mdstat

# 5. 查看详细信息
mdadm --detail /dev/md0

# 6. 创建文件系统 + 挂载
mkfs.ext4 /dev/md0
mkdir /md
mount /dev/md0 /md
echo '/dev/md0  /md ext4  defaults 0 0' | tee -a /etc/fstab
mount -av

# 7. 保存 RAID 配置(默认没有)
mdadm --detail --scan --verbose >> /etc/mdadm.conf
# 或者
mdadm -Dsv > /etc/mdadm.conf

6.3 添加备用盘(spare)

1
2
3
mdadm --create /dev/md0 --level=10 --raid-devices=4 \
      /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 \
      --spare-devices=1 /dev/sdf1

6.4 扩容(加一块盘)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 分区
fdisk /dev/sdf
# n, 1, t, fd, p, w

# 检查(没有 super-blocks 才能直接 add)
mdadm -E /dev/sdf1

# 添加 + 扩展
mdadm --manage /dev/md0 --add /dev/sdf1
mdadm --grow --raid-devices=5 /dev/md0
mdadm --detail /dev/md0

注意:大容量磁盘扩展同步可能耗时数小时。

6.5 替换坏盘

1
2
3
# 标记失效 + 移除
mdadm --fail /dev/md0 /dev/sdc1
mdadm --remove /dev/md0 /dev/sdc1

6.6 删除 RAID

1
2
3
4
5
umount /raid0
mdadm -Ss                                          # 停止 RAID 设备
rm -rf /etc/mdadm.conf                            # 删除配置
mdadm --zero-superblock /dev/sdb                  # 擦除 RAID 标识
mdadm --zero-superblock /dev/sdc

七、Ubuntu 重装系统后的 LVM VG 重名问题

场景:旧系统盘和新系统盘都用了默认 VG 名 ubuntu-vg,重装后 vgscan 会报重名错误。

7.1 查 VG 冲突

1
2
3
4
5
6
7
vgscan
# WARNING: VG name ubuntu-vg is used by VGs RGmXzb-... and oFmdxd-...
#   Fix duplicate VG names with vgrename uuid, a device filter, or system IDs.
#   Found volume group "ubuntu-vg" using metadata type lvm2

vgdisplay
# 两个 ubuntu-vg 都有,但 UUID 不同

7.2 通过容量/UUID 区分

1
2
3
4
5
6
7
lsblk
# sda                         8:0    0  1000G  0 disk
# ├─sda1                      8:1    0     1G  0 part /boot/efi
# ├─sda2                      8:2    0     2G  0 part /boot
# └─sda3                      8:3    0  996.9G  0 part
#   └─ubuntu--vg-ubuntu--lv 253:0    0   100G  0 lvm  /          ← 新系统
# sdb                         8:16   0  1000G  0 disk            ← 旧系统盘

通过容量或挂载点判断哪个是旧盘。

7.3 重命名 VG

1
2
vgrename <旧盘的UUID> vg_1
#  Volume group "RGmXzb-..." successfully renamed to "vg_1"

7.4 重命名 LV

1
lvrename /dev/vg_1/ubuntu-lv lv_1

7.5 扩展新系统盘

1
2
3
# 挂载在根目录的话,扩了之后就缩不了了
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
resize2fs /dev/ubuntu-vg/ubuntu-lv

7.6 挂载旧 LV

1
2
mkdir -p /data
mount /dev/vg_1/lv_1 /data

八、磁盘性能监控基础

生产环境出问题时的"5 把刀"(dstat / iotop / pidstat / vmstat / top 的组合):

工具用途
top监控整体服务器:CPU、内存、磁盘、网络综合
dstat -d查看当前磁盘每秒的读/写量(单位 K)
dstat -r查看当前磁盘随机的读/写 IOPS
dstat -n查看网卡每秒接收/发送量(单位 K)
pidstat统计各进程的磁盘 I/O(也可监控 CPU 和内存)
iotop类似 top,但只看 I/O 相关的进程
vmstat监控 I/O 活跃的进程、内存、CPU
1
2
3
4
5
6
7
8
# 看磁盘读写流量
dstat -d

# 看随机 IOPS
dstat -r

# 看每个进程的磁盘 I/O
pidstat -d 1

九、前置知识 / 下一步

  • 想了解软件 RAID 控制器 vs 硬件 RAID 控制器 vs ZFS 的对比 → 翻独立文章
  • 想了解文件系统选型(ext4 / xfs / btrfs / zfs)→ 翻独立文章
  • 想了解生产环境 LVM 监控(pvs / lvs / dmsetup) → 翻本系列《Linux 监控与系统性能工具》

十、参考资源


2024 视角:十年间磁盘技术的最大变化

2014 这套"fio + LVM + mdadm"组合在 2024 仍然管用——这是 Linux 存储栈的"长青"层。但 10 年间硬件/生态发生了三件大事:

一、NVMe 从"新事物"变成"主流"

  • 2014 年 NVMe SSD 还是"高端服务器配置"(单价 ¥5000+)。

  • 2024 年消费级 M.2 NVMe 1TB SSD 已 ¥400-500,PCIe 4.0 速率 7 GB/s,PCIe 5.0 速率 12+ GB/s 成为新机主流。

  • fio 测试目标从 /dev/sda(机械)几乎全切到 /dev/nvme0n1

    1
    2
    3
    4
    
    # 顺序读
    fio --name=seq-read --ioengine=libaio --direct=1 \
        --filename=/dev/nvme0n1 --bs=128k --size=10G \
        --rw=read --iodepth=128 --runtime=30 --time_based
    
  • ZNS(Zoned Namespaces) SSD(2023+ 量产)是下一代 NVMe 革命——按"区域"写入,类似 SMR HDD 但更激进。

二、文件系统的"现代选择"

  • 2014 时代服务器主流是 ext4。2024 的选择更细分:
场景2014 选2024 选
通用服务器ext4xfs(默认)
大文件 / 视频xfsxfs / btrfs
快照 / 容器存储btrfs(Fedora 33+ 默认)
高完整性ext4 + dm-cryptext4 + LUKS2 / ZFS
NAS / 备份ext4ZFS / btrfs
  • xfs 是 RHEL 9 / Rocky 9 / AlmaLinux 9 的默认文件系统——本文 mkfs.xfs 仍是正确选择。
  • btrfs 在 Fedora / openSUSE 已经默认(ext4 在 RHEL 8 仍是默认,但 9 已经过渡到 xfs)。

三、RAID 硬件层变化

  • 2014 时代企业级首选硬件 RAID 控制器(PERC H730 / LSI 9300 系列)。
  • 2024 年云厂商几乎都走软件 RAID(mdadm 或 mdadm + dm-crypt)——硬件 RAID 控制器在云上不可见。
  • 现代替代
    • ZFS mirror(mirror 模式 RAID1,snapshot 能力强)
    • Ceph(分布式存储,块 / 对象 / 文件一站式)
    • 云盘(直接用 EBS / 阿里云 ESSD,不用自己搭)

四、LVM 的"补强"特性

LVM 2.03+ 在 2024 加了几个值得用上的新功能:

  • lvconvert --type thin:thin-provisioned LV,超分用、用多少占多少。

  • lvmvdo(Virtual Data Optimizer)集成:去重 + 压缩,RHEL 8/9 默认带

  • LVM RAID(替代 mdadm):

    1
    
    lvcreate --type raid1 -L 100G -n data vg /dev/sda1 /dev/sdb1
    
  • 自动激活 + 锁lvmlockd 支持 SAN 共享存储下的 LVM 集群锁。

五、fio 3.x 的现代参数

  • 2024 装的 fio 通常是 3.36+(最新已到 3.38),新增:

    • --output-format=json:JSON 输出(适合 CI/ELK 收集)
    • --eta=always:预估剩余时间
    • --thread=1:分离统计线程
  • iodepth 调优:NVMe SSD 队列深度 32-64 甜点,HDD 4-8。

  • 新的 ioengine

    • io_uring(Linux 5.1+,比 libaio 更低延迟
    1
    
    fio --ioengine=io_uring --iodepth=64 --direct=1 ...
    
使用 Hugo 构建
主题 StackJimmy 设计