WSL2のLinuxにディスクを追加する方法

Windows 11でWSL2のLinuxにデータ保存用などのディスク(VHDX)を追加してマウントする方法。


対応

  1. 追加するディスク用の仮想ディスクイメージを作成する(ホスト側)。
    ※本例ではPath\To\new-disk.vhdxに最大サイズ100GBの可変サイズのディスクイメージファイル(スパースファイル)が作成されます。

    New-VHD -Path "Path\To\new-disk.vhdx" -SizeBytes 100GB -Dynamic
  2. 作成したディスクイメージをホストにマウントする(ホスト側)。

    Mount-VHD -Path "Path\To\new-disk.vhdx"
  3. Linuxを起動する(ホスト側)。
    DistroNameUbuntuなどお使いの環境のLinuxディストリビューション名です。

    wsl -d DistroName
  4. ディスク情報を取得する(ホスト側)。

    diskpart

    DISKPART>プロンプトが表示されたら以下のコマンドを実行する。

    LIST DISK

    以下のようにホストのディスク情報が表示される。
    ※本例ではディスク 2が追加したディスクです。

      ディスク      状態           サイズ   空き   ダイナ GPT
      ###                                          ミック
      ------------  -------------  -------  -------  ---  ---
      ディスク 0    オンライン           238 GB  1024 KB        *
      ディスク 1    オンライン           465 GB      0 B
      ディスク 2    オンライン           100 GB   100 GB

    ディスク番号が確認できたのでdiskpartを終了する。

    exit
  5. 作成したディスクを空のファイルシステムとしてマウントする(ホスト側)。
    ※デバイス名は¥¥.¥PhysicalDrive+手順4のディスク番号です。

    wsl --mount \\.\PhysicalDriveX --bare

    マウントが成功すると以下のメッセージが表示される。

    この操作を正しく終了しました。
  6. マウントされたディスクを確認する(Linux側)。

    sudo fdisk --list

    以下のようにマウントされたディスクの情報が表示される。
    ※デバイス名はsXXとしています。

    ・
    ・
    ・
    Disk /dev/sXX: 100 GiB, 107374182400 bytes, 209715200 sectors
    Disk model: Virtual Disk
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 4096 bytes
    I/O size (minimum/optimal): 4096 bytes / 4096 bytes
  7. 作成したディスクにパーティションを作成する(Linux側)。

    パーティション操作を誤るとデータ消失など思わぬ結果が生じる可能性があります。十分に確認して間違いのないようにご注意ください(At your own risk!)。

    sudo fdisk /dev/sXX
    Welcome to fdisk (util-linux 2.37.2).
    Changes will remain in memory only, until you decide to write them.
    Be careful before using the write command.
    
    Device does not contain a recognized partition table.
    Created a new DOS disklabel with disk identifier 0x2f5fb74c.
    
    Command (m for help):

    コマンドnで新規パーティションを作成を選択する。

    Command (m for help): n

    パーティション種別を聞いてくるのでEnter押下で既定のプライマリパーティションを選択する。

    Partition type
       p   primary (0 primary, 0 extended, 4 free)
       e   extended (container for logical partitions)
    Select (default p):

    パーティション番号を聞いてくるのでEnterで既定のパーティション1を作成する。

    Partition number (1-4, default 1):

    開始セクタ/終了セクタを聞いてくるのでEnterで既定のパーティション範囲を設定する。

    First sector (2048-209715199, default 2048):
    Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-209715199, default 209715199):
    
    Created a new partition 1 of type 'Linux' and of size 100 GiB.
    
    Command (m for help):

    wコマンドで作成したパーティションをディスクに書き込む。

    Command (m for help): w

    書き込みが完了すると以下のメッセージが表示される。

    The partition table has been altered.
    Calling ioctl() to re-read partition table.
    Syncing disks.
  8. 作成したパーティションを確認する(Linux側)。

    lsblk

    sXX1パーティションが作成されているのが確認できます。

    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
    sda      8:0    0 388.4M  1 disk
    sdb      8:16   0     2G  0 disk [SWAP]
    sdc      8:32   0   256G  0 disk /var/lib/docker
                                     /snap
                                     /mnt/wslg/distro
                                     /
    sXX      8:48   0   100G  0 disk
    └─sXX1   8:49   0   100G  0 part
  9. 作成したディスクをフォーマットする(Linux側)。
    ※本例ではパーティション1をext4形式でフォーマットします。

    sudo mkfs.ext4 /dev/sXX1

    パーティションが作成されると以下のように表示されます。

    mke2fs 1.46.5 (30-Dec-2021)
    Discarding device blocks: done
    Creating filesystem with 26214144 4k blocks and 6553600 inodes
    Filesystem UUID: 16009e86-2d55-4365-9185-6ed3d71a6e09
    Superblock backups stored on blocks:
            32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
            4096000, 7962624, 11239424, 20480000, 23887872
    
    Allocating group tables: done
    Writing inode tables: done
    Creating journal (131072 blocks): done
    Writing superblocks and filesystem accounting information: done
  10. Linuxをシャットダウンする(ホスト側)。

    wsl --terminate DistroName
  11. Linuxにパーティション1をマウントする(ホスト側)。

    wsl --mount \\.\PhysicalDriveX --partition 1 --type ext4
    ディスクは '/mnt/wsl/PhysicalDriveXp1' として正常にマウントされました。
    注: /etc/wsl.conf で automount.root 設定を変更した場合、場所は異なります。
    ディスクのマウントを解除してデタッチするには、'wsl.exe --unmount \\.\PhysicalDriveX' を実行してください。
  12. WSL2のLinuxを起動する(ホスト側)。

    wsl -d DistroName
  13. マウントされたディスクを確認する(Linux側)。

    df -h

    /mnt/wsl/PhysicalDriveXp1にマウントされていることが確認できます(デバイス名は前手順のものと変わる模様)。

    ・
    ・
    ・
    /dev/sXX1        98G   24K   93G   1% /mnt/wsl/PhysicalDriveXp1
    ・
    ・
    ・

ここまでの手順でLinux側に追加したディスクイメージがマウントできているのが確認できるかと思います。

注意点として

  • WSLをシャットダウンした場合は手順11のwsl --mountを実行する必要がある。
  • ホストを再起動した場合は、手順2のMount-VHDを実行する必要がある。

がありますが、毎回上記を設定するのも面倒ですので、WSL起動スクリプトを作成しておくと良いかもしれません。


参考ウェブサイトなど


以上です。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする