WSL ディスク領域を管理する方法

このガイドでは、WSL 2 を使用してインストールされた Linux ディストリビューションで使用されるディスク領域を管理する方法について説明します。

Linux 用 Windows サブシステム (WSL 2) では、仮想化プラットフォームを使用してホスト Windows オペレーティング システムと共に Linux ディストリビューションをインストールし、インストールする各 Linux ディストリビューションのファイルを格納する仮想ハード ディスク (VHD) を作成します。 これらの VHD は ext4 ファイル システムの種類 を使用し、Windows ハード ドライブでは ext4.vhdx ファイルとして表されます。

WSL 2 では、ストレージのニーズに合わせてこれらの VHD ファイルのサイズが自動的に変更されます。 既定では、WSL 2 で使用される各 VHD ファイルには、最初に最大 1 TB のディスク領域が割り当てられます ( WSL リリース 0.58.0 より前では、この既定値は 512 GB の最大とそれ以前の最大 256 GB に設定されていました)。

Linux ファイルに必要なストレージ領域がこの最大サイズを超えると、ディスク領域が不足していることを示すエラーが表示されます。 このエラーを解決するには、 WSL 2 仮想ハード ディスクのサイズを拡張する方法に関する以下のガイダンスに従ってください。

使用可能なディスク領域を確認する方法

LINUX コマンドを使用して、WSL 2 と共にインストールされた Linux ディストリビューションの VHD で使用可能なディスク領域の量を Df 確認します。

使用可能なディスク領域を確認するには、PowerShell コマンド ラインを開き、次のコマンドを入力します (実際のディストリビューション名に置き換えます <distribution-name> )。

wsl.exe --system -d <distribution-name> df -h /mnt/wslg/distro

出力には次のものが含まれます。

  • ファイルシステム: VHD ファイル システムの識別子
  • サイズ: ディスクの合計サイズ (VHD に割り当てられた最大領域)
  • 使用済み: VHD で現在使用されている領域の量
  • 可用性: VHD に残っている領域の量 (割り当てられたサイズから使用量を差し引いた値)
  • Use%: 残りのディスク領域の割合 (使用済み/割り当て済みサイズ)
  • マウント先: ディスクがマウントされているディレクトリ パス

VHD に割り当てられている使用可能なディスク領域に近い場合、またはディスク領域が残っていないために既にエラーが発生している場合は、Linux ディストリビューションに関連付けられている VHD に割り当てられているディスク領域の最大容量を拡張する手順については、次のセクションを参照してください。 WSL によって VHD に割り当てられたディスク領域の量は、実際の Windows デバイス上のディスク領域の量がそれより小さい場合でも、常に既定の最大容量 (最新バージョンの WSL では 1 TB) が表示されます。 WSL では、使用する際にサイズが拡大する VHD がマウントされるため、Linux ディストリビューションでは、割り当てられた最大サイズである 1 TB まで拡大できることがわかります。 

WSL 2 仮想ハード ディスクのサイズを拡張する方法

Linux ディストリビューションの VHD サイズを、割り当てられたディスク領域の 既定の最大容量である 1 TB を 超えて拡張するには、次の手順に従います。 (まだ更新されていない以前の WSL リリースの場合、この最大既定値は 512 GB または 256 GB に設定できます)。

  1. 次のコマンドを使用して、すべての WSL インスタンスを終了します: wsl.exe --shutdown

  2. マシンにインストールされている Linux ディストリビューションに関連付けられている ext4.vhdx ファイルへのディレクトリ パスをコピーします。 ヘルプについては、「 Linux ディストリビューションの vhdx ファイルとディスク パスを見つける方法」を参照してください

  3. 管理者特権で Windows コマンド プロンプトを開き、次のように入力して diskpart コマンド インタープリターを開きます。

    diskpart
    
  4. プロンプトが表示 DISKPART> されます。 次のコマンドを入力し、 を Linux ディストリビューションに関連付けられているファイルへのext4.vhdxディレクトリ パスに置き換えます <pathToVHD> (手順 2 でコピー)。

    Select vdisk file="<pathToVHD>"
    
  5. VHD が割り当てられている現在の最大サイズを表す仮想 サイズなど、この仮想ディスクに関連付けられている詳細を表示します。

    detail vdisk
    
  6. 仮想サイズをメガバイトに変換する必要があります。 たとえば、 仮想サイズが 512 GB の場合は、これを 512000 に変換します。 入力する新しい値は、この元の値より大きくする必要があります。 たとえば、512 GB から 1024 GB の仮想サイズを 2 倍にするには、MB に変換し、 値 1024000 を入力します。 仮想ディスクのサイズを小さくするプロセスははるかに複雑であるため、実際に必要以上の値を入力しないように注意してください。

  7. Windows コマンド プロンプト DISKPART> を使用して、この Linux ディストリビューションに割り当てる新しい最大サイズの値を入力します。

    expand vdisk maximum=<sizeInMegaBytes>
    
  8. プロンプトを終了します DISKPART>

    exit
    
  9. この Linux ディストリビューションを起動します。 (WSL 2 で実行されていることを確認します。これを確認するには、 コマンドを使用します。 wsl.exe -l -vWSL 1 はサポートされていません)。

  10. WSL ディストリビューションのコマンド ラインからこれらのコマンドを実行することで、このディストリビューションのファイル システム サイズを拡張できることを WSL に認識させる。 最初の mount コマンドへの応答として、"/dev: none already mounted on /dev" というメッセージが表示されることがあります。このメッセージは無視しても問題ありません。

    sudo mount -t devtmpfs none /dev
    mount | grep ext4
    
  11. /dev/sdX のようなこのエントリの名前をコピーします (X は他の文字を表します)。 次の例では、X の値は b です。

   sudo resize2fs /dev/sdb <sizeInMegabytes>M

上記の例を使用して、vhd サイズを 2048000 に変更したので、コマンドは になります。 sudo resize2fs /dev/sdb 2048000M

注意

resize2fs のインストールが必要になる場合があります。 その場合は、sudo apt install resize2fs というコマンドを使用してこれをインストールできます。

出力は次のようになります。

resize2fs 1.44.1 (24-Mar-2021)
Filesystem at /dev/sdb is mounted on /; on-line resizing required
old_desc_blocks = 32, new_desc_blocks = 38
The filesystem on /dev/sdb is now 78643200 (4k) blocks long.

この Linux ディストリビューションの仮想ドライブ (ext4.vhdx) が新しいサイズに正常に拡張されました。

重要

Windows ツールまたはエディターを使用して、フォルダー内にある WSL 関連ファイルを AppData 変更、移動、またはアクセスしないことをお勧めします。 そうすると、Linux ディストリビューションが破損する可能性があります。 Windows から Linux ファイルにアクセスする場合は、パス \\wsl$\<distribution-name>\ を使用することで実現できます。 WSL ディストリビューションを開き、「explorer.exe .」と入力してそのフォルダーを表示します。 詳細については、次のブログ投稿を参照してください: 「Windows から Linux ファイルにアクセスする」。

VHD マウント エラーを修復する方法

"ディストリビューション ディスクのマウント" に関連するエラーが発生した場合は、突然のシャットダウンまたは停電が原因で、データ損失を回避するために Linux ディストリビューション VHD が 読み取り専用 に切り替えられる可能性があります。 次の手順に従って、Linux コマンドを e2fsck 使用してディストリビューションを修復および復元できます。

lsblk コマンドを使用してブロック デバイス名を識別する

WSL 2 は Linux ディストリビューションをインストールするときに、独自のファイル システムを使用して仮想ハード ディスク (VHD) としてディストリビューションをマウントします。 Linux は、これらのハード ドライブを "ブロック デバイス" と呼び、 コマンドを使用してそれらに関する情報を lsblk 表示できます。

WSL 2 で現在使用されているブロック デバイスの名前を見つけるには、ディストリビューションを開き、 コマンドを入力します。 lsblk (または PowerShell を開き、 コマンドを入力します。 wsl.exe lsblk出力は次のようになります。

NAME MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
sda    8:0    0 363.1M  1 disk
sdb    8:16   0     8G  0 disk [SWAP]
sdc    8:32   0   1.5T  0 disk
sdd    8:48   0     1T  0 disk /mnt/wslg/distro

ブロック デバイスに関する情報には、次のものが含まれます。

  • NAME: デバイスに割り当てられる名前は sd[a-z] になります。これは SCSI ディスクを参照し、使用されている各ディスクに文字を指定します。 sda は常にシステム分散です。
  • MAJ:MIN: Linux カーネルがデバイスの種類を表す最初の番号を持つデバイスを内部的に識別するために使用される数値を表します (8 は、Small Computer System Interface/SCSI ディスクに使用されます)。
  • RM: デバイスがリムーバブル (1) かどうか (0) をお知らせください。
  • SIZE: ボリュームの合計サイズ。
  • RO: デバイスが読み取り専用かどうか (1) か、そうでないか (0) をお知らせください。
  • TYPE: デバイスの種類 (この場合はディスク) を参照します。
  • MOUNTPOINTS: ブロック デバイスが配置されているファイル システム上の現在のディレクトリを参照します (SWAP は事前構成済みの非アクティブ メモリ用であるため、マウントポイントはありません)。

読み取り専用フォールバック エラー

Linux ディストリビューションを開くときに WSL で "マウント エラー" が発生した場合、ディストリビューションはフォールバックとして読み取り専用として設定される可能性があります。 その場合、起動時にディストリビューションに次のエラーが表示されることがあります。

An error occurred mounting the distribution disk, it was mounted read-only as a fallback.

ディストリビューションが読み取り専用として開始されると、ファイルシステムに書き込もうとすると、次のようなエラーで失敗します。

$ touch file
touch: cannot touch 'file': Read-only file system

WSL でディスク マウント エラーを修復し、再び使用可能/書き込み可能な状態に復元するには、 コマンドを wsl.exe --mount 使用して、次の手順でディスクを再マウントできます。

  1. PowerShell を開いてコマンドを入力して、すべての WSL ディストリビューションをシャットダウンします。

    wsl.exe --shutdown
    
  2. 管理者として PowerShell を開き (管理者特権のコマンド プロンプトで) mount コマンドを入力し、 をディストリビューションの .vhdx ファイルへのパスに置き換えます <path-to-ext4.vhdx> 。 このファイルの検索については、「 Linux ディストリビューションの VHD ファイルとディスク パスを見つける方法」を参照してください

    wsl.exe --mount <path-to-ext4.vhdx> --vhd --bare
    
  3. PowerShell の コマンドを wsl.exe lsblk 使用して、ディストリビューションのブロック デバイス名 (sd[a-z]) を識別し、次のコマンドを入力してディスクを修復します ("sdc" のような正しいブロック デバイス名に置き換えます <device> )。 コマンドは e2fsck 、ext4 ファイル システム (WSL と共にインストールされたディストリビューションで使用される型) でエラーをチェックし、それに応じて修復します。

    wsl.exe sudo e2fsck -f /dev/<device>
    
  4. 修復が完了したら、次のように入力して PowerShell でディスクのマウントを解除します。

    wsl.exe --unmount
    

警告

コマンドを使用すると、 sudo mount -o remount,rw / 読み取り専用ディストリビューションを使用可能/書き込み可能な状態に戻すことができますが、すべての変更はメモリ内に存在するため、ディストリビューションの再起動時に失われます。 上記の手順を使用して、代わりにディスクをマウントして修復することをお勧めします。

Linux ディストリビューションの .vhdx ファイルとディスク パスを見つける方法

Linux ディストリビューションの .vhdx ファイルとディレクトリ パスを見つけるには、PowerShell を開き、次のスクリプトを使用して、 を実際のディストリビューション名に置き換えます <distribution-name>

(Get-ChildItem -Path HKCU:\Software\Microsoft\Windows\CurrentVersion\Lxss | Where-Object { $_.GetValue("DistributionName") -eq '<distribution-name>' }).GetValue("BasePath") + "\ext4.vhdx"

結果には、 のような %LOCALAPPDATA%\Packages\<PackageFamilyName>\LocalState\<disk>.vhdxパスが表示されます。 次に例を示します。

C:\Users\User\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\ext4.vhdx

これは、一覧表示した Linux ディストリビューションに ext4.vhdx 関連付けられているファイルへのパスです。