Centos6.5 LVM跨盘数据盘缩容回收与替换扩容

Centos6.5 LVM跨盘数据盘缩容回收与替换扩容

记录时间:2026-08-26
环境:RHEL 6.5(CentOS 系)/ LVM2 / ext4 / Xen 云主机(xvd 系列虚拟磁盘)

一、背景 / 问题现象

一台 RHEL 6.5 云主机,100G 数据盘 xvdf 被云平台配置成了独立-非持久模式,关机后这块盘的数据会丢。云平台反馈需要做数据盘替换:把旧盘回收,换一块持久盘。

拿到需求我的第一反应是 umount 挂载点、云平台卸盘就完事了。看了眼 lsblk 才发现根本不是挂载问题:

[root@localhost ~]# lsblk
NAME                        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
xvda                        202:0    0  100G  0 disk
├─xvda1                     202:1    0  200M  0 part /boot
├─xvda2                     202:2    0 15.6G  0 part [SWAP]
└─xvda3                     202:3    0 84.2G  0 part
  ├─VolGroup-root (dm-0)    253:0    0   20G  0 lvm  /
  ├─VolGroup-AppData (dm-1) 253:1    0  130G  0 lvm  /AppData
  ├─VolGroup-AppHome (dm-2) 253:2    0   20G  0 lvm  /AppHome
  └─VolGroup-AppLogs (dm-3) 253:3    0   10G  0 lvm  /AppLogs
xvdf                        202:80   0  100G  0 disk
└─VolGroup-AppData (dm-1)   253:1    0  130G  0 lvm  /AppData

xvdf 上没有任何独立挂载点,它是 LVM 的物理卷(PV),和系统盘上的 xvda3 同属 VolGroup。/AppData 这个 130G 的逻辑卷(LV)跨在两块盘上。直接在云平台删盘,/AppData 立刻 I/O error,VG 元数据也就坏了。

先算了笔账再定方案:

项目 容量 说明
xvda3 总量 84.2G root 20G + AppHome 20G + AppLogs 10G 已占 50G
xvda3 能给 AppData 的上限 ~34G 84.2G – 50G
AppData 逻辑卷 130G xvda3 上约 34G + xvdf 上约 96G
AppData 实际数据 3.7G df 显示 3% 使用

结论:把 AppData 缩到 34G 以内(我取了 30G),数据全部落回系统盘 xvda3,xvdf 就能干净摘出来。整个操作分三段:缩容摘盘 → 云平台换盘 → 扩容还原

二、操作过程

2.1 前置确认

df -T /AppData
Filesystem                   Type 1K-blocks    Used Available Use% Mounted on
/dev/mapper/VolGroup-AppData ext4 134176040 3807104 123554472   3% /AppData

必须是 ext4 才能缩小。这台是 RHEL 6.5,默认 ext4(RHEL 6 连 xfsprogs 都不预装)。如果碰到 xfs 要注意:xfs 只能扩不能缩,只能走备份 → lvremove 删卷重建 → 恢复数据的路子。

数据只有 3.7G,先备份兜底:

tar czf /root/AppData_bak_$(date +%F).tgz -C / AppData

2.2 缩容并摘除 xvdf

停掉占用 /AppData 的业务进程,卸载(ext4 只支持在线扩大,不支持在线缩小,缩文件系统必须离线做):

fuser -mv /AppData     # 有输出先停对应服务
cd /                   # shell 若在 /AppData 下,umount 会报 target is busy
umount /AppData

离线检查文件系统。第一次跑弹了个提示:

[root@localhost /]# e2fsck -f /dev/mapper/VolGroup-AppData
Pass 3: Checking directory connectivity
/lost+found not found.  Create<y>? yes

文件系统里没有 lost+found 目录,e2fsck 顺手补建,正常提示,回 y 即可。

先缩文件系统,再缩逻辑卷,这个顺序反了数据就没了:

e2fsck -f /dev/mapper/VolGroup-AppData
resize2fs /dev/mapper/VolGroup-AppData 30G
lvreduce -L 30G /dev/mapper/VolGroup-AppData   # 丢数据警告回 y

然后把 xvdf 摘出卷组:

pvmove /dev/xvdf
vgreduce VolGroup /dev/xvdf
pvremove /dev/xvdf

pvmove 输出 No data to move for VolGroup,我还愣了一下,随后想明白了:lvreduce 默认从 LV 尾部释放物理扩展(PE),这次恰好把落在 xvdf 上的 PE 全放掉了,pvmove 自然无事可做。这一步不能省,它是保险:万一 lvreduce 释放的尾部有一部分在 xvda3 上,pvmove 会把 xvdf 上的残留 PE 挪回系统盘,保证 vgreduce 一定干净。

挂回来确认数据还在:

mount -a
df -h /AppData     # 30G,数据 3.7G 完好
lsblk              # xvdf 光秃秃,下面没有任何 LV

2.3 云平台换盘

系统内确认 pvs 只剩 /dev/xvda3、lsblk 里 xvdf 是裸盘之后,才去云平台卸载并回收 xvdf。顺序不能反,先删云盘的话 /AppData 的 VG 元数据直接损坏,重启都起不来。

新持久盘挂上来后:

[root@localhost ~]# lsblk
...
xvde                        202:64   0  100G  0 disk

新盘是 xvde 不是 xvdf,这是正常的:盘符由内核按发现顺序分配,不保证稳定。LVM 认 PV 的 UUID 不认设备名,不用担心;fstab 走 /dev/mapper/ 路径同样不受影响。

2.4 扩容还原

这次方向反过来了(扩容),ext4 支持在线扩大,全程不用 umount、不用停业务。先确认新盘是空盘、且云平台侧已确认为持久模式(磁盘模式系统里查不到,只能平台侧看):

blkid /dev/xvde        # 无输出 = 空盘
pvcreate /dev/xvde
vgextend VolGroup /dev/xvde
lvextend -L +100G /dev/mapper/VolGroup-AppData
resize2fs /dev/mapper/VolGroup-AppData

扩容方向的 resize2fs 连大小参数都不用带,自动把文件系统撑满整个 LV。

三、验证

[root@localhost ~]# df -h /AppData
Filesystem                    Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup-AppData  128G  3.7G  118G   3% /AppData

[root@localhost ~]# lsblk
xvda ...
  ├─VolGroup-AppData (dm-1)   253:1    0  130G  0 lvm  /AppData
xvde                        202:64   0  100G  0 disk
└─VolGroup-AppData (dm-1)   253:1    0  130G  0 lvm  /AppData

/AppData 恢复 128G,数据完好,拓扑和换盘前一致(xvdf 换成了 xvde)。

这次换盘的目的就是解决非持久丢数据,所以最后约了个窗口重启了一次:开机后 lsblk 正常、/AppData 数据都在、提前 touch 的测试文件也在,持久性确认无误。业务跑稳几天后把 /root 下的备份 tgz 清掉。

四、注意事项 / 常见问题

先缩文件系统再缩 LV(resize2fs → lvreduce),顺序反了文件系统直接损坏。缩小方向的 resize2fs 必须给目标大小,且离线执行

系统内摘干净(pvremove)之后才能去云平台删盘,反过来做 /AppData 立刻 I/O error,VG 元数据损坏后恢复很麻烦。

缩小目标有硬上限:不能超过其他逻辑卷占完后系统盘上的剩余空间(本例 34G),不然数据落不回去。

lvreduce 默认从 LV 尾部释放 PE,不一定正好全落在要摘的盘上,所以 pvmove 不能省。

ext4 只能在线扩不能在线缩;xfs 只能扩不能缩(xfs 想缩小只能备份重建)。

云平台换盘后盘符会变(xvdf → xvde),LVM 和 fstab 都不受影响,按 lsblk 实际名字操作即可。

缩容期间业务要停(umount 才能缩),扩容方向在线做就行,计划停机窗口只按缩容那段留。

五、参考资料

  • 验证命令:lsblk / pvs / df -T / blkid,每一步操作后都跑一遍确认状态再往下走
  • Red Hat《Logical Volume Manager Administration Guide》:https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/6/html/logical_volume_manager_administration/
  • man 手册:lvm(8)lvreduce(8)pvmove(8)resize2fs(8)
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇