使用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