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字节。
因此,最终挂载的命令就是:
[cce lang=”bash”]
mount -o loop,offset=32256 -t ntfs vm-xp-qa-new.img /mnt/
[/cce]
这里指定了挂载分区的格式为ntfs,挂载偏移为32256字节。
然后就可以在/mnt目录中看见这个虚拟机磁盘镜像,直接修改里面的文件了。

二、通过映射成loop设备
首先获取最近一个可用的loop设备:
[cce lang=”bash”]
losetup -f –show vm-linux-qa-master.img
[/cce]
这里会输出一个loop设备,如果之前没有映射过,应该是/dev/loop0
然后生成对应的块设备:
[cce lang=”bash”]
kpartx -a /dev/loop0
[/cce]
执行之后,会在/dev/mapper/中多出一个loop0p1文件,也就是刚那个磁盘镜像的分区块文件了(对应硬盘的sda和sda1这样的关系)。
然后就可以直接将/dev/mapper/loop0p1文件mount到指定位置,就可以读写里面的文件了。
清理的时候,除了umount /dev/mapper/loop0p1这个文件的挂载点之外,还要清除loop0的使用:
[cce lang=”bash”]
kpartx -d /dev/loop0
losetup -d /dev/loop0
[/cce]

ps:在gentoo中,losetup应该已经在的,在sys-apps/util-linux这个包中;kpartx由sys-fs/multipath-tools这个包提供,直接emerge即可


转载自:https://coolex.info/blog/385.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值