詳解Linux物理主機(jī)Host訪問(wèn)虛擬機(jī)
微軟的Windows也許已不再是主流,在當(dāng)今社會(huì)Linux越來(lái)越成為主流,你是Linux系統(tǒng)的應(yīng)用者么?本文為你詳細(xì)介紹Linux物理主機(jī)Host訪問(wèn)虛擬機(jī)(KVM)的硬盤鏡像,為你在學(xué)習(xí)Linux物理主機(jī)Host訪問(wèn)虛擬機(jī)(KVM)的硬盤鏡像時(shí)起一定的作用。
當(dāng)使用虛擬機(jī)的時(shí)候,經(jīng)常會(huì)遇到需要在不開(kāi)虛擬機(jī)的情況下訪問(wèn)某個(gè)硬盤鏡像的內(nèi)容。對(duì)于KVM來(lái)說(shuō),基本上,最簡(jiǎn)單的方法是用mount -o loop命令裝載鏡像內(nèi)容。但這個(gè)方法有其限制,如果鏡像文件帶有分區(qū),就不行了。
當(dāng)然,可以用mount -o loop,offset=的方式,指定一個(gè)偏移量,來(lái)解決這個(gè)問(wèn)題。但是你必須事先知道分區(qū)開(kāi)始的位置。
經(jīng)過(guò)探索,終于發(fā)現(xiàn)使用losetup和kpartx可以解決這個(gè)難題。
下面先講解一下losetup命令。如果你執(zhí)行如下命令
代碼:ls /dev/loop?
可 以看到/dev目錄下有許多l(xiāng)oop0、loop1等等的東西。這些是Linux的"loop設(shè)備"。當(dāng)設(shè)定好之后,loop設(shè)備可以模仿磁盤設(shè)備,比如 sda, hda那些,但實(shí)際上對(duì)該設(shè)備的訪問(wèn)被重定向到一個(gè)文件。要設(shè)定一個(gè)loop設(shè)備,要使用losetup命令。該命令需要用root權(quán)限運(yùn)行
代碼:#關(guān)聯(lián)loop文件到設(shè)備
losetup [loop設(shè)備] 文件名
#去除loop設(shè)備和文件的關(guān)聯(lián)
losetup [loop設(shè)備] -d
#找下一個(gè)沒(méi)有關(guān)聯(lián)上文件的loop設(shè)備
losetup -f
當(dāng)寫腳本的時(shí)候,losetup -f特別有用,因?yàn)樗鼤?huì)返回一個(gè)沒(méi)有使用的loop設(shè)備,然后你就可以把該設(shè)備名保存在一個(gè)變量里面,供后續(xù)命令使用。
到現(xiàn)在為止,情況和mount -o loop并沒(méi)有什么不同,盡管你立馬可以mount上那個(gè)剛剛關(guān)聯(lián)上文件的loop設(shè)備,但這等價(jià)于mount -o loop。但是,我們有kpartx。
如果你的系統(tǒng)還沒(méi)有安裝kpartx(默認(rèn)是不裝),先裝上。
代碼:sudo apt-get install kpartx
kpartx命令的作用,是讓Linux內(nèi)核讀取一個(gè)設(shè)備上的分區(qū)表,然后生成代表相應(yīng)分區(qū)的設(shè)備。當(dāng)然,它也需要root權(quán)限來(lái)運(yùn)行。具體用法:
代碼:#列出設(shè)備上的分區(qū)和刷新后的設(shè)備名
kpartx [設(shè)備]
#刷新分區(qū)表和生成設(shè)備
kpartx [設(shè)備] -a
#刪除指定設(shè)備上的所有分區(qū)設(shè)備
kpartx [設(shè)備] -d
對(duì)于loop設(shè)備,kpartx命令可以生成/dev/mapper/loop0p1這樣格式的分區(qū)設(shè)備。
這樣,有了kpartx命令,就可以用mount命令加載映像文件里面的各個(gè)分區(qū)了。
這樣就完成了Linux物理主機(jī)Host訪問(wèn)虛擬機(jī)(KVM)的硬盤鏡像。
【編輯推薦】