LVM 比直接分区灵活得多:磁盘空间可以在线扩、跨多块物理盘组卷、做快照。
日常运维最常用的就是"分区满了,加块盘扩进去"。下面按真实流程走一遍。
前置:分区是 ext4 on LVM,要扩或缩的是某个 LV。XFS 类似但不能缩。
现场摸底
df -h /data
# Filesystem Size Used Avail Use% Mounted on
# /dev/mapper/vg0-data 100G 95G 5G 95% /data
sudo lvs
# LV VG Attr LSize
# data vg0 -wi-ao 100.00g
# root vg0 -wi-ao 50.00g
sudo vgs
# VG #PV #LV #SN Attr VSize VFree
# vg0 1 2 0 wz--n- 200.00g 50.00g
sudo pvs
# PV VG Fmt Attr PSize PFree
# /dev/sda2 vg0 lvm2 a-- 200.00g 50.00g
场景 A:VG 有剩余空间,扩 LV + ext4
最简单情况。直接扩:
# 加 30G 到 data LV,顺手扩 ext4
sudo lvextend -L +30G -r /dev/vg0/data
# -r 等价于扩完后自动跑 resize2fs(ext4)或 xfs_growfs
不带 -r 时分两步:
sudo lvextend -L +30G /dev/vg0/data
sudo resize2fs /dev/vg0/data
ext4 / XFS 都支持在线扩容,不需要 umount,业务无感知。
校验:
df -h /data
# /dev/mapper/vg0-data 130G 95G 31G 76% /data
场景 B:VG 空间不够,先加物理盘
# 新磁盘 /dev/sdb 装上,整盘做 PV(生产建议先 fdisk 建分区给它)
sudo pvcreate /dev/sdb
sudo vgextend vg0 /dev/sdb
sudo vgs
# VG #PV #LV #SN Attr VSize VFree
# vg0 2 2 0 wz--n- 700.00g 550.00g
# 然后回到场景 A 扩 LV
sudo lvextend -L +100G -r /dev/vg0/data
场景 C:缩 LV(危险,要停机 + 备份)
ext4 缩容必须先 umount,且 没有 100% 安全的在线缩容方案。
执行前 ===先做备份===。
# 1. umount
sudo umount /data
# 2. fsck(强制检查)
sudo e2fsck -fy /dev/vg0/data
# 3. 文件系统先缩到目标大小
sudo resize2fs /dev/vg0/data 60G
# 4. LV 缩到同样或稍大的尺寸(建议 +1G 余量)
sudo lvreduce -L 61G /dev/vg0/data
# 5. 文件系统再扩满 LV
sudo resize2fs /dev/vg0/data
# 6. 重新 mount
sudo mount /data
步骤 3 < 步骤 4 的顺序不能颠倒!文件系统比块设备大会立即损坏。
场景 D:从一块物理盘迁数据到另一块(替换坏盘)
# 新盘加入 VG
sudo pvcreate /dev/sdc
sudo vgextend vg0 /dev/sdc
# 把 sdb 上的所有 LV 迁到其它 PV(pvmove 是在线的)
sudo pvmove /dev/sdb
# 漫长过程,可以加 -b 后台跑,sudo pvmove -b /dev/sdb
# 完成后从 VG 移除
sudo vgreduce vg0 /dev/sdb
sudo pvremove /dev/sdb
# 现在 sdb 可以物理移除
快照(紧急回滚)
# 给 data 拍个快照,预留 10G 写时变化
sudo lvcreate -L 10G -s -n data-snap /dev/vg0/data
# 操作系统看到的是冻结时刻的 data,挂载它能恢复文件
sudo mkdir /mnt/snap
sudo mount /dev/vg0/data-snap /mnt/snap
# 没问题就删掉快照(不删会占空间且影响写性能)
sudo umount /mnt/snap
sudo lvremove /dev/vg0/data-snap
升级 / 大改动前给 root LV 拍快照,是 LVM 系统的"undo"能力。
踩过的坑
lvextend -L 200G是 设置 总大小到 200G,-L +100G是 追加 100G。
搞反了能把分区缩没掉。- ext4 在 64-bit 模式(新版本默认)才支持超 16T;老分区扩到 16T+ 会 fail。
tune2fs -O 64bit /dev/...升级,操作需要 fsck 时间。 - pvmove 时如果系统 reboot,会卡在半迁状态。重新启动后用
pvmove --abort或继续pvmove。 - XFS 不能缩 —— 想缩只能 dump + mkfs + restore。所以新分区如果有可能缩,
用 ext4。
登录后参与评论。