Ubuntu 18.04 でエラー発生
ある日、突然 Let’s Encrypt から証明書の期限が切れるメールが届きました。
その証明書は、開発サーバ( Ubuntu 18.04 )で利用していたドメインでした。 cron で自動更新できるようにしていたのに、なぜか更新できていない状態になっていたようでした。
実際にサーバに SSH で接続し、手動で証明書の更新を試みます。
しかし、「No space left on device」とエラーが表示され、実行できないようでした。そのほか、何か処理を行おうとしても同様なエラーが発生します。
ディスク使用量の確認
そのためディスク使用量の確認をしてみます。
*****:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 977M 0 977M 0% /dev
tmpfs 199M 21M 178M 11% /run
/dev/xvda1 7.7G 7.7G 0 100% /
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 991M 0 991M 0% /sys/fs/cgroup
:
tmpfs 199M 0 199M 0% /run/user/1000
ルートが100%ですね。しばらく放置していました。。。ディスクの整理をしたいと思います。
*****:~$ sudo du -sh /*
15M /bin
159M /boot
0 /dev
9.3M /etc
178M /home
0 /initrd.img
0 /initrd.img.old
408M /lib
4.0K /lib64
16K /lost+found
4.0K /media
4.0K /mnt
4.0K /opt
0 /proc
60K /root
21M /run
15M /sbin
1.3G /snap
4.0K /srv
0 /sys
48K /tmp
4.8G /usr
2.2G /var
0 /vmlinuz
0 /vmlinuz.old
「/usr」や「/var」が使用量が高いですね。何かしようとするとエラーが発生するので、手っ取り早くログファイルの削除から行います。
Journal ログの削除
もう少し具体的に掘り下げて確認します。
*****:~$ sudo du -sh /var/*
576K /var/backups
131M /var/cache
4.0K /var/crash
1.1G /var/lib
4.0K /var/local
0 /var/lock
812M /var/log
4.0K /var/mail
4.0K /var/opt
0 /var/run
52K /var/snap
36K /var/spool
32K /var/tmp
206M /var/www
「/var/log」は比較的削除しやすいので、さらにこちらを掘り下げましょう。
*****:~$ sudo du -sh /var/log/*
0 /var/log/alternatives.log
4.0K /var/log/alternatives.log.1
:
120K /var/log/amazon
212K /var/log/apache2
128K /var/log/apt
1.3M /var/log/auth.log
2.4M /var/log/auth.log.1
:
340K /var/log/btmp
2.4M /var/log/btmp.1
28K /var/log/cloud-init-output.log
840K /var/log/cloud-init.log
4.0K /var/log/dist-upgrade
0 /var/log/dpkg.log
8.0K /var/log/dpkg.log.1
:
802M /var/log/journal
0 /var/log/kern.log
4.0K /var/log/kern.log.1
:
4.0K /var/log/landscape
4.0K /var/log/lastlog
252K /var/log/letsencrypt
68K /var/log/letsencrypt-renew.log
4.0K /var/log/lxd
52K /var/log/syslog
328K /var/log/syslog.1
:
4.0K /var/log/tallylog
64K /var/log/unattended-upgrades
0 /var/log/wtmp
4.0K /var/log/wtmp.1
「/var/log/journal」が大きいですね。これは「journalctl」でログを整理します。念のため使用量を確認します。
*****:~$ journalctl --disk-usage
Archived and active journals take up 801.8M in the file system.
3日分ほど残してあとは削除します。
*****:~$ sudo journalctl --vacuum-time=3d
Vacuuming done, freed 0B of archived journals from /run/log/journal/901443452bfb4bef949b03319d972dc3.
Vacuuming done, freed 0B of archived journals from /var/log/journal.
Vacuuming done, freed 0B of archived journals from /run/log/journal.
Deleted empty archived journal /var/log/journal/901443452bfb4bef949b03319d972dc3/system@0005e81cf21a7900-2a0f744923fd9632.journal~ (704.0K).
Deleted empty archived journal /var/log/journal/901443452bfb4bef949b03319d972dc3/system@0005e8452dc39da4-c42f2a2d4a1d0662.journal~ (4.0K).
:
再度使用量を確認します。
*****:~$ journalctl --disk-usage
Archived and active journals take up 32.0M in the file system.
サイズが小さくなりました。これでディスクに余裕ができたので、いろいろなコマンドを入力してもエラーが出なくなりました。
apt の整理
あと「/usr」もサイズが大きいので、更に掘り下げます。
*****:~$ sudo du -sh /usr/*
113M /usr/bin
4.0K /usr/games
28M /usr/include
526M /usr/lib
56K /usr/local
13M /usr/sbin
222M /usr/share
3.9G /usr/src
「/usr/src」が圧迫していますね。このフォルダには「linux-aws-5.*-headers-5.*.0-****」などの古いカーネルが溜まります。そのためキレイにしてあげる必要があります。手っ取り早く apt にお任せします。
*****:~$ sudo apt autoremove
整理完了
再度ディスクの使用量を確認してみます。
*****:~$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 977M 0 977M 0% /dev
tmpfs 199M 768K 198M 1% /run
/dev/xvda1 7.7G 3.4G 4.4G 44% /
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 991M 0 991M 0% /sys/fs/cgroup
:
tmpfs 199M 0 199M 0% /run/user/1000
ルートは 44% まで減りました。これでまたしばらくは大丈夫でしょう。
まとめ
今回ディスクを整理するきっかけとなった最初のメールは、比較的時間に余裕のある時に届いたものでした。コマンドがエラーになっても焦らずに対処できましたが、忙しいときだと思うと怖いですね。
開発サーバなので放置気味だったのですが、ディスク容量を監視しておいたほうがいいと思いました。