Ubuntu如何挂载虚拟机硬盘文件,具体怎么做?

在Ubuntu中挂载虚拟机硬盘文件的核心方法是使用qemu-nbd将vhd/vdi/qcow2格式的磁盘镜像挂载为块设备,再通过mount命令访问其中的分区,整个过程无需启动虚拟机,适合用于数据恢复、批量修改和迁移场景。

准备工作:确认格式与安装必要组件

先把虚拟机硬盘文件从宿主机拷贝到Ubuntu上,放在一个可读写的目录中,挂载前务必确认镜像文件格式,因为不同虚拟化平台生成的磁盘文件后缀不同,处理方式也有差异。

3ubuntu硬盘挂载
加载中
3ubuntu硬盘挂载

常见虚拟机磁盘格式包括:

  • raw:最原始的镜像格式,就是一个完整的二进制文件,兼容性最好。
  • qcow2:QEMU/KVM默认格式,支持快照、压缩和写时复制。
  • vdi:VirtualBox默认格式。
  • vmdk:VMware Workstation和ESXi常用格式。
  • vhd/vhdx:Hyper-V和Virtual PC使用。

挂载前需要具备root权限,并且安装qemu-utils和nbd内核模块,如果系统没有这些工具,执行以下命令安装:

sudo apt update
sudo apt install qemu-utils nbd-client

安装完成后,检查当前内核是否支持nbd模块:

modprobe nbd

如果提示模块不存在,可能需要安装linux-modules-extra包,例如Ubuntu 22.04 LTS可以执行sudo apt install linux-modules-extra-$(uname -r)。

行业共识认为,qemu-nbd是处理qcow2和raw格式最稳定的开源方案,它通过内核级网络块设备协议将镜像文件暴露为/dev/nbdX设备。

使用qemu-nbd挂载raw和qcow2镜像

这是最通用的挂载方法,适用于KVM、QEMU和部分VirtualBox导出的raw镜像,如果镜像文件是qcow2格式,需要先加载nbd模块并指定最大分区数量,否则内核只能看到整个磁盘而看不到内部的分区表。

步骤如下:

加载nbd模块并允许4个分区被识别:

sudo modprobe nbd max_part=4

将qcow2镜像连接到nbd设备:

sudo qemu-nbd --connect=/dev/nbd0 /path/to/your-disk.qcow2

查看分区信息:

sudo fdisk -l /dev/nbd0

输出结果会显示类似/dev/nbd0p1、/dev/nbd0p2的分区节点,如果镜像只有一个分区且没有分区表(例如裸文件系统),则直接使用/dev/nbd0。

挂载目标分区到本地目录:

sudo mkdir -p /mnt/vmdisk
sudo mount /dev/nbd0p1 /mnt/vmdisk

此时进入/mnt/vmdisk即可查看和修改虚拟机磁盘中的文件,对于raw格式,步骤完全相同,唯一的区别是raw镜像不需要额外的格式转换,qemu-nbd同样可以处理。

挂载完成后必须执行断开操作,否则nbd设备会一直占用镜像文件,导致虚拟机无法正常启动:

Ubuntu如何挂载虚拟机硬盘文件,具体怎么做?

sudo umount /mnt/vmdisk
sudo qemu-nbd --disconnect /dev/nbd0

挂载VHD和VDI文件的关键差异

vhd和vdi虽然也是磁盘镜像,但qemu-nbd直接支持它们,不需要转换格式,不过需要注意,vhd格式分为固定大小和动态扩展两种,动态扩展的vhd挂载时如果宿主机的磁盘空间不足,可能导致写入失败。

操作流程与qcow2一致,只是把--connect的参数换成vhd或vdi文件路径,例如挂载VirtualBox的vdi文件:

sudo qemu-nbd --connect=/dev/nbd1 /path/to/virtualbox-disk.vdi

然后同样执行fdisk查看分区,挂载到目录。

一个常见坑点:VirtualBox创建的vdi文件默认包含一个有MBR分区表的整盘镜像,如果你的虚拟机只创建了一个分区,那么/dev/nbd1p1就是根分区,如果虚拟机使用LVM逻辑卷,还需要额外处理,此时先挂载/dev/nbd1p1(通常是/boot分区),然后通过vgscan和vgchange -ay激活卷组,再挂载逻辑卷。

国内一些从业者在处理VirtualBox的vdi文件时,常会遇到“挂载后分区读取失败”的问题,业内专家指出这多半是因为vdi镜像存在快照分支,而qemu-nbd只能访问当前活跃分支,检查方法是在VirtualBox中删除所有快照后再导出镜像。

直接挂载vmdk和vhdx的替代方案

vmdk需要区分是完整镜像还是拆分镜像,拆分后的vmdk(多个小文件)不能直接挂载,需要用vmware-vdiskmanager合并,或者用qemu-img转换成qcow2再挂载,完整单文件的vmdk可以尝试用qemu-nbd处理,但由于VMware的格式私有特性,转换后的兼容性往往更好。

对于Hyper-V的vhdx,Ubuntu 22.04及以上版本的内核已支持直接挂载,但更稳妥的方式是先用qemu-img转换为raw:

sudo qemu-img convert -p -O raw /path/to/windows.vhdx /path/to/windows.raw

转换时间取决于镜像大小,一般50GB的vhdx需要5到10分钟,转换成raw的好处是所有工具都能直接识别,坏处是文件变大,无法节省空间。

如果只是想读取文件而不需要写入,使用glusterfs或libguestfs是更安全的选择,尤其当你在排查虚拟机无法启动的问题时,不写回原始镜像可以减少二次损坏的风险。

只读挂载与恢复数据

对于仅需拷贝文件或排查故障的场景,强烈建议使用只读方式挂载,mount命令加-o ro参数即可:

sudo mount -o ro /dev/nbd0p1 /mnt/vmdisk

另一种避免加载内核模块的方法是使用libguestfs的guestfish工具,它通过用户态模拟方式读取镜像,不需要root权限,也不占用nbd设备,安装libguestfs-tools后,可以这样列出镜像内容:

sudo virt-ls /path/to/disk.qcow2 /

或者直接使用guestmount挂载:

sudo guestmount -a /path/to/disk.qcow2 -i /mnt/vmdisk

Ubuntu如何挂载虚拟机硬盘文件,具体怎么做?

guestmount的优势在于支持LVM和复杂分区表,缺点是需要libvirt后台运行,在处理大镜像时速度比qemu-nbd慢。

关于恢复误删文件的场景,如果虚拟机文件系统受损,先用fsck检查分区:

sudo fsck /dev/nbd0p1

注意,只读挂载时运行fsck毫无意义,必须在可写挂载状态下执行,但这一步有风险,建议先将整个镜像复制一份再操作,避免数据雪上加霜。

挂载后的文件访问与权限问题

挂载完成后,如果看到Permission denied或者目录空白,可执行如下排查:

  • 确认虚拟器内部的用户UID与宿主机不同,使用ls -n查看数字UID,然后通过chown或sudo访问。
  • 虚拟机启用了SELinux(Fedora系)或AppArmor(Ubuntu系)时,安全上下文可能在挂载后表现为奇怪的文件隐藏行为,此时直接跳过文件管理器,用find /mnt/vmdisk -type f验证存在性。
  • 使用vfat或exFAT文件系统时,挂载需要指定uid和gid参数,
sudo mount -o uid=1000,gid=1000 /dev/nbd0p1 /mnt/vmdisk

常见问题排查

nbd设备已被占用无法连接

如果执行qemu-nbd时提示/dev/nbd0 is already in use,用lsblk检查哪些nbd设备活动,确认无人使用后,运行sudo qemu-nbd --disconnect /dev/nbd0强制释放,如果仍不行,重启宿主机是最简单的解决方案。

挂载后看不到任何分区

原因可能是镜像中没有分区表,或者分区类型在Linux中不可识别,先用fdisk -l /dev/nbd0查看,如果显示“disk doesn’t contain a valid partition table”,说明整个镜像就是一个文件系统,直接挂载/dev/nbd0。

支持文件系统类型汇总

文件系统 Linux默认支持 挂载命令
ext4 是 直接mount
xfs 是 直接mount
btrfs 是 直接mount
NTFS 需安装ntfs-3g mount -t ntfs3
FAT32 是 mount -t vfat

Ubuntu 22.04及以上默认内核驱动支持ntfs3,但如果遇到写入失败,安装ntfs-3g替代:

sudo apt install ntfs-3g
sudo mount -t ntfs-3g /dev/nbd0p1 /mnt/vmdisk

挂载完成后的安全检查

卸载操作务必按顺序执行,避免缓存未刷写导致数据损坏:

  1. 结束所有正在访问挂载目录的进程,例如sync命令。
  2. 卸载分区:sudo umount /mnt/vmdisk。
  3. 断开nbd设备:sudo qemu-nbd --disconnect /dev/nbd0。
  4. 如果启用了LVM,执行vgchange -an关闭卷组。

最后检查dmesg输出有没有I/O错误,如果没有,可以安全地关闭宿主机或删除镜像文件。

Ubuntu如何挂载虚拟机硬盘文件,具体怎么做?

内存与性能调优

挂载大型虚拟机磁盘(200GB以上)时,mount过程可能较慢,因为内核需要读取整个分区表,此时可以使用losetup配合分区偏移手动挂载,但操作复杂,不推荐新手使用。

一个更实用的技巧是只挂载虚拟机的数据盘而不是系统盘,系统盘往往包含大量日志和临时文件,挂载时容易触发文件系统日志回放,拖慢速度,单独挂载数据盘可以直接访问业务文件,这也是运维人员处理“虚拟机磁盘文件挂载后卡住”问题时的首选思路。

结合虚拟化平台的选择建议

如果你只是临时访问KVM虚拟机磁盘,qemu-nbd是最直接的工具,如果是ESXi迁移出来的vmdk,建议先用qemu-img转换为qcow2,这样在Ubuntu上后续操作更顺手,反过来,如果想把Linux磁盘文件复制到VMware虚拟机里,也是先转vmdk,而不要用qemu-nbd直接挂载后copy文件夹,因为这种拷贝会丢失权限和稀疏文件属性。

价格和成本方面,无论使用qemu-nbd还是libguestfs,都是完全免费的开源解决方案,不需要为虚拟化平台额外支付许可费。

关于在Ubuntu不同版本上的差异

Ubuntu 20.04 LTS和22.04 LTS在挂载方式上没有本质区别,但22.04默认内核支持ntfs3,而20.04只支持ntfs-3g,Ubuntu 24.04 LTS进一步增强了qemu-nbd对vhdx的支持,不过官方文档仍建议复杂格式走转换路线。

如果使用Ubuntu Server版,不要忘记服务器版本默认不带图形界面,所有操作都在终端完成,上面的命令已经覆盖了全部步骤,不需要额外安装任何GUI工具。

虚拟机硬盘挂载的核心结论不变:先确认格式,再选工具,优先只读挂载,操作完成后务必安全断开,按照这套流程处理绝大多数虚拟化平台的磁盘镜像都没有问题,在逻辑卷、LVM或RAID分区等复杂场景下,放慢节奏,分步检查,再执行写入操作,能最大程度避免数据丢失。

常见问题解答

挂载虚拟机磁盘文件时需要关闭虚拟机吗?

需要,虚拟机运行时正在使用磁盘镜像文件,强行挂载会破坏文件系统一致性,导致分区读取失败或数据损坏,正确的做法是先关闭虚拟机,或者至少对虚拟机做热快照后挂载快照文件,而不是直接操作运行中的镜像。

qcow2格式的镜像能否直接挂载到Ubuntu目录?

可以,通过qemu-nbd连接后再mount,就能让qcow2镜像像普通硬盘一样访问,前提是Ubuntu内核加载了nbd模块,并且镜像文件所在分区有足够空间容纳写入数据,如果镜像内部的分区是NTFS,记得先安装ntfs-3g驱动。

为什么挂载vdi文件后无法读取分区内容?

最常见的原因是vdi文件包含动态扩容区域,而qemu-nbd对动态vdi的支持不完全顺利,建议先用VirtualBox的克隆功能把vdi导出为qcow2,再尝试挂载,另一个可能的原因是虚拟机内部使用了LVM逻辑卷,需要先激活卷组才能看到逻辑卷设备。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://idctop.com/article/626805.html

赞 (0)
VMware虚拟机突然黑屏怎么办,如何恢复显示?
上一篇 2026年9月6日 03:59
虚拟机开启设置在哪找,如何开启虚拟机设置?
下一篇 2026年9月6日 04:00

相关推荐

  • 服务器租按量付费实例如何计费,价格是多少?

    服务器租用按量付费模式,以其灵活性和低成本优势,成为应对突发流量和短期项目的首选,但付费实例的选择和计费细节才是决定成本的关键,服务器租按量付费怎么收费?按量付费是云服务器租赁的一种计费模式,你只需为实际使用的资源付费,无需提前预付,计费通常按秒级或小时级结算,账单周期为一天或一小时,付费实例是这种模式下的具体……

    2026年8月3日
    400
  • Z-Blog在宝塔面板如何设置404?宝塔面板设置404错误页教程

    返回首页“`Apache环境下的替代方案如果你的Z-Blog运行在Apache环境下,配置逻辑略有不同,Apache使用.htaccess文件来处理重写规则和错误页面,修改.htaccess文件在网站根目录下,找到.htaccess文件,如果没有,可以手动创建,在文件中添加以下代码:ErrorDocument……

    2026年6月19日
    2710
  • 华为云服务器如何创建和安装IIS?,怎么操作?

    在华为云服务器上安装IIS,核心就是通过服务器管理器添加角色,几步操作就能搭建好网站环境,整个过程并不复杂,华为云服务器安装IIS的前期准备在动手操作之前,需要对云服务器本身做一些基础配置,这部分直接决定后续安装是否顺利,尤其对新手来说,选对镜像和网络策略能省去不少麻烦,选择Windows Server镜像购买……

    2026年8月1日
    500
  • WordPress插件在哪个文件夹?WordPress插件存储位置

    WordPress插件默认存储在网站根目录下的wp-content/plugins文件夹中,这是所有官方和第三方插件的统一存储位置,对于刚接触WordPress建站的朋友来说,找到插件的“家”往往是解决故障、备份数据或进行迁移的第一步,很多新手在后台找不到插件管理入口,或者在服务器文件管理器里面对满屏的文件感到……

    2026年6月22日
    1700
  • Access数据库怎么改成SQL?Access转SQL Server详细步骤

    Access数据库改SQL的核心在于将本地JET/ACE引擎的私有语法转换为标准T-SQL或MySQL语法,重点解决数据类型映射、日期函数差异及连接查询语法的兼容性问题,通常通过ODBC桥接或代码重构实现平滑迁移,将Access从本地文件型数据库迁移到服务器型SQL数据库,是许多中小企业在业务扩展期的必经之路……

    2026年7月3日
    1500
  • access数据库like和in怎么用,access模糊查询in语句写法

    在Access数据库中,LIKE用于处理模糊匹配和模式搜索,而IN用于精确匹配列表中的多个固定值,两者在性能优化和数据筛选场景上有着本质的区别,很多开发者在编写查询语句时,常常纠结于该用哪个操作符,这不仅仅是语法选择的问题,更关乎数据库引擎如何高效地检索数据,Access作为微软经典的桌面级数据库,虽然不如SQ……

    2026年7月1日
    1300
  • 广州DDos高防ip原理是什么?广州DDos高防ip如何防御攻击

    广州DDoS高防IP的核心运作机制在于“引流”与“清洗”,即通过DNS解析变更,将用户原本直接暴露在公网的源站IP隐藏在后端,利用高防节点作为“盾牌”承接所有恶意流量,在清洗中心完成流量过滤后,再将纯净的业务流量回源到源站,从而确保业务在超大流量攻击下依然稳定可用,这种防御架构不仅解决了传统防火墙性能瓶颈的问题……

    2026年3月31日
    9000
  • 广州DDOS多少钱?广州DDOS防御价格贵不贵

    广州DDOS防护服务的市场价格差异巨大,核心费用并非由单一因素决定,而是取决于防御能力大小、线路质量以及清洗机制的先进程度,企业若想获得高性价比的防护方案,必须跳出“唯价格论”的误区,转而关注业务连续性与安全投入的平衡,选择具备真实清洗能力的正规服务商, 广州DDOS多少钱?价格体系的深度拆解在广州网络安全市场……

    2026年4月1日
    9900
  • 广州60g高防dns解析多少钱?广州高防DNS解析价格贵吗

    广州60g高防dns解析的价格通常在每月数千元至万元区间浮动,具体费用取决于防御模式、带宽质量以及服务商品牌溢价,企业不应仅以低价作为选择标准,防御的实时性和解析的稳定性才是决定业务生死的成本核心,高防DNS解析并非单一产品,而是集成了智能解析、流量清洗与CDN加速的综合解决方案,其价值在于保障业务在极端攻击下……

    2026年4月1日
    9700
  • 二级域名如何申请?,申请条件和流程是什么?

    申请二级域名并不复杂,核心流程是:在域名管理后台添加解析记录,将二级域名指向服务器IP或CNAME,再根据服务器环境配置站点,若服务器在中国大陆则需完成备案, 整个过程通常不需要额外付费,但有几个容易踩坑的细节,下面按步骤拆解,二级域名是什么?先搞清这几个概念在动手之前,先明确什么是二级域名,以 blog.ex……

    2026年9月4日
    600

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注