仮想ディスクが肥大化してディスク容量が枯渇したので解消してみた

2022.07.08

はじめに

アノテーションの髙嶋です。

私はWindows上にWSL2+Dockerを使用して開発環境を構築しています。

用途に応じた環境をそれぞれ準備しているため、新しくコンテナ環境を作っては消してを繰り返しています。

必要になる仮想ディスクの領域はOSが自動的に拡張してくれますが、不要になった領域を自動的に削除はしてくれないようです。 今回は仮想ディスクにより、ローカルディスクの容量が枯渇してしまったので、その解消手順を記述します。

前提条件

今回実行した環境は下記になります。

OS : Windows 10 Pro (21H1)
WSL2 : Ubuntu-20.04

今回の手順ではHyper-Vの機能を使用するため、Pro用の手順になります。

仮想ディスクの圧縮

実行前の状態

実行前のローカルディスクの容量と仮想ディスクの容量です。

仮想ディスクのファイルは下記のパスに格納されています。

C:\Users\(ユーザー)\AppData\Local\Docker\wsl\data

仮想ディスクで70GB近く使用されていました。 ローカルディスクの残容量もほとんど無く、表示が真っ赤です。。

手順の流れ

手順のイメージとしては下記になります。

  • 仮想ディスク(Docker)内から不要なデータを削除する。
  • 仮想ディスクを最適化する。

操作手順

それでは実際にやっていきます。

  1. Dockerのダッシュボードから、不要なコンテナ/イメージを削除します。

  2. ビルドキャッシュを削除します。

    1. docker system dfを実行するとDockerで使用されている容量が確認できます。私の環境ではキャッシュで20GB使用されていました。(キャプチャ取り忘れた)
    2. docker builder pruneを実行してキャッシュを削除します。
      削除実行後に再度容量を確認すると、0GBになっていました。
  3. Dockerの仮想ディスクを使用するアプリケーションを停止します。
    ※念のためWSLも停止しました。

  4. 仮想ディスクを最適化するためのツールをインストールします。
    「プログラムと機能」→「Windowsの機能の有効化または無効化」より、下記を有効化します。
    ※両方必要(どちらか片方だけだと、コマンド実行時にエラーになります)
    インストール後、OSの再起動が求められたので再起動します。

  5. 仮想ディスクの最適化を実行します。

    1. PowerShellを管理者権限で起動(右クリック→管理者として実行)し、仮想ディスクが格納されているフォルダへ移動します。
      cd C:\Users\(ユーザー)\AppData\Local\Docker\wsl\data

    2. Optimize-VHD -Path .\ext4.vhdxを実行します。仮想ディスクの圧縮が開始されるので処理が終わるのを待ちます。 ※コマンドの詳細についてはこちらをご確認ください。

実行結果確認

実行後のディスク容量です。
無事、仮想ディスクのサイズが減り、ローカルディスクの空き容量が増えました!

(参考)エラーメモ

参考として、今回の手順を実行する際に起きたエラーをいくつか貼っておきます。

  • PowerShellを管理者権限で起動していない場合
  • 仮想ディスクを使用しているサービスを停止していない場合
  • Hyper-Vがインストールされていない場合

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。「らしく働く、らしく生きる」のスローガンを掲げ、様々な背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。少しでもご興味あれば、アノテーション株式会社WEBサイトをご覧ください。