エンジニアを目指す日常ブログ

日々勉強したことのメモ。独学ですので間違っていたらコメント等で教えてください。

VirtualBoxの容量不足エラーが出たときにやったことメモ

はじめに

VirtualBoxで突然以下のようなエラーが発生。

npm ERR! code ENOSPC
npm ERR! syscall write
npm ERR! errno -28
npm ERR! nospc ENOSPC: no space left on device, write
npm ERR! nospc There appears to be insufficient space on your system to finish.
npm ERR! nospc Clear up some disk space and try again.

容量が足りないエラーのようで、不要ファイルを削除することで解消した。 実施したことをメモする。

追記

本記事を書いた数時間後に再度同じエラーが発生、どうしようもなくなったため容量拡張を実施した。 あくまで本記事は暫定対応と考えたほうがよい。

前提

  • Windows環境の上に、VirtualBox + Vagrant で構築したLinux環境を利用。
  • React.jsのGatsbyモジュールを使ったアプリを開発していた時に起こった。
  • OSはubuntuを利用。
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.4 LTS
Release:        18.04
Codename:       bionic

原因の確認→ディスク容量不足

このエラー発生時は、ディスク容量が足りない可能性が高い。 参考にした記事では、innodeが足りなかったとのこと。

参考: No space left on device とエラーが出るときの対処法 - Qiita 自分の環境でたたいてみると、ディスク容量が足りないことが分かった。

$ df -hP
Filesystem              Size  Used Avail Use% Mounted on
udev                    1.5G     0  1.5G   0% /dev
tmpfs                   299M  640K  299M   1% /run
/dev/sda1               9.7G  9.7G     0 100% /
tmpfs                   1.5G     0  1.5G   0% /dev/shm
tmpfs                   5.0M     0  5.0M   0% /run/lock
tmpfs                   1.5G     0  1.5G   0% /sys/fs/cgroup
vagrant                 238G  199G   39G  84% /vagrant
home_vagrant_workspace  238G  199G   39G  84% /home/vagrant/workspace
tmpfs                   299M     0  299M   0% /run/user/1000

/dev/sda1というのは、10GBであることからおそらくVirtualBoxのメインストレージ。

VirtualBoxマネージャー画面
VirtualBoxマネージャー画面

ディスク容量をひっ迫しているフォルダの確認

ルートディレクトリ配下のフォルダごとのデータ量を確認する。

ルートフォルダに移動して中身の確認。

$ cd /
$ sudo du -sh ./*/
8.1G    ./home/
...省略...

ホームディレクトリが圧倒的に大きいことが分かった。

ホームディレクトリの中のvagrant(ユーザ名)ディレクトリに移動して、隠しファイル以外のデータ量を確認する。

$ cd home/vagrant
$ sudo du -sh ./*/
161M    ./aws/
753M    ./gatsby/
4.0K    ./tmp/
2.5G    ./workspace/

これだけでは8.1GBに達する理由がわからないため、隠しフォルダのデータ量も確認。

$ du -scmh ./.[^.]* | sort -rh
4.7G    total
1.3G    ./.nvm
1.3G    ./.cache
1.1G    ./.npm
939M    ./.vscode-server
116M    ./.config
5.2M    ./.yarn
...省略...

参考: duでカレントディレクトリ以下の使用容量をパッと見たいとき用のコマンド 隠しファイルも - Qiita

1.3G    ./.nvm
1.3G    ./.cache
1.1G    ./.npm

このあたりの容量が大きそうだが、nvmnpmは消したらまずい気がしたのでcacheをターゲットにする。

キャッシュフォルダの中身確認

./.cacheフォルダの中身を確認する。

$ cd ./.cache
$ sudo du -sh ./*/
109M    ./typescript/
1.2G    ./yarn/

どうやら./yarnフォルダが容量を食っている模様。

yarnのキャッシュを消してよいのか調査

home/.cache/yarnフォルダを消して問題が起きないか自信が無い(さすがにキャッシュだから大丈夫だとは思うが)ので少し調べたところ、以下の記事で気軽にキャッシュをクリアしていたので、問題ないと信じることにした。

参考: 【yarn install】ハマったときの解決方法

どのプロジェクトで使われているフォルダなのか

作業していたGatsby.jsのプロジェクトフォルダに移動して、yarnのキャッシュ保管フォルダを確認すると、まさに問題になっていたフォルダだった。

$ cd gatsby-starter-blog/
$ yarn cache dir
/home/vagrant/.cache/yarn/v6

参考: yarnのキャッシュを理解してnode_modulesを正しく更新する - さかなソフトブログ

このまま

$ yarn cache clean

を実施したところ、データ量が1GBほど削減された。

VartualBox再起動

再起動すると、Linuxの操作が再びできるようになった。

vagrant halt
vagrant up

おわりに

VirtualBoxの容量不足エラーを、キャッシュを削除することで回避できた。

ただし、本来はVirtualBoxへの割り当て容量を増やすほうが良いと思う。

また、本当に容量が足りなくなるとvagrant upすらできなくなるので、詰む可能性あり。 私はwindowsと共有しているフォルダから適当なファイルを手動で削除することで、起動できた。