Insider PreviewのWSL2で仮想ディスクイメージ(VHD/VHDX)をマウントする


ソース:

順番としては

  1. (仮想ディスクイメージがなければ)VHD/VHDXを新規作成する
  2. VHD/VHDXをWindowsにアタッチする
  3. WSLにブロックデバイスとして認識させる
  4. (未フォーマットの場合は)WSLでフォーマットする
  5. WSLでマウントする

となります。

Windows 10 ビルド20211以降では、3. 単体、または3.と5.を合わせて、wsl.exe --mount コマンドが使えます。

VHD/VHDXを新規作成する

GUI

「ディスクの管理」から「VHDの作成」

コマンドライン

> diskpart.exe
Microsoft DiskPart version 10.0.20270.1

Copyright (C) Microsoft Corporation.
On computer: xxxxxxxx

# 容量固定
DISKPART> create vdisk file="<VHDまたはVHDXファイルのパス>" maximum=<サイズ> type=fixed

# 容量可変
DISKPART> create vdisk file="<VHDまたはVHDXファイルのパス>" maximum=<サイズ> type=expandable

VHD/VHDXをWindowsにアタッチする

GUI

以下のどちらか好きなほうで。

  • VHD/VHDXファイルをダブルクリックする
  • 「ディスクの管理」から「VHDの接続」

コマンドライン

> diskpart.exe
Microsoft DiskPart version 10.0.20270.1

Copyright (C) Microsoft Corporation.
On computer: xxxxxxxx

DISKPART> select vdisk file="<VHDまたはVHDXファイルのパス>"
DISKPART> attach vdisk

WSLにブロックデバイスとして認識させる

まずは、仮想ディスクのDeviceIDを知るため、wmic.exe を実行します。

> wmic.exe diskdrive list brief
Caption                 DeviceID            Model                   Partitions  Size
Crucial_CT525MX300SSD4  \\.\PHYSICALDRIVE0  Crucial_CT525MX300SSD4  4           525110100480
Microsoft Virtual Disk  \\.\PHYSICALDRIVE1  Microsoft Virtual Disk  0           98703360

仮想ディスクのDeviceID(上の例では \\.\PHYSICALDRIVE1)がわかったら、それを引数に指定して、
管理者権限で wsl.exe --mountを実行します。
Windows 10 ビルド20211以降が必要です。

管理者権限
> wsl.exe --mount \\.\PHYSICALDRIVE1 --bare

WSLでフォーマットする

$ lsblk
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    8:0    0  256G  0 disk
sdb    8:16   0  100M  0 disk
sdc    8:32   0  256G  0 disk /

この例ではsdbが仮想ディスクです。(最初に作成したサイズで、マウントもされていないので)

$ sudo parted
GNU Parted 3.2
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) select /dev/sdb
Using /dev/sdb
(parted) mklabel gpt
(parted) mkpart <任意の名前> 0% 100%
(parted) quit
Information: You may need to update /etc/fstab.
$ lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  256G  0 disk
sdb      8:16   0  100M  0 disk
└─sdb1   8:17   0  100M  0 part
sdc      8:32   0  256G  0 disk /

$ sudo mkfs.ext4 /dev/sdb1
mke2fs 1.44.1 (24-Mar-2018)
/dev/sdb1 alignment is offset by 3072 bytes.
This may result in very poor performance, (re)-partitioning suggested.
Discarding device blocks: done
Creating filesystem with 102364 1k blocks and 25688 inodes
Filesystem UUID: abdf93e3-3f0f-4f58-9368-a9fce9f7cf08
Superblock backups stored on blocks:
        8193, 24577, 40961, 57345, 73729

Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

WSLでマウントする

$ sudo mkdir /mnt/vhd
$ sudo mount /dev/sdb1 /mnt/vhd

WSLに認識させたディスクを外す

> wsl.exe --unmount \\.\PHYSICALDRIVE1