VirtualBox上のLinuxのイメージファイルから、WSL2へデータを移行する方法です。
経緯
WSL2がSlow Ringに入ったので、そろそろVirtualBoxから移行しようかと思ったのですが、WSL2がHyper-Vサブセットを使っているため、VirtualBoxを動かしながらデータを移行することはできないようです。
そこでWSL2でVirtualBoxのイメージファイルを直接マウントして読み出せばいいのではないかと思ってやってみたら、できました。
RAW形式への変換
VirtualBoxの標準のVDI形式ではマウントできません。下記のようにWindows上でVBoxManageコマンドで変換します。
未使用部分も含めたファイルになるのでディスクを喰います。
"\Program Files\Oracle\VirtualBox\VBoxManage.exe" clonehd --format RAW "C:\Users\ユーザ名\VirtualBox VMs\Fedora 29\Fedora 29.vdi" Desktop\virtualbox.img
LVMイメージのマウント
VirtualBox上のLinuxでパーティションを直接マウントしていた場合は、mount時にoffset=を指定する程度で済むのですが、LVMを使っていた場合は、WSLでもLVM経由で読む必要があります。
まずWSL2の/etc/lvm/lvm.confのuse_lvmetad = 1をuse_lvmetad = 0に書き換えます(必須かどうかわかりませんが、書き換えないとwarningが出ます)。
その上でWSL2で下記の手順でマウントします。デバイスファイルはLV名によって異なります。
losetup /dev/loop0 /mnt/c/Users/ユーザ名/Desktop/virtualbox.img
kpartx -a /dev/loop0
vgscan --mknodes
vgchange -ay
lvscan
mkdir /mnt/vb
mount -o ro /dev/fedora/home /mnt/vb
--mknodesがないとデバイスファイルができないところが要注意です。