使用 qemu-nbd
需要 nbd 内核模块,有趣的是 WSL2 没有提供, apt-cache search linux-headers-$(uname -r)
也是啥也没有,只好手动编译。
uname -r 找到自己的版本,去 https://github.com/microsoft/WSL2-Linux-Kernel 找 Release Tag
$ uname -r
5.10.16.3-microsoft-standard-WSL2
依赖包:
$ sudo apt-get install build-essential bison libelf-dev libncurses-dev
编译安装:
$ unzip WSL2-Linux-Kernel-linux-msft-wsl-5.10.16.3.zip
$ cd WSL2-Linux-Kernel-linux-msft-wsl-5.10.16.3
$ cp Microsoft/config-wsl .config
$ make menuconfig
找到 Device Drivers
下的 Block devices
下的 Network block device support
选中为 built-in 。
$ make -j $(expr $(nproc) - 1)
……省略输出
ZOFFSET arch/x86/boot/zoffset.h
OBJCOPY arch/x86/boot/vmlinux.bin
AS arch/x86/boot/header.o
LD arch/x86/boot/setup.elf
OBJCOPY arch/x86/boot/setup.bin
BUILD arch/x86/boot/bzImage
Kernel: arch/x86/boot/bzImage is ready (#3)
最后会生成一个 bzImage ,将其拷贝出来,假设放在 C:\Users\weilinfox\bzImage
(其中 weilinfox
是假设的用户名)。
建立 C:\Users\weilinfox\.wslconfig
,加入(注意双反斜杠):
[wsl2]
kernel=C:\\Users\\weilinfox\\bzImage
进入 powershell 运行:
wsl --shutdown
重新启动 WSL2 即可。 ls /dev
应该就可以看到 nbd 设备了。
参考:https://unix.stackexchange.com/questions/594470/wsl-2-does-not-have-lib-modules
by SDUST weilinfox