如何将WSL2虚拟机镜像挂载至Linux

需求

  • qemu ( qemu-nbd )
  • WSL2虚拟硬盘文件(一般为.vmdk)

方法

qemu 安装比较繁琐,不同发行版也偏向不同的安装方法,这里不赘述。

利用 qemu-nbd 工具将虚拟机镜像挂载到Linux上,nbd是网络块设备(Network Block Device)的缩写,虚拟机硬盘本质上是块设备(block/raw)的集合。

本质上所有的虚拟机镜像都可以通过该工具挂载到Linux中,如果虚拟硬盘并非LVM且文件系统类型是Linux支持的类型(如ext4, ntfs)基本上不需要额外操作,若是LVM需要一些额外的操作。WSL2并非LVM且采用了(现代)Linux兼容性最高的ext4,故只需要几行命令即可。

首先,WSL2镜像一般在C:\Users\frnks\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\ext4.vhdx 路径,移动到Linux文件系统中进行操作。

接下来终端命令如下:

1
2
3
4
5
6
7
8
9
lsmod | grep nbd # 检查nbd模块是否开启
sudo modprobe nbd max_part=16 # 开启nbd模块

sudo qemu-nbd -r -c /dev/nbd1 ext4.vhdx # 将硬盘加载到网络块设备上
sudo mkdir /mnt/ubuntu # 先在/mnt下创建一个单独的文件夹
sudo mount /dev/nbd1 /mnt/ubuntu/ -o ro # 将网络块设备挂载到这个文件夹 只读模式能够防止意外损坏镜像

cd /mnt/ubuntu
ls

Pretty easy right? 又水了一篇文章(((

挂载了就得安全卸载:

1
2
3
fuser -k # 查看文件占用
sudo umount /mnt/ubuntu # 卸载
sudo qemu-nbd -d /dev/nbd1 # 断开nbd连接

参考

https://linux.die.net/man/8/mount

https://superuser.com/questions/915615/mount-vmware-disk-images-under-linux

https://zhuanlan.zhihu.com/p/50460919