磁盘空间不够、需要跨盘合并、想要软阵列提升性能,这些场景分别由 LVM 和 mdadm 解决。本文整理磁盘查看、分区、LVM 全流程和 RAID0 软阵列创建方法。

一、查看磁盘状态

lsblk -o name,rota,type,serial,OPT-IO,MIN-IO,MOUNTPOINT,SIZE
blkid        # 查看分区 UUID 和文件系统类型
parted /dev/sda print   # 查看分区表(GPT/MBR)和分区布局

二、分区

MBR 磁盘用 fdisk,GPT 磁盘用 gdisk:

yum install gdisk
gdisk /dev/vda    # q 取消,w 写入

注意:gdisk 创建分区后分区表不会立即更新,需要执行:

partprobe -s
lsblk /dev/vda

格式化:

mkfs.xfs /dev/vda4          # xfs 文件系统
mkfs.ext4 /dev/vda5         # ext4 文件系统

三、LVM 基本概念

LVM 把物理分区抽象成逻辑卷,支持在线扩容:

partition(物理分区) → PV(物理卷) → VG(卷组) → LV(逻辑卷) → 格式化挂载
  • PV(Physical Volume):被 LVM 管理的物理分区。
  • VG(Volume Group):多个 PV 整合成的存储池。
  • PE(Physical Extent):VG 内最小存储单元。
  • LV(Logical Volume):从 VG 中切出的逻辑卷,可格式化挂载。

四、LVM 创建流程

4.1 PV 阶段

pvcreate /dev/vda{5,6,7,8}   # 把分区创建为 PV
pvscan                       # 扫描 PV
pvdisplay                    # 查看 PV 状态

4.2 VG 阶段

# 指定 PE 大小为 16MB,创建卷组
vgcreate -s 16M vbirdvg /dev/vda{5,6,7}

# 扩容:加入新的 PV
vgextend vbirdvg /dev/vda8
vgdisplay vbirdvg

PE 大小影响卷组容量上限:一个 VG 最多 65535 个 PE,容量上限 = 65535 × PE 大小。

4.3 LV 阶段

# 按容量创建
lvcreate -L 2G -n vbirdlv vbirdvg

# 按 PE 个数创建
lvcreate -l 20 -n vbirdlv vbirdvg

# 使用卷组全部剩余空间
lvcreate -l +100%FREE -n vbirdlv vbirdvg

4.4 格式化挂载

mkfs.xfs /dev/vbirdvg/vbirdlv    # 注意使用 LV 全名
mkdir /srv/lvm
mount /dev/vbirdvg/vbirdlv /srv/lvm
df -Th /srv/lvm

4.5 在线扩容

# 先扩容 LV
lvextend -l +100%FREE /dev/vbirdvg/vbirdlv

# 再扩容文件系统(这一步不能少)
resize2fs /dev/vbirdvg/vbirdlv    # ext4
xfs_growfs /srv/lvm               # xfs

xfs 文件系统只能扩容不能缩小,规划时需注意。

4.6 开机自动挂载

vim /etc/fstab
/dev/mapper/vbirdvg-vbirdlv /srv/lvm xfs defaults 0 0

保存后执行 mount -a 验证。

五、mdadm 创建 RAID0

RAID0 把多块盘条带化,提升读写性能,但没有任何冗余,一块盘损坏即数据全丢。适合缓存、临时数据等场景。

5.1 安装

sudo apt update
sudo apt install mdadm -y

5.2 创建 RAID0

lsblk   # 确认磁盘

sudo mdadm --create --verbose /dev/md0 \
    --level=0 \
    --raid-devices=4 \
    /dev/sda /dev/sdb /dev/sdc /dev/sdd \
    --chunk=256K

--chunk=256K 指定条带大小。

5.3 查看状态

cat /proc/mdstat
Personalities : [raid0]
md0 : active raid0 sdd[3] sdc[2] sdb[1] sda[0]
      14651481600 blocks 256k chunks

5.4 保存配置

sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf

5.5 创建文件系统

RAID0 的 su/sw 参数与条带大小匹配,可以优化 xfs 分配:

sudo mkfs.xfs -f -d su=256k,sw=4 /dev/md0
  • su=256k:条带单元大小,对应 --chunk。
  • sw=4:条带数,对应磁盘数量。

5.6 挂载

sudo mkdir -p /data
sudo mount -o noatime,nodiratime,barrier=0 /dev/md0 /data

写入 /etc/fstab:

/dev/md0 /data xfs defaults,noatime,nodiratime,barrier=0 0 0

5.7 性能验证

sync; dd if=/dev/zero of=/data/testfile bs=1M count=10240 oflag=direct

写入完成后删除测试文件,避免占满空间。

六、总结

  • LVM 解决容量管理:PV → VG → LV 分层抽象,lvextend + xfs_growfs 在线扩容。
  • VG 容量上限受 PE 数量限制(65535 × PE 大小)。
  • RAID0 提升性能但无冗余,--chunk 要与 mkfs.xfs 的 su/sw 对应。
  • 新盘做阵列或 LVM 前,务必确认磁盘未被使用(参考磁盘验收文章的检查方法)。

相关脚本

整理自 cyy-tag/bash-example 仓库: