LVM 上扩 / 缩 ext4 分区(不停机)

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。
精确评价 共 0 人评价
可复现性
可复现 · 0 不可复现 · 0
文风
文风流畅 · 0 文风晦涩 · 0
立场
支持 · 0 反对 · 0

登录后即可对本帖作出评价。

评论区 0 条 · 所有人可在此交流

登录后参与评论。

还没有评论,来说两句。