天天看点

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

继续阅读