如何利用Libguestfs修復(fù)受損虛擬機(jī)?
作為VMware虛擬化環(huán)境管理員,你肯定遇到過(guò)虛擬機(jī)無(wú)法啟動(dòng)的情況。實(shí)施排錯(cuò)時(shí),你需要對(duì)虛擬機(jī)的內(nèi)部進(jìn)行檢查。而Libguestfs Linux工具集可以在這種情況下為你提供幫助。
利用Libguestfs找出損壞的虛擬機(jī)文件
Libguestfs允許在虛擬機(jī)上掛載任何類(lèi)型的文件系統(tǒng),以便修復(fù)啟動(dòng)故障。作為一款管理KVM環(huán)境中虛擬機(jī)的原生Linux工具,默認(rèn)情況下并不適用于所有VMware平臺(tái)。所以管理員不會(huì)將其作為***的工具,但是卻值得花費(fèi)一些時(shí)間來(lái)配置和使用。
使用Libguestfs,首先需要使用Libvirt。Libvirt是一個(gè)管理接口,可以和KVM、Xen和其他一些基于Liunx的虛擬機(jī)相互連接。Libguestfs的功能更加強(qiáng)大,可以打開(kāi)Windows虛擬機(jī)上的文件。這意味著除了能夠使用libguestfs,你還需要一些關(guān)于虛擬機(jī)操作系統(tǒng)內(nèi)部架構(gòu)的知識(shí)。但是首先你需要將虛擬機(jī)遷移到libguestfs可用的環(huán)境當(dāng)中,也就是Linux環(huán)境。
為了將虛擬機(jī)遷移到Linux當(dāng)中,你可以使用SSH連接到ESXi主機(jī),這意味著你首先需要啟用ESXi主機(jī)上的SSH訪問(wèn)方式。完成之后,在Linux平臺(tái)上運(yùn)行下面的scp命令:
- scp –r 192.168.178.30:/vmfs/volumes/datastore1/Windows*
使用guestfish操作虛擬機(jī)
完成虛擬機(jī)磁盤(pán)鏡像文件的復(fù)制之后,可以在libguestfs中使用guestfish這樣的工具將其打開(kāi),這樣就可以直接在vmdk文件上進(jìn)行操作了。使用guestfish -rw -a /path/to/windows.vmdk命令來(lái)在虛擬機(jī)中創(chuàng)建一個(gè)連接到文件系統(tǒng)的交互式shell。在新出現(xiàn)的窗口中,你可以使用特定的命令來(lái)操作虛擬機(jī)文件。
***個(gè)任務(wù)就是找到可用的文件系統(tǒng):
- ><fs> run
- ><fs> list-filesystems
- /dev/sda1: ntfs
- /dev/sda2: ntfs
當(dāng)你使用guestfish shell找到可用文件系統(tǒng)類(lèi)型之后,就可以進(jìn)行掛載了。使用命令mount /dev/sda2 / 來(lái)掛載二個(gè)分區(qū)的內(nèi)容——在Linux中是/dev/sda2——到guestfish根目錄下。在guestfish中,你不能像在其他shell環(huán)境中一樣操作目錄。掛載的分區(qū)就是根目錄,你不能使用cd命令來(lái)切換目錄,這意味著所有的路徑必須是完全限定路徑,從根目錄開(kāi)始。在guestfish shell當(dāng)中可以使用像ls、cat、more、download這樣的命令,來(lái)查看和下載文件以及目錄,輸入help可以看到完整的命令信息。在完整所有操作之后可以使用exit來(lái)關(guān)閉guestfish shell。
Virt-rescue提供了直接訪問(wèn)方式
在libguestfs工具中,還有許多其他可用的工具。virt-rescue命令——是使用正常的Linux文件系統(tǒng)工具來(lái)實(shí)現(xiàn)ad-hoc變化的***命令——可以在安全shell中啟動(dòng)虛擬機(jī)。你可以在虛擬機(jī)中操作這些文件,就像對(duì)掛載的文件系統(tǒng)上進(jìn)行操作一樣,其提供了對(duì)虛擬機(jī)內(nèi)容更加直接的訪問(wèn)方式。
為了在虛擬機(jī)上使用virt-rescue命令進(jìn)行操作,使用virt-rescure加上客戶(hù)端主機(jī)名來(lái)打開(kāi)virt-rescue shell,之后就進(jìn)入了><rescue>模式。
如果需要在虛擬機(jī)中掛載系統(tǒng)文件,可以使用fdisk -l /dev/sda命令來(lái)查看虛擬機(jī)的分區(qū)情況,之后再使用命令mount /dev/sda1 /sysroot掛載你想要訪問(wèn)的分區(qū)。這樣你就可以通過(guò)更改來(lái)修復(fù)虛擬機(jī)的內(nèi)容了。
虛擬機(jī)修復(fù)之后,關(guān)閉virt-rescue shell,將虛擬機(jī)重新移動(dòng)到ESXi服務(wù)器的數(shù)據(jù)存儲(chǔ)當(dāng)中。虛擬機(jī)返回原位置之后,如果之前的操作一切順利,你就應(yīng)該可以訪問(wèn)它了。