必须用losetup -fP将虚拟硬盘绑定为回环设备并解析分区表,生成/dev/loop0p1等子设备后,才能挂载指定分区;挂载点须为空目录,卸载时需先umount再losetup -d释放设备。

在Linux服务器或开发环境中,需要通过命令行将VHD/VHDX、ISO、IMG等虚拟硬盘文件当作块设备挂载,以便直接读取其中的分区结构、恢复数据或检查文件系统。这类操作不依赖图形界面,必须用losetup+mount组合完成,且不能跳过设备循环绑定环节。
将虚拟硬盘文件绑定为回环设备
虚拟硬盘文件(如disk.vhdx、backup.img)本身不是块设备,无法直接挂载。必须先用losetup将其关联到/dev/loopX设备节点,系统才承认它是可寻址的磁盘。
执行sudo losetup -fP disk.vhdx,系统自动分配首个空闲回环设备(如/dev/loop0),并解析其内部分区表(-P参数关键),生成/dev/loop0p1、/dev/loop0p2等子设备。
【必须加-P参数】否则losetup只创建/dev/loop0主设备,不会识别内部任何分区,后续挂载/dev/loop0p1会报“no such file or directory”。
验证是否成功:运行ls /dev/loop*p,应看到类似/dev/loop0p1的输出;再用sudo fdisk -l /dev/loop0确认分区列表是否完整显示。
挂载虚拟硬盘中的指定分区
方法一:按设备路径挂载(适用于已知分区格式)
执行sudo mount /dev/loop0p1 /mnt/vhd,把第一个分区挂到/mnt/vhd目录。若提示文件系统类型错误,需显式指定:sudo mount -t ntfs-3g /dev/loop0p1 /mnt/vhd。
方法二:按UUID挂载(推荐用于脚本或避免设备名漂移)
先查UUID:sudo blkid /dev/loop0p1,输出形如/dev/loop0p1: UUID="a1b2c3d4..." TYPE="ext4";再挂载:sudo mount UUID="a1b2c3d4..." /mnt/vhd。
注意:挂载点/mnt/vhd必须是空目录,否则原目录内容会被遮盖——这不是删除,但访问时不可见。
安全卸载并释放回环设备
第一步:卸载分区→执行sudo umount /mnt/vhd。
第二步:解除回环绑定→执行sudo losetup -d /dev/loop0。
第三步:验证清理→运行losetup -a,确认输出为空;再执行lsblk | grep loop,确保无loop设备残留。
若跳过第二步直接拔掉虚拟硬盘文件,下次再losetup -f可能复用同一loop设备,但旧分区信息仍残留在内核中,导致新挂载失败或读取到脏数据。

















