貸与PCのCドライブが少なくて辛い
開発PCでCドライブの空きが無くて困ったことはないでしょうか。
開発ではいろいろなものがCドライブに保存されるので、結構容量を使いますよね。
Docker、NodeやPythonの環境、WSL、Android関連など・・・
しかもスワップでも容量を食うので、もうかなり厳しい。
私の現在の業務での開発メインPCの状況はこうです。
- Cドライブ:256GB
- Dドライブ:1TB
256GBしかないので、もうタヒぞ。OSだけで35〜50GBくらい使うというのに・・・
デフォルトではCドライブばかり使われるので、Dドライブに上手く逃がすしかありません。
というか別ストレージがあるだけマシな状況ですね。SESではよくゴミPCを与えられていたので、本当にイライラしていたこともあります。
権限によってできる・できないもありますしねえ。
まずシステム側がCドライブを食い尽くさないようにする
仮想メモリの設定を変更
容量の大きいファイルを探すと「pagefile.sys」というファイルが見つかる場合があります。
これはWindowsが仮想メモリとして使うシステムファイルです。
ストレージの一部を仮想メモリとして割り当てているのですが、上限が設定されていないと、空き容量がある分だけ肥大化していく可能性があります。
そこで、これの上限を設定します。
なお、勝手に削除するとOSの挙動が不安定になるので注意してください。
業務PCのキャプチャは撮れないので別PCのものですが、以下の手順で変更できます。
- 「システムのプロパティ」にて「詳細設定」タブ>パフォーマンス>「設定」

- 「パフォーマンスオプション」にて「詳細設定」タブ>「仮想メモリ」>「変更」

- 「すべてのドライブのページングファイルのサイズを自動的に管理する」のチェックを外し、カスタムサイズを入力する。
下部に表示される推奨値以上を入力しないと、動作が不安定になる可能性があります。RAMが足りないから仮想メモリを割り当てるわけで、単純に使わないようにすると当然動作に影響が出ます。 - OKを押下して設定を完了する。※再起動後に有効になります。
ページファイルごとDドライブへ移す
上限を決めるだけでなく、ページファイル自体をDドライブへ追い出すこともできます。
同じ「仮想メモリ」画面で、以下のように設定します。
- ドライブ一覧で「C:」を選択し、「ページングファイルなし」(または小さめのカスタムサイズ)を選んで「設定」
- ドライブ一覧で「D:」を選択し、「システム管理サイズ」を選んで「設定」
- OKを押下し、再起動する
Cドライブのページファイルをなくしたり小さくしすぎたりすると、「エラー発生時にメモリダンプが作成されない可能性がある」といった警告が出ます。ブルースクリーン時の原因調査にダンプが必要な場合は、Cドライブにも少しだけ残しておくと安心です。
Docker Desktopをやめた
Docker Desktopを使用していましたが、最終的にWSL上にDocker Engineを直接構築する方法に変更しました。
Docker Desktopを使うと仮想ディスクが作成されますが、これが何十GBと膨れ上がります。
一時期は、この仮想ディスクをエクスポート/インポートしてDドライブに逃がしていました。
しかし、Docker Desktopのアップデートのタイミングで壊れることがあり、そのたびに「アンインストール → 再インストール → エクスポート → インポート」を行うのが面倒だったため、Docker Desktopの使用自体をやめました。
容量の問題もありますが、Docker Desktop自体が重い印象だったのも理由の一つです。
WSLの仮想ディスクをDドライブへ
WSLの仮想ディスク(ext4.vhdx)もDドライブに逃がしました。
ディストリビューションをエクスポートし、Dドライブを保存先にしてインポートし直しています。
# ディストリビューション名を確認
wsl -l -v
# 停止してtarにエクスポート
wsl --shutdown
wsl --export Ubuntu D:\wsl\ubuntu.tar
# 登録解除(Cドライブ上のext4.vhdxが削除される)
wsl --unregister Ubuntu
# Dドライブを保存先にしてインポート
wsl --import Ubuntu D:\wsl\Ubuntu D:\wsl\ubuntu.tar
--unregister を実行すると元の仮想ディスクは消えるので、エクスポートしたtarがちゃんとできているか確認してから実行してください。
また、インポートし直すとデフォルトユーザーがrootになってしまうので、/etc/wsl.conf でデフォルトユーザーを指定しておきます(反映には wsl --shutdown が必要です)。
[user]
default=your-user-name
ちなみに、比較的新しいWSLであれば以下のコマンド一発で移動することもできます。
wsl --manage Ubuntu --move D:\wsl\Ubuntu
結局Docker EngineをWSL上に入れているので、こちらも肥大化するんですよね。
ただ、WSL上のDocker Engineのイメージやコンテナのデータはこのext4.vhdxの中に保存されます。つまり、WSLの仮想ディスクをDドライブへ移せばDockerのデータもまとめてDドライブへ行くので、Docker Desktopのように別で移動する手間がありません。これもWSL + Docker Engine構成にしてよかった点です。
今のところ、WSL自体はWindows Updateで壊れたりはしていません。
WSLのswapもDドライブへ
WSL本体を移動しただけでは終わりません。
実はswapファイルの保存先は別で決まっているため、.wslconfig でswapファイルの保存先を指定する必要があります。
.wslconfig はユーザーフォルダ直下(%UserProfile%\.wslconfig)に置きます。
[wsl2]
swap=4GB
swapFile=D:/wsl/swap.vhdx
設定後は wsl --shutdown でWSLを一度停止すると反映されます。
その他の対策
- ダウンロードフォルダもDドライブへ
- ブラウザからダウンロードするファイルの保存先も、Dドライブ配下に置けるようにフォルダを作成
- エクスプローラーで「ダウンロード」を右クリック>「プロパティ」>「場所」タブ>「移動」でDドライブのフォルダを選択すると、フォルダごと移動できる
- 本当はダウンロードしたファイルをそのまま放置しないほうがいいとは思う
- ゲームキャプチャの保存先もDドライブへ
- Windowsの画面録画を開発時のエビデンスや不具合報告に使用する場合、ここも容量を食う
行動を改める
本筋とは若干それますが、そもそもスワップさせないようにするのも大事かなと思いました。
例えば以下のような使い方です。
- Chromeでタブを大量に開きっぱなしにする
- VSCodeのウィンドウを複数開く
これらも結構メモリを使うんですよね。
RAMが16GBだとすぐメモリ100%近くになります。
まあ今の時代、RAM 16GBでギリギリ人権を保てるかどうかなので、開発PCは最低32GBはほしいですよね・・・
おわりに
対策はできるけど面倒くさいので、最初からCドライブの容量が大きいPCを選ぶほうがいいと思います。
(みなさんどうしてるんだろう)

