• 缩小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

  • 相关阅读:
    java+selenium+new——同一个标签窗口里 ,访问多个网页的后退driver.navigate().back()、前进driver.navigate().forward()、刷新driver.navigate().refresh()等功能 。以及获取当前页面的title属性driver.getTitle()和获取当前页面的url地址driver.getCurrentUrl()
    SoapUI接口测试——关联——参数化
    SoapUI接口测试——添加测试套件——new TestSuite——(类似于postman里面的集合)——添加测试步骤——teststeps(测试步骤)
    java+selenium+new——获取网页源代码driver.getPageSource()
    g++命令行详解
    hdoj_1503Advanced Fruits
    指针遍历vector向量
    最长公共子序列
    hdoj_1087Super Jumping! Jumping! Jumping!
    pcc32应用1
  • 原文地址:https://www.cnblogs.com/hwajie/p/11212604.html
Copyright © 2020-2023  润新知