
想在 WSL 中访问 VMware 的 VMDK 虚拟磁盘核心思路并不复杂先加载 NBD 内核模块再借助 qemu-nbd 将 VMDK 连接为块设备最后挂载对应分区即可。具体操作步骤如下动手操作之前先来对比一下两种常见挂载方式的差异对比维度wsl --mountqemu-nbd支持格式仅支持物理磁盘和 VHD 文件支持 VMDK、VHD、VHDX、QCOW2 等多种虚拟磁盘格式适用场景挂载物理磁盘或 VHD 虚拟磁盘挂载 VMware 的 VMDK 虚拟磁盘尤其是需要访问虚拟机内部文件时操作复杂度命令简单一条命令即可完成挂载需要先加载 NBD 模块、连接块设备、再挂载分区步骤较多稳定性官方支持稳定性较高社区通用做法配合 NBD 内核模块使用稳定性良好权限要求需要 WSL 2 和管理员权限需要 WSL 2 和管理员权限为什么推荐 qemu-nbd 方法原因在于 wsl --mount 目前并不支持直接挂载 VMDK 文件而 qemu-nbd 能够灵活地将 VMDK 连接为块设备并挂载分区是社区中访问 VMware 虚拟磁盘最通用的做法。️ 操作步骤安装必要工具在 WSL Ubuntu 中安装 qemu-utils。sudo apt update sudo apt install qemu-utils加载 NBD 模块sudo modprobe nbd max_part8连接 VMDK 到 NBD 设备sudo qemu-nbd -c /dev/nbd0 /path/to/your.vmdk⚠️ 如果 VMDK 包含多个快照文件需要先用 VMware 的 vmware-vdiskmanager.exe 将其合并为一个文件再进行挂载。查看分区sudo lsblk /dev/nbd0记下分区名通常是 /dev/nbd0p1。挂载分区sudo mkdir /mnt/vmwaresudo mount /dev/nbd0p1 /mnt/vmware完成后就能在 /mnt/vmware 里访问文件了。用完记得卸载并断开连接sudo umount /mnt/vmwaresudo qemu-nbd -d /dev/nbd0⚠️ 注意事项挂载前请正常关闭 VMware 虚拟机避免文件系统不一致导致数据损坏。官方推荐微软官方文档指出wsl --mount 命令目前不支持直接挂载 VMDK 文件只支持物理磁盘和 VHD 文件。所以上面的 qemu-nbd 方法是目前社区里比较通用的做法。WSL 版本wsl --mount 和 NBD 挂载都需要 WSL 2且需要管理员权限运行终端。为了方便日常使用可以把挂载和卸载封装成两个 Bash 函数自动完成参数校验、分区检测和错误处理#!/usr/bin/env bash # 挂载 VMDK 虚拟磁盘 # 用法mount_vmdk vmdk文件路径 [挂载点] mount_vmdk() { local vmdk$1 local mount_point${2:-/mnt/vmware} # 参数校验必须传入 VMDK 文件路径 if [[ -z $vmdk ]]; then echo 错误请指定 VMDK 文件路径 return 1 fi #检查 VMDK 文件是否存在 if [[ ! -f $vmdk ]]; then echo 错误VMDK 文件不存在$vmdk return 1 fi #加载 NBD 内核模块max_part8 允许识别最多 8 个分区 sudo modprobe nbd max_part8 #将 VMDK 连接为 NBD 块设备 sudo qemu-nbd -c /dev/nbd0 $vmdk #等待设备就绪 sleep 1 #自动检测第一个分区通常是 /dev/nbd0p1 local partition partition$(lsblk -rno NAME /dev/nbd0 | grep ^nbd0p | head -n1) if [[ -z $partition ]]; then echo 错误未检测到分区 sudo qemu-nbd -d /dev/nbd0 return 1 fi #创建挂载点并挂载分区 sudo mkdir -p $mount_point sudo mount /dev/$partition $mount_point echo 已挂载 $vmdk 到 $mount_point } #卸载 VMDK 虚拟磁盘 #用法umount_vmdk [挂载点] umount_vmdk() { local mount_point${1:-/mnt/vmware} #卸载分区 sudo umount $mount_point #断开 NBD 连接 sudo qemu-nbd -d /dev/nbd0 echo 已卸载并断开连接 }使用时直接调用即可mount_vmdk /path/to/your.vmdk # 访问 /mnt/vmware 下的文件... umount_vmdk