缩小xfs文件系统的CentOS/RedHat虚拟机硬盘的迂回方法

使用xfs文件系统的CentOS/RedHat虚拟机缩小硬盘的迂回方法

2019年7月19日  Hwajie

0.情况是这样的

客户那边建了一台占5T硬盘的CentOS虚拟机,用了一段时间,要开wmware的自动保护功能,总空间不够用,后悔开太大了。

好在虚拟机内实际只用了几百G的硬盘空间,于是想把磁盘缩小到2T。

结果文件系统是xfs,只许增大不许缩小。

      看来只能绕道而行,另外再建一块2T硬盘,把系统复制到2T的盘里了。

另:vmware-vdiskmanager命令可以转成动态增长的磁盘,非xfs格式的话,或许可以考虑转换后再修改磁盘配置文件的参数。

为此演习一遍,兹有本文。

1.试验平台

自己电脑上有个现成的RedHat虚拟机,硬盘140G。启动后磁盘管理器识别为150G,其中1G是引导分区/dev/sda1,其余是/dev/sda2,用了lvm管理的。第二个分区中128G挂给根目录,另外21G挂给swap用。

通过df -h查看,实际/根目录下只使用了33G的磁盘。

2试验dd

2.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

2.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

3重新规划

看来只有通过xfsdump和xfsrestore来倒文件了。要不要再加一个空的35G的磁盘格式化成xfs格式作为中转呢?(后来想想还是加一张盘更好)。

3.1重新分区

没有加新盘。目前只挂载了第二张盘,重新分区,数据区的前一半保留起来做还原区,后一半做成xfs格式的分区,用来保存第一个硬盘的root数据。

fdisk /dev/sda
d
2
n    #新建
p    #基本分区
2

+34G  大小34G
n    #新建
p
3


w    #保存退出

mkfs.xfs /dev/sda3

关机。

3.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      #备份

这次备份快很多,完毕后再关机。

3.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

等待命令完成。

3.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

https://linux.die.net/man/8/xfs_repair

http://man.linuxde.net/fdisk

原文地址:https://www.cnblogs.com/hwajie/p/11212604.html