このガイドでは、WSL 2 を使用してインストールされた Linux ディストリビューションで使用されるディスク領域を管理する方法について説明します。
- VHD で使用可能なディスク領域の量を確認する方法
- VHD のサイズを拡張する方法
- エラーが発生した場合に VHD を修復する方法
- インストールされている Linux ディストリビューションの .vhdx ファイルとディスク パスを見つける方法
Windows Subsystem for Linux (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 Df
コマンドを使用して、WSL 2 でインストールされている Linux ディストリビューションの VHD で使用可能なディスク領域の量を確認します。
使用可能なディスク領域を確認するには、PowerShell コマンド ラインを開き、次のコマンドを入力します (<distribution-name>
を実際の配布名に置き換えます)。
wsl.exe --system -d <distribution-name> df -h /mnt/wslg/distro
このコマンドが機能しない場合は、wsl --update
コマンドを使用して WSL のストア バージョンにアップグレードするか、wsl df -h /
してみてください。
出力には次のものが含まれます。
- ファイルシステムの: VHD ファイル システムの識別子
- サイズ: ディスクの合計サイズ (VHD に割り当てられた領域の最大容量)
- 使用分: VHD で現在使用されている領域の量
- 可用性: VHD に残っている領域の量 (割り当てられたサイズから使用した量を差し引いた量)
- 使用%: 残りのディスク領域の割合 (使用済み/割り当て済みサイズ)
- にマウントされた: ディスクがマウントされているディレクトリ パス
VHD に割り当てられている使用可能なディスク領域に近い場合、またはディスク領域が残っていないためにエラーが既に発生している場合は、Linux ディストリビューションに関連付けられている VHD に割り当てられているディスク領域の最大容量を拡張する手順については、次のセクションを参照してください。 WSL によって VHD に割り当てられたディスク領域の量は、実際の Windows デバイス上のディスク領域の量がそれより小さい場合でも、常に既定の最大容量 (最新バージョンの WSL では 1 TB) が表示されます。 WSL では、使用する際にサイズが拡大する VHD がマウントされるため、Linux ディストリビューションでは、割り当てられた最大サイズが 1 TB に拡大する可能性があります。
WSL 2 仮想ハード ディスクのサイズを拡張する方法
Linux ディストリビューションの VHD サイズを、既定の最大 1 TB の割り当てディスク領域を超えて拡張するには、wsl --manage
コマンドを使用するか、以下の手動の手順に従います。 (以前の WSL リリースの最大既定値は 512 GB または 256 GB に設定できます)。
wsl --manage
を使用して VHD サイズを拡張する
wsl --manage
コマンドは、WSL リリース 2.5 以降でのみ使用できます。
仮想ディスク上の割り当て済み領域のサイズを変更するには:
コマンド
wsl.exe --shutdown
を使用して、すべての WSL インスタンスを終了するwsl --manage <distribution name> --resize <memory string>
を実行します。 サポートされているメモリ文字列は、<Memory Value>B/M/MB/G/GB/T/TB
形式です。 現在、10 進値はサポートされていません (例:2.5TB
)。
出力は次のようになります。
e2fsck 1.46.5 (30-Dec-2021)
Pass 1: Checking inodes, blocks, and sizes
resize2fs 1.46.5 (30-Dec-2021)
The operation completed successfully.
この Linux ディストリビューションの仮想ドライブ (ext4.vhdx) が新しいサイズに正常に拡張されました。
手動での拡張
手動の手順を使用して Linux ディストリビューションの VHD サイズを拡張するには:
コマンドを使用してすべての WSL インスタンスを終了します:
wsl.exe --shutdown
マシンにインストールされている Linux ディストリビューションに関連付けられている ext4.vhdx ファイルにディレクトリ パスをコピーします。 ヘルプについては、「Linux ディストリビューションの vhdx ファイルとディスク パスを見つける方法」を参照してください。
管理者特権で Windows コマンド プロンプトを開き、次のように入力して diskpart コマンド インタープリターを開きます。
diskpart
これで、
DISKPART>
プロンプトが表示されます。 次のコマンドを入力し、<pathToVHD>
を Linux ディストリビューションに関連付けられているext4.vhdx
ファイルへのディレクトリ パスに置き換えます (手順 2 でコピー)。Select vdisk file="<pathToVHD>"
VHD が割り当てられている現在の最大サイズを表す、仮想サイズなど、この仮想ディスクに関連付けられている詳細を表示します。
detail vdisk
仮想サイズ をメガバイトに変換する必要があります。 たとえば、仮想サイズ 512 GBの場合、これは 512000 MBと等しくなります。 入力する新しい値は、この元の値より大きくする必要があります。 512 GB から 1024 GB の仮想サイズを 2 倍にするには、1024000 MB で値を入力します。 仮想ディスクのサイズを小さくするプロセスははるかに複雑であるため、実際に必要以上の値を入力しないように注意してください。
Windows コマンド プロンプト
DISKPART>
プロンプトを使用して、この Linux ディストリビューションに割り当てる新しい最大サイズの値を入力します。expand vdisk maximum=<sizeInMegaBytes>
DISKPART>
プロンプトを終了します。exit
この Linux ディストリビューションを起動します。 (WSL 2 で実行されていることを確認します。これは、
wsl.exe -l -v
コマンドを使用して確認できます。WSL 1 はサポートされていません)。WSL ディストリビューション コマンド ラインからこれらのコマンドを実行することで、このディストリビューションのファイル システム サイズを拡張できることを WSL に認識させる。 このメッセージは、最初の mount コマンドに対する応答として表示される場合があります: "/dev: none already mounted on /dev"。このメッセージは無視しても問題ありません。
sudo mount -t devtmpfs none /dev mount | grep ext4
このエントリの名前をコピーします。
/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 ツールまたはエディターを使用して、AppData
フォルダー内にある WSL 関連ファイルを変更、移動、またはアクセスしないことをお勧めします。 これを行うと、Linux ディストリビューションが破損する可能性があります。 Windows から Linux ファイルにアクセスする場合は、\\wsl$\<distribution-name>\
パスを使用してアクセスできます。 WSL ディストリビューションを開き、「explorer.exe .
」と入力して、そのフォルダーを表示します。 詳細については、ブログ記事「Windowsから Linux ファイルにアクセスする」を参照してください。
VHD マウント エラーを修復する方法
"ディストリビューション ディスクのマウント" に関連するエラーが発生した場合は、突然のシャットダウンまたは停電が原因で発生し、データ損失を回避するために Linux ディストリビューション VHD が読み取り専用 に切り替えられる可能性があります。 次の手順に従って、e2fsck
Linux コマンドを使用してディストリビューションを修復および復元できます。
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) を知りましょう。
- サイズ: ボリュームの合計サイズ。
- 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
コマンドを使用して、次の手順でディスクを再マウントできます。
管理者特権のコマンド プロンプトで PowerShell を開き、コマンドを入力して、すべての WSL ディストリビューションをシャットダウンします。
wsl.exe --shutdown
mount コマンドを入力し、
<path-to-ext4.vhdx>
をディストリビューションの .vhdx ファイルへのパスに置き換えます。 このファイルの検索については、「Linux ディストリビューションの VHD ファイルとディスク パスを見つける方法」を参照してください。wsl.exe --mount <path-to-ext4.vhdx> --vhd --bare
PowerShell の
wsl.exe lsblk
コマンドを使用して、ディストリビューションのブロック デバイス名 (sd[a-z]) を識別し、次のコマンドを入力してディスクを修復します (<device>
を "sdc" のような正しいブロック デバイス名に置き換えます)。e2fsck
コマンドは、ext4 ファイル システム (WSL と共にインストールされているディストリビューションで使用される種類) でエラーをチェックし、それに応じて修復します。wsl.exe sudo e2fsck -f /dev/<device>
手記
Linux ディストリビューションが 1 つしかインストールされていない場合は、"ext file in use" エラーが発生する可能性があり、を実行するには、追加のディストリビューション wsl.exe lsblk
必要があります。 修復が完了したら、ディストリビューションをアンインストールできます。 さらに、コマンド Wsl/Service/CreateInstance/MountVhd/HCS/ERROR_SHARING_VIOLATION
の実行中にエラー wsl.exe sudo e2fsck -f /dev/sdc
を回避するために、Windows 上の Docker Desktop を閉じる必要がある場合があります。
修復が完了したら、次のように入力して 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
ファイルへのパスです。
Windows Subsystem for Linux