縮小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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM