轉載請注明作者(think8848)和本文鏈接http://think8848.cnblogs.com
掛載oVirt虛擬機磁盤
目標: oVirt Engine掛了后虛擬機無法啟動,在其他Linux系統中掛載虛擬機磁盤找回數據。
此文目的是記錄找回數據的過程,使用的方法不一定是最佳方案,歡迎有更好方法的大神提供最優方案
1. 準備工作
1.1 安裝用于找回數據的Linux系統,我使用的是Ubuntu 22.04.3, 在安裝過程中磁盤不采用lvm格式;此系統的磁盤一定要大,最好有接近要找回磁盤文件2倍大的剩余空間。
1.2 在oVert Node中找到磁盤文件,通常位于oVirt Node數據存儲目錄下的images目錄中,例: /data/hdd1/230845d7-1164-4e44-8d98-a77ccfcd6fc8/images。
為了能夠在Engine掛了后還能找到對應的磁盤文件,強烈建議在創建虛擬機磁盤時填寫磁盤的備注信息,否則可能無法確定哪個磁盤是您所需要找回的目標。
1.3 將磁盤文件復制到新安裝的Ubuntu系統中。如果磁盤文件過大,或者在復制期間要關閉terminal工具(WiFi不穩定,下班要回家等等情況),建議使用后臺復制,命令如下:
nohup scp -r xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx root@xxx.xxx.xxx.xxx:/root > nohup.out 2>&1
在復制的過程中可以使用bg命令查看復制是否正在進行。
如果磁盤過大,轉輸的網速又不夠快,建議在傳輸磁盤文件之前先行壓縮,推薦使用pigz進行多線程壓縮/解壓。
nohup tar --use-compress-program="pigz -p 70" -xvpf file.tar.gz &
上面示例中的-p 70參數意為使用70個線程進行解壓,如果不指定-p參數則默認使用8個線程進行解壓(經測試,在壓縮時確實可以跑滿70個線程,但是解壓時貌似指定了70個線程,但實際上還是使用8個線程,不過確實比直接使用tar快很多)
強烈建議在oVirt Engine上創建虛擬機時按需分配虛擬機磁盤空間,否則在找回磁盤文件將消耗大量的磁盤空間和時間
2. 查看并處理Raw文件
2.1 為了方便操作文件,可將xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx形式的文件名修改為raw。
mv xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx raw
2.2 查看raw文件分區情況
fdisk -l raw

2.3 將raw格式文件(注意:此處的文件名正好也是raw)轉換為qcow2格式文件
# 安裝qemu-utils工具
apt install -y qemu-utils
# 將raw格式文件轉換為qcow2格式文件
nohup qemu-img convert -O qcow2 raw newfile.qcow2 &
以上的文件操作在采用了SSD固態硬盤的情況下耗時數小時(我要掛載的虛擬機磁盤為2.5T),如果換作機械硬盤估計至少需要24小時以上。
3. 掛載qcow2格式磁盤
3.1 安裝libguestfs-tools虛擬機磁盤管理工具
apt install libguestfs-tools -y
3.2 查看qcow2格式磁盤中的磁盤分區情況
virt-filesystems -a newfile.qcow2

3.3 掛載磁盤
guestmount -a newfile.qcow2 -m /dev/ubuntu-vg/ubuntu-lv /mnt
如果不出意外,進入/mnt目錄就可以看到虛擬機磁盤中的數據了!
4. 其他需要說明的情況
4.1 本方法適用于在創建虛擬機時使用lvm邏輯卷的情況。使用lvm邏輯卷的好處很多,但是在掛載磁盤數據時會導致出現mount: unknown filesystem type 'LVM2_member'的情況。針對這個情況本文提供了解決方案。
4.2 如果在創建虛擬機時不使用lvm,而是使用了ext4磁盤格式,那么可以使用本文的方法,直接掛載ext4分區。
從某些層面而言,如果您大概率確定虛擬機的磁盤在將來使用時不需要擴容或者縮容,那么直接在創建虛擬機的時候就采用ext4格式,將來一旦出現oVirt Engine故障時,您可以快速高效的把文件搶救出來:)
浙公網安備 33010602011771號