技術的な話

WSL2 + DockerでCドライブ枯渇した話と簡単な回避方法

きっかけ

Windows使いの私はWSL2を導入してUbuntu+Dockerで開発しています。
普段使用しているノートPCはLet's Noteで昔自身でSSDに換装してます。
が、容量をケチったのと、容量が無いくせにパーティションを切っている都合上、Cドライブが100GB程しかない状況でした。

Let's Noteいいよ、Let's Note。
軽くてタフなのが魅力。
Macもたまに使用しますが、個人的にはLet's Noteの方がタフな気がしているので持ち歩き用に使用しています。中古で\40,000~\50,000程で売られています。
この話はまた今度。

Cドライブの状況と原因

元々の空き容量は20GB程でした。少ない。
それが気が付けば下記の画像のような状況に。
ディスク容量が少ないことでDocker ImageのPullが失敗するようになりました。

原因としてはWSL2のUbuntuとDockerのイメージやデータがCドライブ(デフォルト)上に存在するため、ImageのPullなどの作業しているといつの間にかディスク容量が圧迫されていく形になります。

Dドライブへの引っ越し vs パーティション容量を増やす

本来の解決方法は大きい容量のSSDを買ってくること
ケチらないで512GB位にすれば良かったと後悔。

今更容量の大きいSSDに変えるのは面倒なので以下の方法を検討しました。
今回はDドライブへの引っ越しにしました

Dドライブへの引っ越し

幸いなことにDドライブにはまだ容量に余裕があります。それでも60GB程ですが。
そこにお引越しすればまだ延命可能です。

引っ越しにはツールを使用するかWSLコマンドを実行すれば良さそうです。

パーティション容量を増やす

Dドライブに容量が多少残されているので、Dドライブの一部をCドライブに割り当てれば解消可能そうです。しかしCドライブのパーティションを増やすのは、Cドライブの横にDドライブがある都合上面倒です。以下画像のような状況です。
要はCドライブの右横にDドライブから作成した空き容量を配置する必要があります。

これはWindowsのディスク管理やdiskpartコマンドでは出来ないようです。
以下ではツールを使用して拡張しているみたいです。

https://www.diskpart.com/jp/windows-10/extend-volume-greyed-out-windows-10.html

加えてフラグメントが発生してディスクのパフォーマンスが落ちるかと思い今回はこの方法は諦めました

回避方法

今回はCドライブ⇒Dドライブに既存データの移動設定変更でDドライブのイメージを使用するように変更しました。
また今回は簡単に済ませられそうだったのでツールを使用しています。

ツールをダウンロード

https://github.com/DDoSolitary/LxRunOffline

タグから最新バージョンのLxRunOffline-vx.x.x-mingw.zipをダウンロードします。
※Windowsの場合

ダウンロードしたzipファイルを展開します。

解凍ツールは何でも良いです。
私は普段7zipっていうツールを使用しています。

https://sevenzip.osdn.jp/

Powershellを管理者権限で起動します。

Dドライブ上にフォルダを作成する。

今回はD:\wslというフォルダを作成しました。

# D driveに変更
PS> D:
# フォルダを作成
PS> mkdir wsl

作成したフォルダに対してPowershellから権限を与える。

# 作成したフォルダに権限を付与
PS> icacls D:\wsl /grant $env:USERNAME":(OI)(CI)(F)"

ダウンロード&解凍したツールのフォルダに移動します。

# C driveに変更(ツールをCドライブ上に解凍した場合)
PS> C:
# ツールのフォルダに移動
PS> cd C:\path\to\folder

wslコマンドでディストリビューションを確認。

# wslコマンドで確認
PS> wsl --list

私の環境はこのような形になっていました。

  • docker-desktop
  • docker-desktop-data
  • Ubuntu

これらを全て移動させます。

WSLマネージャーを一度停止させます。

PS > net stop LxssManager

ツールを使用して移動します。

下記の例はdocker-desktopを移動させた例です。
他も同じ要領で移動させます。
docker-desktop-dataは容量が大きい場合時間が掛かります。
私の場合は15GB程だったので5分程度掛かりました。

PS > .\LxRunOffline.exe move -n docker-desktop -d d:\wsl\docker-desktop

移動が完了しても特にメッセージは表示されないので、次のコマンド入力が可能になったら他のディストリビューションも移動させます。

移動が完了したら停止させたWSLマネージャーを起動します。

PS > net start LxssManager

上記でDドライブに移動した状態で動作します。
wslコマンドでエクスポートしてDドライブにインポートする方法もあるみたいですが、こちらの方が楽ですかね。このツールは内部でwslコマンドを起動させているのか…謎です。

-技術的な話
-, ,