Linux 磁盘管理实战:LVM 逻辑卷扩容与日常维护
磁盘空间不足是运维日常最常遇到的问题之一。传统分区方式扩容麻烦、需要停机;而 LVM(逻辑卷管理)可以在线扩容,灵活应对业务增长。本文讲解磁盘基础操作、LVM 架构和在线扩容实战。
一、磁盘基础命令速查
df -hT # 查看文件系统使用情况(包含类型) lsblk -f # 块设备树形视图(含文件系统和挂载点) fdisk -l # 查看所有磁盘分区信息 du -sh /var/log/* | sort -rh # 查找 /var/log 下占用最大的目录 ncdu / # 交互式磁盘使用分析工具(更直观) iostat -xd 1 5 # 查看磁盘 IO 实时数据
二、传统分区(MBR/GPT)操作
# 对新硬盘 /dev/sdb 进行分区 fdisk /dev/sdb # MBR 格式,适合 < 2TB 的磁盘 # 或 gdisk /dev/sdb # GPT 格式,支持 > 2TB # 格式化为 ext4 mkfs.ext4 /dev/sdb1 # 手动挂载 mount /dev/sdb1 /data # 开机自动挂载(写入 /etc/fstab) echo '/dev/sdb1 /data ext4 defaults 0 2' >> /etc/fstab mount -a # 测试 fstab 配置是否正确
三、LVM 架构三层模型
LVM 在物理磁盘和文件系统之间增加了一个抽象层,实现灵活的空间管理:
物理磁盘分区(/dev/sdb1, /dev/sdc1)
↓ 初始化为
物理卷(PV: Physical Volume)
↓ 加入
卷组(VG: Volume Group) ← 池化所有物理卷的空间
↓ 从中划分
逻辑卷(LV: Logical Volume) ← 对上层文件系统的抽象磁盘
↓ 格式化 + 挂载
文件系统(ext4 / xfs)
灵活性的关键:可以随时向 VG 中添加新 PV,再扩展 LV 的大小,而不需要重新分区。
四、LVM 创建实战
# 步骤一:初始化物理卷(假设新磁盘为 /dev/sdb 和 /dev/sdc) pvcreate /dev/sdb /dev/sdc pvdisplay # 查看 PV 状态 # 步骤二:创建卷组 vg_data vgcreate vg_data /dev/sdb /dev/sdc vgdisplay vg_data # 查看总大小 # 步骤三:创建逻辑卷(从 vg_data 中划分 200G 给 lv_app) lvcreate -n lv_app -L 200G vg_data # 或者使用全部剩余空间:lvcreate -n lv_app -l 100%FREE vg_data # 步骤四:格式化并挂载 mkfs.ext4 /dev/vg_data/lv_app mkdir /opt/app mount /dev/vg_data/lv_app /opt/app # 步骤五:写入 fstab 开机自挂 echo '/dev/vg_data/lv_app /opt/app ext4 defaults 0 2' >> /etc/fstab
五、LVM 在线扩容(生产环境最常用操作)
# 场景:/opt/app 空间不够了,需要扩容到 300G # 1. 先确认 VG 有足够的剩余空间 vgdisplay vg_data | grep "Free" # 2. 如果 VG 空间不足,添加新磁盘到 VG pvcreate /dev/sdd # 初始化新磁盘为 PV vgextend vg_data /dev/sdd # 将新 PV 加入 VG # 3. 扩展 LV(增加 100G) lvextend -L +100G /dev/vg_data/lv_app # 或扩展到指定大小:lvextend -L 300G /dev/vg_data/lv_app # 4. 在线扩展文件系统(不需要停机!) # ext4 文件系统: resize2fs /dev/vg_data/lv_app # xfs 文件系统: xfs_growfs /opt/app # 5. 验证 df -h /opt/app
六、LVM 快照(数据备份利器)
# 创建快照(需要预留快照空间,与原卷相同的 IO 量) lvcreate -n lv_app_snap -L 20G -s /dev/vg_data/lv_app # 挂载快照(可以读取某一时刻的数据状态) mount -o ro /dev/vg_data/lv_app_snap /mnt/snapshot # 备份完成后删除快照 umount /mnt/snapshot lvremove /dev/vg_data/lv_app_snap
七、常用 LVM 命令速查
| 对象 | 查看 | 创建 | 删除 | 扩展 |
|---|---|---|---|---|
| PV | pvdisplay / pvs | pvcreate | pvremove | – |
| VG | vgdisplay / vgs | vgcreate | vgremove | vgextend |
| LV | lvdisplay / lvs | lvcreate | lvremove | lvextend |
八、磁盘 IO 性能调优小贴士
- SSD 磁盘选择
noop或none调度算法;HDD 选deadline - 数据库日志目录(MySQL binlog、WAL)和数据目录分开挂载,防止日志写满影响数据目录
- 挂载参数加
noatime可以减少访问时间更新的 IO 开销(对读多写少的场景有效)
总结
LVM 是每个 Linux 运维人员必须掌握的技能。掌握 PV→VG→LV 三层模型后,在线扩容、快照备份都变得得心应手。强烈建议新服务器安装系统时就用 LVM 管理数据盘,为将来的扩容留下余地。
