使用基于鏡像的存儲后端掛載Xen虛擬機
在本文中,TechTarget中國的特約虛擬化作者Sander van Vugt將介紹如何在使用文件作為其存儲后端的虛擬機上執行相同的操作。
掛載基于鏡像的虛擬磁盤
掛載在鏡像文件里的虛擬磁盤比掛載位于物理存儲設備的虛擬磁盤困難得多。不像物理設備,為了掛載鏡像文件你需要知道回環設備。這個回環設備由內核模塊(叫做回環)組成,確保對于每個你想掛載的文件,就會創建一個回環設備。這些回環設備按順序編號,第一個的名字在/dev/loop0。
你可能已經熟悉文件系統上的回環設備進程。例如,你能使用這個技術掛載.ISO文件。使用以下命令:
mount -o loop /bestand.iso /mnt
不過,如果你需要訪問Xen虛擬磁盤文件里的分區,這個步驟幫不了你。你不想掛載文件,只想首先訪問里面的分區,那么你需要在回環設備和你想訪問的鏡像文件之間使用losetup命令建立連接。在連接之前,輸入下面的命令查看正在使用的回環設備:
losetup –a
假定沒有回環設備正在使用,可以使用/dev/loop0作為回環設備,連接到Xen鏡像文件。如果鏡像文件的名字是/var/lib/xen/images/vm1/disk0,使用下面命令建立連接:
losetup /dev/loop0 /var/lib/xen/images/vm1/disk0
如果你再次使用losetup,你將發現已創建的回環設備,在回環設備和鏡像文件之間存在連接。現在可以使用下面命令開始分析鏡像文件里的分區:
fdisk -l: fdisk -l /dev/loop0
基于fdisk -l顯示給你的信息。你應該能辨別哪個設備宿主根文件系統。發現后,你需要確保你有相同的設備文件用于鏡像文件里的分區,以便掛載它們。如果安裝了多路徑工具包,使用下面命令:
kpartx -a /dev/loop0
由于鏡像文件使用loop0設備,這個創建的設備文件的名字是/dev/mapper/loop0p1、/dev/mapper/loop0p2,以此類推。你現在能使用這些文件掛載文件系統,這些系統上安裝了操作系統的根。這可以是Linux或Windows操作系統,因為你能在虛擬主機操作系統上掛載它們。一旦對這個文件系統作出必要的修改,輸入下面命令正確卸載:
umount /mnt
kpartx -d /dev/loop0
losetup -d /dev/loop0
處理基于Linux虛擬機主機里的本地卷
在上面討論的步驟中,我已經假定你的虛擬操作系統使用通用分區。不過,如果虛擬機使用Linux的話,情況就不同了。你可能使用本地卷管理(LVM)而不是分區。這讓情況變得有點復雜,因為你不能通過簡單的激活分區激活本地卷。
通常,當服務器啟動時,將為每個可用設備掃描本地卷。不過由于虛擬機磁盤文件里的設備在啟動時不可用,你需要自己掃描本地卷。
如果fdisk——我建議在存儲后端文件上顯示分區——是type 8e,你需要執行專門的步驟。在下面步驟中,我假定通過/dev/mapper/loop0p2設備,這個分區是可用的。
你需要確保這個分區由LVM子系統作為物理設備。只知道這個分區是type 8e是不夠的,你需要告訴LVM子系統它是可用的,能作為物理設備,并且LVM能使用它。使用下面命令這樣做:
pvscan /dev/loop0p2
接下來,你將被告知LVM卷組在物理設備里被發現了,但是你需要通過使用下面命令初始化這個卷組:
vgscan
為了完成LVM架構的重新配置,你需要在卷組里的本地卷使用下面命令:
lvscan
盡管你現在能再次訪問本地卷,你將發現所有本地卷都沒活動。你需要在掛載本地卷時修復這個問題。通過使用vgchange命令更改卷組的狀態。這個命令將更改所有在volume group vm1vg的卷的狀態,并激活它們:
vgchange /dev/vm1vg
LVM本地卷現在是激活的,并準備好掛載。例如,如果你想使用名稱/dev/lvm1vg/root掛載本地卷,就該使用以下命令:
mount /dev/vm1vg/root /mnt
這時,你對本地卷里的所有文件有完全訪問權。你現在能作出你需要的所有修改。
總結
在本文中,我們介紹了如果虛擬機本身不能啟動時如何訪問Xen虛擬機的所有文件。這能幫助你修復發生在虛擬機里的問題,在最糟的情形下,能幫助你回復失敗的虛擬機。
【編輯推薦】