一、通過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