Skip to content
blog.sunasand.dev
Go back

ディスクを食いつぶして起動しなくなったWSLを復旧する

状況

復旧手順

一切責任は取らないので自己責任で。

無理やりシャットダウン

taskkill /f /im wslservice.exe

VHDの修復

.vhdxファイルが破損しているのを修復する。

以下に手順が書いてあるのでそのとおりに進めるとよいとAIが言っていた。 可能なら事前にVHDをバックアップしておくといい。

具体的な内容はリンク先を見てもらうとして、注意点だけ書いておく。

不要ファイルの削除

修復ができたら起動できるのかもしれないが、先に別distroから不要ファイルを削除しておくのが安全な気がする。

mkdir -p /mnt/rescue
mount /dev/<device name> /mnt/rescue

rm <不要ファイル>

fstrim -v /mnt/rescue
umount /mnt/rescue

あとはwsl --unmountしてwsl --shutdownする。

VHD最適化

VHDは中身を消しても基本的には縮小しない。 sparse VHDというのもあるらしいがunsafeらしい。

HyperV PowerShellモジュールがある場合はOptimize-VHDコマンドが使えるはず。 ない場合もdiskpartを使う方法がある。

Optimize-VHD <path> -Mode Full

ここまでやったら無事起動できた。

対策

ディスクがいっぱいになるのは仕方がないとして、WSLが起動できなくなったりVHDが破損するのは面倒なので対策を考えている。

どれも実行はしていないがアイディアだけ置いておく。

VHDの大きさを制限する

特に設定をいじっていなかったので、WSL内部から見た仮想ディスクサイズは1TBになっていた。 なんとなくだが、仮想ディスクには空きがあるのに物理ディスクに空きがないという状態は、仮想ディスクに空きがない状態よりよくない気がする。

あと、VHD内に空き容量があればVHD外には空き容量はなくていいとなんとなく思い込んでいたが、WSL起動時の処理とかがあるのでそんなことはないとAIに言われた。 言われてみればそのような気がしてくる。

というわけでVHDの大きさを200GBぐらいに制限するのがよさそうだが、すでにあるVHDに制限をつけるのは面倒そう。

別VHDを使う

収集スクリプトで集めたデータが80GBを超えていて、今後も増えていくことを考えると250GB SSDに置き続けるのは現実的ではない。

容量が余っているHDDにVHDを作成してmountするのがよさそう。



Previous Post
ブログをAstroに移行する
Next Post
OpenCode Goの感想と料金体系の罠について