貸与PCのCドライブが少なすぎるので、あらゆるものをDドライブへ追放した

貸与PCのCドライブが少なすぎるので、あらゆるものをDドライブへ追放した


Cドライブ256GBの貸与PCで、仮想メモリ・Docker・WSLの仮想ディスクやswapなどをDドライブへ逃がした対策まとめ。

目次

貸与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のものですが、以下の手順で変更できます。

  1. 「システムのプロパティ」にて「詳細設定」タブ>パフォーマンス>「設定」
  2. 「パフォーマンスオプション」にて「詳細設定」タブ>「仮想メモリ」>「変更」
  3. 「すべてのドライブのページングファイルのサイズを自動的に管理する」のチェックを外し、カスタムサイズを入力する。 下部に表示される推奨値以上を入力しないと、動作が不安定になる可能性があります。RAMが足りないから仮想メモリを割り当てるわけで、単純に使わないようにすると当然動作に影響が出ます。
  4. OKを押下して設定を完了する。※再起動後に有効になります。

ページファイルごとDドライブへ移す

上限を決めるだけでなく、ページファイル自体をDドライブへ追い出すこともできます。

同じ「仮想メモリ」画面で、以下のように設定します。

  1. ドライブ一覧で「C:」を選択し、「ページングファイルなし」(または小さめのカスタムサイズ)を選んで「設定」
  2. ドライブ一覧で「D:」を選択し、「システム管理サイズ」を選んで「設定」
  3. 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 が必要です)。

/etc/wsl.conf
[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)に置きます。

.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を選ぶほうがいいと思います。

(みなさんどうしてるんだろう)

リンクをコピーしました