先に結論
/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
の中身を消したらエラーは出なくなりました. bash
は ls
時の補完で /tmp
を使うんですね.そもそも,なぜ /tmp
領域が1Mしかないのか?という問題について調べたいですが,宿題にします.
追記
@tty74 様から答えをいただきました
起動時にはディスクフルだったんでしょうか?
Ubuntuなどでは/tmp が書き込まないと1MBのサイズでoverlaysタイプでマウントをし直されます。
なるほど!たしかに, df -h
で確認すると overflow という名前でマウントされている.
以下のブログでアンマウント方法がかかれていたので,参考に
sudo umount overflow
で,きれいになった.
Overflow filesystem mounted as /tmp in linux
-
Linux 4.4.0-112-generic Ubuntu SMP 2018 x86_64 GNU/Linux ↩