WSL ディスク拡張

WindowsにWSLをインストールすると、そのLinuxにはデフォルトで1TBの領域が割り当てられます。

今回、大きなディスク領域を必要とする作業を予定していて、Windows用のVMに3TBのディスクを割り当てましたが、WSLのUbuntuの領域としては1TBだけが割り当てられていました。この領域を拡張できることがわかったのでやってみました。

参考：

https://learn.microsoft.com/ja-jp/windows/wsl/disk-space


【作業前の状態】
 Linux Df コマンドを使用して、WSL 2 と共にインストールされた Linux ディストリビューションの VHD で使用可能なディスク領域の量を確認します。
 ```text:PowerShellにて
 PS C:\Users\user01> wsl.exe --system -d Ubuntu df -h /mnt/wslg/distro
 Filesystem      Size  Used Avail Use% Mounted on
 /dev/sdc       1007G   99G  857G  11% /mnt/wslg/distro
 ```
参考）WSL Ubuntuコマンドラインからの`df -h`出力
```
user01@DESKTOP-2RV6EAU:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
none             16G  4.0K   16G   1% /mnt/wsl
none            3.0T  230G  2.8T   8% /usr/lib/wsl/drivers
none             16G     0   16G   0% /usr/lib/modules
none             16G     0   16G   0% /usr/lib/modules/5.15.146.1-microsoft-standard-WSL2
/dev/sdc       1007G   99G  857G  11% /
none             16G  172K   16G   1% /mnt/wslg
none             16G     0   16G   0% /usr/lib/wsl/lib
rootfs           16G  1.9M   16G   1% /init
none             16G  792K   16G   1% /run
none             16G     0   16G   0% /run/lock
none             16G  168K   16G   1% /run/shm
tmpfs           4.0M     0  4.0M   0% /sys/fs/cgroup
none             16G   76K   16G   1% /mnt/wslg/versions.txt
none             16G   76K   16G   1% /mnt/wslg/doc
C:\             3.0T  230G  2.8T   8% /mnt/c
snapfuse        128K  128K     0 100% /snap/bare/5
snapfuse         74M   74M     0 100% /snap/core22/864
snapfuse         75M   75M     0 100% /snap/core22/1122
snapfuse         92M   92M     0 100% /snap/gtk-common-themes/1535
snapfuse        132M  132M     0 100% /snap/ubuntu-desktop-installer/1276
snapfuse        132M  132M     0 100% /snap/ubuntu-desktop-installer/1286
snapfuse         41M   41M     0 100% /snap/snapd/20290
snapfuse         40M   40M     0 100% /snap/snapd/21184
```

以下の手順で、Linux ディストリビューションの VHD サイズを、割り当てられたディスク領域の既定の最大容量である 1TB を超えて拡張することができます。

1. WSL インスタンスを終了します。
    ```text:PowerShellにて
    PS C:\Users\user01> wsl.exe --shutdown
    ```
2. Linux ディストリビューション(今回の例では`Ubuntu`)の .vhdx ファイルとディレクトリ パスを見つけます。
    ```text:PowerShellにて
    PS C:\Users\user01> (Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq 'Ubuntu' }).GetValue("BasePath") + "\ext4.vhdx"
    C:\Users\user01\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
    ```
3. Diskpart コマンド インタープリターを起動します。
    ```
    PS C:\Users\user01> diskpart
    ```

    ```text:別ウィンドウでDiskPartが起動
    Microsoft DiskPart バージョン 10.0.22621.1
    
    Copyright (C) Microsoft Corporation.
    コンピューター: DESKTOP-2RV6EAU

    DISKPART> 
    ```
4. 次のコマンドを入力し、ステップ2で取得したLinux ディストリビューションに関連付けられている ext4.vhdx ファイルへのディレクトリ パスを指定します。
    ```
    DISKPART> Select vdisk file="C:\Users\user01\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx"
    
    DiskPart により、仮想ディスク ファイルが選択されました。
    ```
5. VHD が割り当てられている現在の**最大サイズを表す仮想サイズ**など、この仮想ディスクに関連付けられている詳細を表示します
    ```
    DISKPART> detail vdisk
    
    デバイスの種類 ID: 0 (不明)
    ベンダー ID: {00000000-0000-0000-0000-000000000000} (不明)
    状態: 追加済み
    仮想サイズ: 1024 GB
    物理サイズ:  100 GB
    ファイル名: C:\Users\user01\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
    子: いいえ
    親ファイル名:
    関連付けられたディスク番号: 見つかりません。
    ```
6. 仮想サイズを拡張します。今回は最大サイズを2TB (2048000MB) に拡張する例です。＊サイズはメガバイト単位で指定します。その後、Diskpartを終了します。
    ```
    DISKPART> expand vdisk maximum=2048000
    
      100% 完了しました
    
    DiskPart により、仮想ディスク ファイルは正常に拡張されました。
    
    DISKPART> detail vdisk
    
    デバイスの種類 ID: 0 (不明)
    ベンダー ID: {00000000-0000-0000-0000-000000000000} (不明)
    状態: 追加済み
    仮想サイズ: 2000 GB
    物理サイズ:  100 GB
    ファイル名: C:\Users\user01\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx
    子: いいえ
    親ファイル名:
    関連付けられたディスク番号: 見つかりません。
    
    DISKPART> exit
    
    DiskPart を終了しています...
    PS C:\Users\user01>
    ```

7. このディストリビューションのファイル システムのサイズを拡張できることを WSL に認識させます。

    ```text:WSLコマンドラインにて
    user01@DESKTOP-2RV6EAU:~$ sudo mount -t devtmpfs none /dev
    mount | grep ext4
    [sudo] password for user01:
    mount: /dev: none already mounted on /mnt/wsl.
    /dev/sdc on / type ext4 (rw,relatime,discard,errors=remount-ro,data=ordered)
    /dev/sdc on /mnt/wslg/distro type ext4 (ro,relatime,discard,errors=remount-ro,data=ordered)
    /dev/sdc on /snap type ext4 (rw,relatime,discard,errors=remount-ro,data=ordered)
    
    user01@DESKTOP-2RV6EAU:~$ df -h
    Filesystem      Size  Used Avail Use% Mounted on
    none             16G  4.0K   16G   1% /mnt/wsl
    none            3.0T  230G  2.8T   8% /usr/lib/wsl/drivers
    none             16G     0   16G   0% /usr/lib/modules
    none             16G     0   16G   0% /usr/lib/modules/5.15.146.1-microsoft-standard-WSL2
    /dev/sdc       1007G   99G  857G  11% /
    none             16G   88K   16G   1% /mnt/wslg
    none             16G     0   16G   0% /usr/lib/wsl/lib
    rootfs           16G  1.9M   16G   1% /init
    none             16G  744K   16G   1% /run
    none             16G     0   16G   0% /run/lock
    none             16G  168K   16G   1% /run/shm
    tmpfs           4.0M     0  4.0M   0% /sys/fs/cgroup
    none             16G   76K   16G   1% /mnt/wslg/versions.txt
    none             16G   76K   16G   1% /mnt/wslg/doc
    C:\             3.0T  230G  2.8T   8% /mnt/c
    snapfuse         40M   40M     0 100% /snap/snapd/21184
    snapfuse        128K  128K     0 100% /snap/bare/5
    snapfuse         75M   75M     0 100% /snap/core22/1122
    snapfuse         41M   41M     0 100% /snap/snapd/20290
    snapfuse         92M   92M     0 100% /snap/gtk-common-themes/1535
    snapfuse        132M  132M     0 100% /snap/ubuntu-desktop-installer/1286
    snapfuse        132M  132M     0 100% /snap/ubuntu-desktop-installer/1276
    snapfuse         74M   74M     0 100% /snap/core22/864
    ```
8. resize2fsコマンドを使用して、この Linux ディストリビューションの仮想ドライブ (ext4.vhdx) を新しいサイズに拡張します。以下は `/dev/sdc` を2TBに拡張する例です。
    ```text:WSLコマンドラインにて
    user01@DESKTOP-2RV6EAU:~$ sudo resize2fs /dev/sdc 2048000M
    resize2fs 1.46.5 (30-Dec-2021)
    Filesystem at /dev/sdc is mounted on /; on-line resizing required
    old_desc_blocks = 128, new_desc_blocks = 250
    The filesystem on /dev/sdc is now 524288000 (4k) blocks long.
   ```

【作業後の状態】
```text:PowerShellにて
PS C:\Users\user01> wsl.exe --system -d Ubuntu df -h /mnt/wslg/distro
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdc        2.0T   99G  1.8T   6% /mnt/wslg/distro
```

参考）WSL Ubuntuコマンドラインからの`df -h`出力
 ``` 
user01@DESKTOP-2RV6EAU:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
none             16G  4.0K   16G   1% /mnt/wsl
none            3.0T  230G  2.8T   8% /usr/lib/wsl/drivers
none             16G     0   16G   0% /usr/lib/modules
none             16G     0   16G   0% /usr/lib/modules/5.15.146.1-microsoft-standard-WSL2
/dev/sdc        2.0T   99G  1.8T   6% /
none             16G   88K   16G   1% /mnt/wslg
none             16G     0   16G   0% /usr/lib/wsl/lib
rootfs           16G  1.9M   16G   1% /init
none             16G  744K   16G   1% /run
none             16G     0   16G   0% /run/lock
none             16G  168K   16G   1% /run/shm
tmpfs           4.0M     0  4.0M   0% /sys/fs/cgroup
none             16G   76K   16G   1% /mnt/wslg/versions.txt
none             16G   76K   16G   1% /mnt/wslg/doc
C:\             3.0T  230G  2.8T   8% /mnt/c
snapfuse         40M   40M     0 100% /snap/snapd/21184
snapfuse        128K  128K     0 100% /snap/bare/5
snapfuse         75M   75M     0 100% /snap/core22/1122
snapfuse         41M   41M     0 100% /snap/snapd/20290
snapfuse         92M   92M     0 100% /snap/gtk-common-themes/1535
snapfuse        132M  132M     0 100% /snap/ubuntu-desktop-installer/1286
snapfuse        132M  132M     0 100% /snap/ubuntu-desktop-installer/1276
snapfuse         74M   74M     0 100% /snap/core22/864
```