ec2(ubuntu)にて「no space left on device」が出た時の対処法

最初に結論

あくまで伊藤くんの場合の話ですが、以下の方法で解決しました。

以下のコマンドをec2上で実行。なんか途中で何かの選択を迫られるけどエンター連打してたらなんとかなりました。

$ sudo apt autoremove -f

こういう時の原因の探り方

「no space left on device」というメッセージは、なんか容量がパンパンだよっていうメッセージらしいです。

この容量系のエラーが出た時、具体的にどこが悪いのかを調べるため、まず第一に実行すべきが以下のコマンド。

$ df -h

このコマンドは単純にマシン内の容量(バイト数)の使用率を表示してくれるもの。
結果は以下のように表示されます。

 ubuntu@ip-172-31-40-236:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            476M     0  476M   0% /dev
tmpfs            98M  716K   98M   1% /run
/dev/xvda1      7.7G  5.6G  2.2G  73% /
tmpfs           490M     0  490M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           490M     0  490M   0% /sys/fs/cgroup
/dev/loop1       97M   97M     0 100% /snap/core/9665
/dev/loop0       97M   97M     0 100% /snap/core/9804
/dev/loop2       29M   29M     0 100% /snap/amazon-ssm-agent/2012
/dev/loop3       18M   18M     0 100% /snap/amazon-ssm-agent/1566
tmpfs            98M     0   98M   0% /run/user/1000

この中で/dev/xvda1 っていうやつのUse%の部分が100%近くなっていたら、単純に容量が枯渇した、ということらしいです。
OSとかによってディレクトリ名は微妙に違うようですが、似たような名前になっているようです。
(「/dev/loop*」ってなんなんだろう…これは100%でもいいのかな…)

これで容量不足が原因だとわかった場合は、容量不足だった場合のさらなる原因の特定のとこまで飛んでください。

このコマンドの結果容量不足ではなかった、という場合は、次に以下のコマンドを実行します。

$ df -i

これは、inodeという、ファイルの数などの数値を見るためのものだそうです。

このコマンドも先ほどのコマンドと同じように表示されるのですが、ここで/dev/xvda1の IUse% の部分が100%近かったら、inodeが原因のようです。

申しわけありませんが、inode不足の場合の解決策はここでは解説しません。

容量不足だった場合のさらなる原因の特定

容量不足であることがわかった後は、どのフォルダ、ファイルが圧迫しているのかを特定していきます。

$ sudo du -sh /*

このコマンドで、このディレクトリが何バイト圧迫しているかが出力されます。

 ubuntu@ip-172-31-40-236:~$ sudo du -sh /*
sudo: unable to resolve host ip-172-31-40-236: Resource temporarily unavailable
15M /bin
116M /boot
0 /dev
6.0M /etc
2.6G /home
~略~
32K /tmp
3.2G /usr
754M /var
0 /vmlinuz
0 /vmlinuz.old

上記の場合ですと、/usrディレクトリが大きく圧迫していることがわかります。
ので、次は以下のようにコマンドを実行します。

$ sudo du -sh /usr/*

結果が表示され次第、さらに怪しいディレクトリを掘り下げていき、最終的にどのフォルダ、ファイルが犯人かを特定できます。

参考 : https://qiita.com/ponsuke0531/items/edf2eee638202aa7f61f

/usr/src/が犯人だった場合の対処法

ここからは人によって異なると思いますが、伊藤くんは以下のように、/usr/src/linux-aws-*が犯人でした。

 ubuntu@ip-172-31-40-236:~$ sudo du -sh /usr/src/*
sudo: unable to resolve host ip-172-31-40-236: Resource temporarily unavailable
109M /usr/src/linux-aws-5.3-headers-5.3.0-1017
109M /usr/src/linux-aws-5.3-headers-5.3.0-1019
109M /usr/src/linux-aws-5.3-headers-5.3.0-1023
109M /usr/src/linux-aws-5.3-headers-5.3.0-1030
109M /usr/src/linux-aws-5.3-headers-5.3.0-1032
115M /usr/src/linux-aws-headers-4.15.0-1044
115M /usr/src/linux-aws-headers-4.15.0-1045
113M /usr/src/linux-aws-headers-4.15.0-1047
113M /usr/src/linux-aws-headers-4.15.0-1048
113M /usr/src/linux-aws-headers-4.15.0-1050
113M /usr/src/linux-aws-headers-4.15.0-1051
113M /usr/src/linux-aws-headers-4.15.0-1057
113M /usr/src/linux-aws-headers-4.15.0-1058
113M /usr/src/linux-aws-headers-4.15.0-1060
113M /usr/src/linux-aws-headers-4.15.0-1063
113M /usr/src/linux-aws-headers-4.15.0-1065
19M /usr/src/linux-headers-4.15.0-1044-aws
20M /usr/src/linux-headers-5.3.0-1030-aws
20M /usr/src/linux-headers-5.3.0-1032-aws
20M /usr/src/linux-headers-5.3.0-1033-aws

こやつらは調べたところ「古いカーネル」らしいのですが、これは伊藤くんにはよく理解できませんでした。

とにかく、こやつらは消してもいいものらしく、これを消すことで容量に平和が訪れます。

その消し方なのですが、以下のコマンドでお掃除してくれます。(全て削除されるわけではないようです)

$ sudo apt autoremove -f

-f とか付いててちょっと怖かったですが、問題なく削除されました。
途中で謎の選択を迫られましたが、y/nは全てy、メニューが出た場合はデフォルトのままエンター連打でなんとかなりました。
伊藤くんの場合、/dev/xvda1の使用率が100%から73%になりました。

参考 : https://qiita.com/kulikala/items/a3ce4f7f21a5c7a55d71

今回の対処(原因の特定方法など)はmacでも同じように使えると思いますので、macの容量が足りなくなった際も活用できるかもしれません。

それでは、グッドナイトミッドナイトチルドレン。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です