linux直接挂载虚拟机磁盘镜像文件-阿里云开发者社区

开发者社区> 开发与运维> 正文

linux直接挂载虚拟机磁盘镜像文件

简介: 一、通过mount加上偏移 首先需要确认下镜像分区开始的偏移: [cce lang=”bash”] fdisk -l vm-xp-qa-new.img [/cce] 这个文件的输出为: Disk vm-xp-qa-new.img: 21.5 GB, 21474836480 bytes

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章