容量は残っているし inode も枯渇していないのに "No space left on device" と怒られる問題


先に結論

/tmp 領域がいっぱいだ.消そう.

背景

GCE 上インスタンス1にデプロイ済みのシステムが有り,一旦容量が枯渇してしまったのでディスク容量の拡張を行った.かなり面倒くさい手順だったがこちらは何とか終わった. df -h で確認してみる:

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            837M  4.0K  837M   1% /dev
tmpfs           170M  336K  170M   1% /run
/dev/sda1        30G   11G   19G  36% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none            5.0M     0  5.0M   0% /run/lock
none            849M     0  849M   0% /run/shm
none            100M     0  100M   0% /run/user
overflow        1.0M  1.0M     0 100% /tmp

ということで 19G 空きができてる(心もとないけど).ここで満を持して lsしようとするが,補完のところで...:

-bash: cannot create temp file for here-document: No space left on device

ということで怒られた.なぜだ!容量は十分あるじゃないか!

調査

inode 枯渇問題?

No space left on device とエラーが出るときの対処法によると容量はあっても inode が枯渇している場合にこのエラーが出るとのこと. df -i で調べてみる:

Filesystem      Inodes  IUsed   IFree IUse% Mounted on
udev            214046    377  213669    1% /dev
tmpfs           217142    341  216801    1% /run
/dev/sda1      1966080 305712 1660368   16% /
none            217142     14  217128    1% /sys/fs/cgroup
none            217142      6  217136    1% /run/lock
none            217142      1  217141    1% /run/shm
none            217142      2  217140    1% /run/user
overflow        217142      1  217141    1% /tmp

バッチリ残っている. ここで私は気がつく

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            837M  4.0K  837M   1% /dev
tmpfs           170M  336K  170M   1% /run
/dev/sda1        30G   11G   19G  36% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
none            5.0M     0  5.0M   0% /run/lock
none            849M     0  849M   0% /run/shm
none            100M     0  100M   0% /run/user
overflow        1.0M  1.0M     0 100% /tmp

...

overflow        1.0M  1.0M     0 100% /tmp

/tmp が 100% だった...

解決

というわけで /tmp の中身を消したらエラーは出なくなりました. bashls 時の補完で /tmp を使うんですね.そもそも,なぜ /tmp 領域が1Mしかないのか?という問題について調べたいですが,宿題にします.

追記

@tty74 様から答えをいただきました

2018-04-12 21:29

起動時にはディスクフルだったんでしょうか?
Ubuntuなどでは/tmp が書き込まないと1MBのサイズでoverlaysタイプでマウントをし直されます。

なるほど!たしかに, df -h で確認すると overflow という名前でマウントされている.
以下のブログでアンマウント方法がかかれていたので,参考に
sudo umount overflowで,きれいになった.
Overflow filesystem mounted as /tmp in linux


  1. Linux 4.4.0-112-generic Ubuntu SMP 2018 x86_64 GNU/Linux