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