【Windows】リナックスの仮想ディスクが肥大化した時に不要な領域を圧縮して削る手順

【Windows】リナックスの仮想ディスクが肥大化した時に不要な領域を圧縮して削る手順
🛡️ 超解決

Windows環境でWSL2上のLinux仮想ディスクが肥大化し、PCのストレージを圧迫していませんか。Linux内部でファイルを削除しても、仮想ディスクのファイルサイズは自動的に減少しないため、不要な領域が残ったままになります。この記事では、肥大化したLinux仮想ディスクの不要な領域を効率的に圧縮し、ストレージを最適化する具体的な手順を解説します。

この手順を実行することで、仮想ディスクの物理的なサイズを削減し、PCの空き容量を回復できます。

【要点】WSL2の仮想ディスク肥大化を解消しストレージを最適化する手順

  • WSL2の完全な停止: 仮想ディスクの圧縮前に、WSL2のディストリビューションをすべて停止します。
  • 仮想ディスクの最適化: 圧縮効率を高めるため、仮想ディスク内部の不要領域を事前に最適化します。
  • DiskPartによる圧縮実行: Windowsに標準搭載されたDiskPartツールを使用して、仮想ディスクファイルを物理的に縮小します。

ADVERTISEMENT

リナックス仮想ディスクが肥大化する根本的な原因

Windows Subsystem for Linux 2 WSL2で利用されるLinux仮想ディスクは、ext4.vhdxという形式の仮想ハードディスクファイルです。この仮想ハードディスクは、一度使用したストレージ領域を自動的にOSへ返却する仕組みを持っていません。たとえば、Linux環境内で大きなファイルを削除しても、その削除された領域は仮想ディスク内部では「空き」としてマークされるだけで、物理的なファイルサイズは変わりません。

この動作により、実際のデータ使用量よりも、仮想ディスクファイルext4.vhdxのサイズが徐々に大きくなっていきます。最終的には、PCのストレージ容量を圧迫する原因となります。手動で圧縮操作を行うことで、この不要な領域をWindowsのストレージへ解放できます。

WSL2の仮想ディスクの特性

WSL2の仮想ディスクは、動的拡張VHDX形式という特性を持っています。これは、データが増えるにつれて仮想ディスクのサイズが自動的に拡張される仕組みです。しかし、データが減少しても自動的に縮小はされません。この片方向の動作が、ディスク肥大化の主な原因です。

仮想ディスク内部の空き領域は、Windowsから見るとまだ「使用中」として認識されます。そのため、明示的な圧縮コマンドを実行して、この空き領域を物理的に開放する必要があります。

お探しの解決策が見つからない場合は、こちらの「Windowsトラブル完全解決データベース」で他のエラー原因や解決策をチェックしてみてください。

WSL2リナックス仮想ディスクを効率的に圧縮する手順

ここでは、肥大化したWSL2のLinux仮想ディスクを圧縮し、ストレージ領域を解放する具体的な手順を解説します。Windows 11を基準に説明しますが、Windows 10でも同様の操作が可能です。

事前準備: WSL2の停止とディスクの最適化準備

  1. WSL2ディストリビューションを完全に停止する
    PowerShellまたはコマンドプロンプトを管理者として実行します。まず、現在実行中のWSL2ディストリビューションを確認します。
  2. 実行中のディストリビューションを確認する
    以下のコマンドを入力し、Enterキーを押します。
    wsl -l -v
    このコマンドで、実行中のディストリビューションとその状態を確認できます。
  3. すべてのWSL2ディストリビューションをシャットダウンする
    以下のコマンドを入力し、Enterキーを押します。
    wsl --shutdown
    このコマンドは、すべてのWSL2ディストリビューションと仮想マシンを停止させます。圧縮処理中にWSL2が稼働していると、エラーが発生する可能性があります。
  4. 仮想ディスクファイルのパスを確認する
    通常、WSL2の仮想ディスクファイル ext4.vhdx は、以下の場所に保存されています。
    %LOCALAPPDATA%\Packages\{ディストリビューション名}\LocalState\ext4.vhdx
    例: Ubuntuの場合、%LOCALAPPDATA%\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkq1pfnf3t\LocalState\ext4.vhdx
    このパスをメモ帳などにコピーしておきます。
  5. 仮想ディスク内部の最適化コマンドを実行する
    WSL2がシャットダウンされていることを確認後、管理者としてPowerShellを開き、以下のコマンドを実行します。
    diskpart
    DiskPartユーティリティが起動します。
    select vdisk file="C:\Users\あなたのユーザー名\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkq1pfnf3t\LocalState\ext4.vhdx"
    上記は例です。あなたの環境の正確なパスに置き換えてください。
    attach vdisk readonly
    compact vdisk
    このコマンドにより、仮想ディスク内部の空き領域が最適化され、圧縮効率が向上します。
  6. 仮想ディスクのデタッチを実行する
    最適化が完了したら、以下のコマンドで仮想ディスクをデタッチします。
    detach vdisk
    exit
    DiskPartユーティリティを終了します。

仮想ディスクファイルの圧縮実行

DiskPartコマンドはWindowsに標準搭載されているディスク管理ツールです。これを使用して仮想ディスクファイルを圧縮します。

  1. DiskPartを起動する
    PowerShellまたはコマンドプロンプトを管理者として再度実行し、diskpartと入力してEnterキーを押します。
  2. 仮想ディスクを選択する
    以下のコマンドを入力し、Enterキーを押します。パスは手順3で確認したものを正確に入力してください。
    select vdisk file="C:\Users\あなたのユーザー名\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkq1pfnf3t\LocalState\ext4.vhdx"
  3. 仮想ディスクを圧縮する
    以下のコマンドを入力し、Enterキーを押します。
    compact vdisk
    このコマンドにより、仮想ディスクファイル ext4.vhdx の物理的なサイズが縮小されます。圧縮には時間がかかる場合があります。
  4. DiskPartを終了する
    圧縮が完了したら、exitと入力してEnterキーを押し、DiskPartユーティリティを終了します。

圧縮後の確認とWSL2の再開

  1. ファイルエクスプローラーでサイズを確認する
    手順3で確認した仮想ディスクファイルの保存場所に移動し、ext4.vhdxファイルのサイズが縮小されていることを確認します。
  2. WSL2ディストリビューションを再開する
    スタートメニューからUbuntuなどのWSL2ディストリビューションを起動するか、PowerShellでwslと入力してEnterキーを押します。
    WSL2が正常に起動し、仮想ディスクが圧縮されていることを確認します。

ディスク圧縮時に遭遇しやすい問題と対処法

仮想ディスクの圧縮手順中に、いくつかの問題に遭遇する場合があります。ここでは、よくある失敗パターンとその対処法を解説します。

ディスク圧縮後もサイズが変わらない場合

圧縮コマンドを実行したにもかかわらず、ext4.vhdxファイルのサイズが期待通りに縮小されないことがあります。

原因は、WSL2が完全に停止していないか、仮想ディスク内部に圧縮可能な空き領域がほとんどないことが考えられます。WSL2のシャットダウンが不完全な場合、ファイルがロックされて圧縮できません。また、Linux内部で多くのデータを使用している場合、圧縮できる余地が少なくなります。

対処法として、まずPowerShellでwsl --shutdownコマンドを再度実行し、WSL2のすべてのプロセスが停止していることを確認します。次に、Linux環境内で不要なファイルを削除し、空き容量を増やしてから再度圧縮を試みます。

DiskPartコマンドでエラーが発生する場合

DiskPartのコマンド実行時に「仮想ディスクが見つかりません」や「アクセスが拒否されました」といったエラーメッセージが表示されることがあります。

原因は、PowerShellやコマンドプロンプトを管理者権限で実行していない、またはselect vdisk file=で指定した仮想ディスクファイルのパスが間違っている可能性があります。ファイルパスのタイプミスや、ファイルが存在しない場所を指定しているとエラーになります。

対処法として、PowerShellを必ず「管理者として実行」してください。また、仮想ディスクファイルのパスを再度確認し、正確に入力されているか確かめます。ファイルエクスプローラーで直接パスをコピーすると確実です。

圧縮に時間がかかりすぎる、または途中で止まる場合

compact vdiskコマンドの実行が非常に長く感じられたり、途中で処理が進まなくなることがあります。

原因は、仮想ディスクのサイズが非常に大きい場合や、PCのシステムリソースが不足していることが考えられます。特に、他の重いアプリケーションが同時に動作していると、圧縮処理に時間がかかります。

対処法として、圧縮を実行する前に、他の不要なアプリケーションやプロセスをすべて終了させます。PCの負荷を減らすことで、圧縮処理がスムーズに進む可能性があります。また、仮想ディスクのサイズによっては数十分から数時間かかることもあるため、十分な時間を確保して途中で中断しないようにしてください。

ADVERTISEMENT

WSL1とWSL2のディスク管理機能の違い

項目 WSL1 WSL2
ディスク形式 Windowsのファイルシステム上に直接展開 VHDX形式の仮想ディスクファイル ext4.vhdx を使用
ファイルの格納場所 WindowsのNTFSファイルシステム内 仮想ディスクファイル内にext4ファイルシステムとして格納
自動圧縮機能 WindowsのNTFS機能に依存。自動で領域を解放する 自動圧縮機能はない。手動での圧縮が必要
ディスク管理方法 Windowsのファイル管理ツールで直接操作 DiskPartなどの仮想ディスク管理ツールが必要
パフォーマンス Windowsファイルシステムとの連携は速いが、LinuxのファイルI/Oは遅い場合がある LinuxのファイルI/Oパフォーマンスは高いが、Windowsとの連携はネットワーク経由

まとめ

この記事で解説した手順により、肥大化したWSL2のLinux仮想ディスクを効果的に圧縮できました。不要なストレージ領域を解放し、PCの空き容量を回復できたことと思います。WSL2の仮想ディスクは自動で縮小しないため、定期的なメンテナンスが重要です。

今回習得したDiskPartとcompact vdiskコマンドは、他のVHDX形式の仮想ハードディスク管理にも応用できます。今後も同様の状況に遭遇した際に、この手順を活用して効率的なストレージ管理を行ってください。

💻
Windowsトラブル完全解決データベース 起動不能、更新の不具合、動作が重い、設定の消失など、Windows 10/11のあらゆるトラブル解決手順を網羅しています。

ADVERTISEMENT

この記事の監修者
✍️

超解決 第一編集部

疑問解決ポータル「超解決」の編集チーム。正確な検証と、現場視点での伝わりやすい解説を心がけています。