Google で『Windows 不要ファイル 削除』『windows 容量 増やす』等で検索すると出てくるのは、
- Windows Update のバックアップファイル等の削除
- ブラウザのキャッシュファイル削除
- Temp ファイル削除
のような一般的な用途で Windows を利用している場合に肥大化するものへの対処が多い。
しかし、Windows で本格的に開発していると、また違ったところが肥大化しているケースがあるので、備忘録的にまとめておく。
注意
一見必要なさそうなファイルでも、実は重要な役割を持っているものも沢山あります。
以下の操作は、問題が起きても自分でなんとかできると自信のあるもののみ参考にしてください。
前準備
まずは何が容量を喰っているのかを知る必要がある。私は WizTree を使っている。
VM
Vagrant 等で開発していると、知らず知らずのうちに VM が肥大化する。
新規に立ち上げた時は 1 GB 程度だったのに、色々使っていると知らぬ間に 10 GB 以上になっていることもある。
以下は、VirtualBox を利用している前提で進める。
保存場所 : C:\Users\username\VirtualBox VMs\以下
( ちなみに私自身は Docker for Windows を使っているので、VirtualBox も Vagrant も使っていない )
1. 不要 VM の削除
不要な VM があれば削除しよう。
2. 退避
日常的に使わないのであれば、NAS, Portable HDD や S3 へ退避する。
7-zip で圧縮することで、1/5 程度まで小さくできるのでオススメ。
パフォーマンスが多少落ちても良いのであれば、Portable HDD や NAS にファイルを移動して、VirtualBox がそこを直接参照して起動することも出来る。
3. 仮想 HDD の圧縮
日常的に使う VM は削除や退避が難しい。
その場合は、VBoxManage の Compact 機能が使える。不要領域を削除してスリム化することができる。
-
VM を立ち上げる
-
Guest OS の不使用領域をゼロ埋めする ( パーティション毎 )
# Guest OS # `/` と `/home` が別パーティションなら、どちらでも実行する $ cd /home && dd if=/dev/zero of=zero bs=4k && rm zero $ cd / && sudo dd if=/dev/zero of=zero bs=4k && sudo rm zero
-
VM を落とす
-
Windows 側で、以下操作を行う
$ cd C:\"Program Files"\Oracle\VirtualBox $ .\VBoxManage.exe clonemedium disk C:\Users\username\"VirtualBox VMs"\vmname\box-disk1.vmdk C:\Users\username\"VirtualBox VMs"\vmname\box-disk1.vdi --format vdi $ .\VBoxManage.exe closemedium disk C:\Users\username\"VirtualBox VMs"\vmname\box-disk1.vmdk --delete $ .\VBoxManage.exe modifymedium disk C:\Users\username\"VirtualBox VMs"\vmname\box-disk1.vdi--compact $ .\VBoxManage.exe clonemedium disk C:\Users\username\"VirtualBox VMs"\vmname\box-disk1.vdi C:\Users\username\"VirtualBox VMs"\vmname\box-disk1.vmdk --format vmdk $ .\VBoxManage.exe closemedium disk C:\Users\username\"VirtualBox VMs"\vmname\box-disk1.vdi --delete
Docker for Windows
Docker for Windows は Linux Container を Hyper-V 上の MobyLinux で動かしているが、そいつが結構でかくなる。
保存場所 : C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks\MobyLinuxVM.vhdx
1. ゴミになっている Container, Image, Volume, Network を削除
Docker を使っていると、知らぬ間に Dead Container, Unused Volumes が増えてゆく。
今は prune コマンドがあるので、これでさっと削除できる。
docker system prune --all --volumes
2. 不要な Image を削除
Image は意外と大きくて、それだけで 10 GB 以上になることもある。
使わないなものを選んで消そう。
docker image list
# REPOSITORY TAG IMAGE ID CREATED SIZE
# <none> <none> 77af4d6b9913 19 hours ago 1.089 GB
# committ latest b6fa739cedf5 19 hours ago 1.089 GB
# ...
docker image rm <image>
3. 仮想 HDD を Shrink
VirtualBox 同様、Hyper-V の仮想 HDD も不要領域が自動でホストOS に返らない。
以下を管理者で実行して Shrink する。
Optimize-VHD -Path "C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks\MobyLinuxVM.vhdx" -Mode Quick
WSL
Windows Subsystem for Linux もジリジリと容量が増えていく。
ファイルの場所は Linux Distribution によって異なるが、例えば以下などにある。
保存場所 : C:\Users\username\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_*\LocalState\rootfs
ただの Linux なので、普段通りのメンテナンスを行う。以下は Ubuntu を前提とする。
1. 不要ファイルを削除
$ sudo apt-get clean
$ sudo apt-get autoremove
$ sudo apt-get autoclean
$ sudo rm -rf /tmp/**/*
2. 不要パッケージの削除 ( 自信が無ければやらない )
apt-get autoremove
apt-get autoclean
で大方削除されるが、誰にも使われていない孤立パッケージが残っていないか以下で探し、不要であれば削除する。
$ sudo apt-get install deborphan
# 消しきれなかった孤立したパッケージ一覧
$ sudo deborphan
# もう少し深く探す
$ sudo deborphan --guess-all
# 消しきれなかったパッケージ設定ファイル
$ deborphan --find-config
# 全部消すなら
$ sudo apt-get --purge remove (sudo deborphan)
$ sudo dpkg -P (sudo deborphan --find-config)
3. 不要ロケールファイルを削除 ( 自信が無ければやらない )
以下のような必要と思われるロケールを残して削除する
- en
- en_US.UTF-8
- ja
- ja_JP.UTF-8
$ sudo apt-get install localepurge
$ sudo localepurge
scoop
Windows のパッケージマネージャ。
Scoop と PackageManagement を使った Windows 環境の構築 - Qiita
scoop はバージョンアップのたびに過去のバージョンを保持していくので、気がつくととても大きくなっている。
保存場所 : C:\Users\username\scoop
1. 古いバージョンを削除
以下コマンドでは、全ての古いバージョンを消してしまう。
scoop cleanup *
消したくないものがある場合は *
の部分にパッケージ名を入れて個別に消していくしかない。
しかし、例えば Scoop を使って Python の処理系バージョンの切り替えをしている場合、どうすれば良いのか。
この場合、Versions Bucket の中にマイナーバージョン毎 ( python27, python35, python36, anaconda2, anaconda3 ... ) にパッケージが小分けにされているので、こちらを導入すると良い。
2. キャッシュ削除
scoop cache rm *
各プログラム言語環境のクリーンアップ
各プログラム言語環境の不要パッケージ・キャッシュも気づくと容量を相当使っていることがある。
当然キャッシュを消せば、次回実行時にコンパイルが実行され時間がかかるようになるので、必要ならばキャッシュは消さないように。
以下は、肥大化しがちな言語 ( パッケージ管理ツール ) のみ記述した。
Python ( pip, conda )
rm -r -fo "$env:LocalAppData\pip\cache"
# conda を利用しているなら
conda clean --all
Conda 環境は密かに容量を増やしているので、たまにやると 2 GB 位減る。
注意する点として、conda clearn --all
は問題を引き起こす可能性があると言われているので、最悪環境を作り直すかもしれない覚悟は必要。
Node ( NPM, Yarn )
yarn cache clean
npm cache clean
Rust ( Cargo )
cargo install cargo-cache
cargo cache --autoclean
Java ( Gradle )
rm -r -fo "$env:USER_HOME\.gradle\caches"
番外編 - 扱いが難しいもの
hiberfil.sys, pagefile.sys
C: 直下にあるドデカファイル。
大きいので何かと目に入るが、調べると『消すとやばい』的な情報が多く、一体どうすればよいのか分からない奴。
pagefile.sys
仮想メモリの実態 ( ページファイル )。
物理メモリをたんまり積んでいても使う時は使う。
OS がよしなにやってくれるので、余程邪魔じゃない限りはほっとこう。
一応カスタマイズできるので、余りに大きすぎる場合には固定値にしても良いかも。
[システムのプロパティ → パフォーマンスオプション → 仮想メモリ]
hiberfil.sys
休止中状態になる際に、メモリの内容を一旦書き出すファイル。
復旧時はこのファイル内容をメモリにドカッと乗せることで高速化を図る。
一応この機能を切ることもできるらしいが、不具合が出ることもあるらしく、自信がないなら切らないのが吉。