The well kwnown df(disk free)
and du(disk usage)
are used to display disk usage. But they don’t always tell the same story.
Before going further, there is a ncurses based version of du : ncdu.
Something has eaten my disk space and I can’t find what!
I somehow manage a server for a friend who has a small business, well somehow, because I used to manage it, but since there is nothing to manage, I almost forget about it.
This server runs ubuntu 10.04.3 LTS (yes a 9 years old release,
unsupported since 2015), runs a plethora of services
(directory/file/printing/telephony/fax/snmp/imap/virtual machines/VPN/…) flawlessly. As we say in engineering, If it works, don’t touch it!.
But this week, my friend called me twice saying system partition was full.
This is the biggest flaw of this server, the system partition is a little bit
small and is periodically filled (mainly) by the log files.
logrotate
may not be configured as well as it should.
Ok, the disk is full, now what?
Diagnostic
First of all : df -h /
user@server:~$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/md0 4.6G 4.6G 0.0G 100% /
user@server:~$
Then : sudo du -sxh /
user@server:~$ sudo du -xsh /
3.3G /
user@server:~$
So df says “4.6G used” and du tells “3.3G used”, why? Because some files may
be deleted but still in use by other programs (see that
excellent answer on unix.stackexchange).
So let’s try sudo lsof -s -nP +L1:
...
imap 3862 XXX 14u REG 9,0 592 0 132629 /var/mail/indexes/XXX/.Deleted Messages/dovecot.index (deleted)
imap 11242 XXXXX 7u REG 9,0 1073712 0 137771 /var/mail/indexes/XXXXX/.Sent/dovecot.index (deleted)
openvpn 23678 nobody 1w REG 9,0 1369666431 0 131769 /var/log/openvpn (deleted)
apache2 13815 www-data 9w REG 0,17 0 0 369358297 /var/run/apache2/ssl_mutex (deleted)
apache2 13833 www-data 9w REG 0,17 0 0 369358297 /var/run/apache2/ssl_mutex (deleted)
imap 25994 XXXXX 7u REG 9,0 1296 0 131647 /var/mail/indexes/XXXXX/.INBOX/dovecot.index (deleted)
...
So /var/log/openvpn has been deleted, but it’s still used by openvpn and
it still consumes 1369666431 bytes (1.27 GiB) on the disk!. It may be
possible to truncate the file while the openvpn server use it, but I just
restarted the openvpn server and now df and du now agree.
user@server:~$ df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/md0 4.6G 3.3G 1.3G 71% /
user@server:~$ sudo du -sxh /
3.3G /
user@server:~$
Some space has been freed, I have reconfigured openvpn to be less verbose,
logrotate to rotate openvpn’s log file, and now I can once more forget this
server, Great success !
ncdu - a tool for finding your big files
ncdu
is the command line equivalent of gnome’s disk analyser (baobab),
or not to name it, WinDirStat.
Sample output of ncdu -x /
ncdu 1.11 ~ Use the arrow keys to navigate, press ? for help
--- / -----------------------------------------------------------------
18.9 GiB [##########] /var
16.0 GiB [######## ] swapfile
6.2 GiB [### ] /usr
4.1 GiB [## ] /root
1.2 GiB [ ] /lib
252.3 MiB [ ] /boot
19.6 MiB [ ] /sbin
19.0 MiB [ ] /etc
16.0 MiB [ ] /bin
6.6 MiB [ ] /tmp
16.0 KiB [ ] /opt
8.0 KiB [ ] /mnt
8.0 KiB [ ] /media
8.0 KiB [ ] /.config
8.0 KiB [ ] /snap
4.0 KiB [ ] /lib64
4.0 KiB [ ] /srv
@ 0.0 B [ ] initrd.img.old
@ 0.0 B [ ] initrd.img
@ 0.0 B [ ] vmlinuz.old
@ 0.0 B [ ] vmlinuz
> 0.0 B [ ] /sys
> 0.0 B [ ] /run
> 0.0 B [ ] /proc
> 0.0 B [ ] /home
> 0.0 B [ ] /dev
> 0.0 B [ ] /data
Total disk usage: 46.8 GiB Apparent size: 46.8 GiB Items: 757332
~~~
Question, remark, bug? Don't hesitate to contact me or report a bug.