天天看點

linux直接挂載虛拟機磁盤鏡像檔案

一、通過mount加上偏移

首先需要确認下鏡像分區開始的偏移:

[cce lang=”bash”]

fdisk -l vm-xp-qa-new.img

[/cce]

這個檔案的輸出為:

disk vm-xp-qa-new.img: 21.5 gb, 21474836480 bytes, 41943040 sectors units = 扇區 of 1 * 512 = 512 bytes sector size (logical/physical): 512 bytes / 512 bytes i/o size (minimum/optimal): 512 bytes / 512 bytes disk identifier: 0x4dcc4dcc 裝置 boot start end blocks id system vm-xp-qa-new.img1 * 63 41913584 20956761 7 hpfs/ntfs/exfat

從這裡可以看見,這個windows分區,是從第63個塊開始的,每個塊的大小是512位元組,最後得出的挂載偏移為32256位元組。

是以,最終挂載的指令就是:

mount -o loop,offset=32256 -t ntfs vm-xp-qa-new.img /mnt/

這裡指定了挂載分區的格式為ntfs,挂載偏移為32256位元組。

然後就可以在/mnt目錄中看見這個虛拟機磁盤鏡像,直接修改裡面的檔案了。

二、通過映射成loop裝置

首先擷取最近一個可用的loop裝置:

losetup -f –show vm-linux-qa-master.img

這裡會輸出一個loop裝置,如果之前沒有映射過,應該是/dev/loop0

然後生成對應的塊裝置:

kpartx -a /dev/loop0

執行之後,會在/dev/mapper/中多出一個loop0p1檔案,也就是剛那個磁盤鏡像的分區塊檔案了(對應硬碟的sda和sda1這樣的關系)。

然後就可以直接将/dev/mapper/loop0p1檔案mount到指定位置,就可以讀寫裡面的檔案了。

清理的時候,除了umount /dev/mapper/loop0p1這個檔案的挂載點之外,還要清除loop0的使用:

kpartx -d /dev/loop0

losetup -d /dev/loop0

ps:在gentoo中,losetup應該已經在的,在sys-apps/util-linux這個包中;kpartx由sys-fs/multipath-tools這個包提供,直接emerge即可

轉載自:https://coolex.info/blog/385.html

繼續閱讀