使用xfs文件系统的CentOS/RedHat虚拟机缩小硬盘的迂回方法
2019年7月19日 Hwajie
0.情况是这样的
客户那边建了一台占5T硬盘的CentOS虚拟机,用了一段时间,要开wmware的自动保护功能,总空间不够用,后悔开太大了。
好在虚拟机内实际只用了几百G的硬盘空间,于是想把磁盘缩小到2T,结果文件系统是xfs,只许增大不许缩小。
看来只能绕道而行,另外再建一块2T硬盘,把系统复制到2T的盘里了。否则的话,只要用vmware-vdiskmanager转成动态增长的磁盘就可以了。
为此演习一遍,兹有本文。
1试验dd
1.1试验平台
自己电脑上有个现成的RedHat虚拟机,硬盘140G。启动后磁盘管理器识别为150G,其中1G是引导分区/dev/sda1,其余是/dev/sda2,用了lvm管理的。第二个分区中128G挂给根目录,另外21G挂给swap用。
通过df -h查看,实际/根目录下只使用了33G的磁盘。
1.1第一阶段,准备用dd命令复制。
关机增加第二块70G的硬盘,光驱设置为RedHat的安装盘,启动时连接。dd往容量一致或更大的硬盘写,是没问题的。现在120G->70G,估计不靠谱。
启动虚拟机,快按一下Escape键,在启动菜单,选择 CD-ROM驱动器 ---> 诊断问题 ---> 修复RedHat系统。
按Enter键,到挂载已安装Linux系统那里,选择3不挂载,直接开始Shell命令行。
查看确认磁盘
fdisk -l | grep sd
再使用vgs/vgdisplay和lvs/lvdisplay查看lvm的内容,接着删除swap(复制swap感觉没什么意义),开始dd复制。
lvremove /dev/rhel/swap
dd if=/dev/sda of=/dev/sdb
开始漫长的等待,终于完成。关机。
shutdown now
1.2尝试修复
移除第一张虚拟硬盘,再次从CD-ROM启动系统,尝试修复文件系统,因为磁盘容量减小的缘故。如果是一样的容量或更大的话,至此已经成功,无需修复。
pvchange -u -x y /dev/sda2 pvresize /dev/sda2
貌似已经修复不了,虽然我也不懂,但是以我的知识,绝对修不好:
只好删除/dev/sda2然后重建。
fdisk /dev/sda m #查看帮助 d #删除 2 n #新建
p 2 w #保存退出
再查看pvdisplay vgdisplay lvdisplay,意外地发现没有被删除,好吧,那就只好一个个删除。
lvremove root vgremove rhel pvremove /dev/sda2
2重新规划
看来只有通过xfsdump和xfsrestore来倒文件了。要不要再加一个空的35G的磁盘格式化成xfs格式作为中转呢?(后来想想还是加一张盘更好)。
2.1重新分区
数据区的前一半保留起来做还原区,后一半做成xfs格式的分区,用来保存第一个硬盘的root数据。
fdisk /dev/sda
d
2
n #新建
p #基本分区
2
+34G 大小34G
n #新建
p
3
w #保存退出
mkfs.xfs /dev/sda3
关机。
2.2备份root
重新加上第一个硬盘,重启到诊断恢复模式。开始备份
lvcreate -L 19G -name swap rhel #重新为第一个盘上建立swap分区 mkdir /rot vgchange -ay rhel #激活rhel mount /dev/rhel/root /rot #挂载root到/rot mkdir /bkroot mount /dev/sdb3 /bkroot #挂载新盘的第3个分区到/bkroot xfsdump -f /bkroot/rot.img /rot #备份
这次备份快很多,完毕后再关机。
2.3还原root
再次移除第一个硬盘,重启到诊断恢复模式。先创建逻辑卷
pvcreate /dev/sda2 vgcreate rhel /dev/sda2 lvcreate -L 33G -n root rhel
mkfs.xfs /dev/rhel/root
开始还原
mkdir /rot mount /dev/rhel/root /rot mkdir /bkroot mount /dev/sda3 /bkroot xfsrestore -f /bkroot/rot.img /rot
等待命令完成。
2.4扫尾
umount /bkroot #卸载第三分区sda3 pvcreate /dev/sda3 #转换sda3成lvm vgextend rhel /dev/sda3 #加入vg lvresize -L 49G /dev/rhel/root #扩大root逻辑卷 xfs_growfs /dev/rhel/root #文件系统跟着扩大
df -h #查看新大小 lvcreate -L 19G -n swap rhel #新建swap逻辑卷 lvdisplay
然后正常重启
reboot
结语:
新硬盘上跑起来了,感觉就像做梦一样!
参考了一下链接,非常感谢(实际还有更多,没记下来)
https://www.vmware.com/support/ws45/doc/disks_vdiskmanager_run_ws.html
https://www.ibm.com/developerworks/cn/linux/l-cn-pclvm-rstr/index.html
https://www.runoob.com/linux/linux-comm-dd.html