Для примера возьмём такой вывод:
# du -sh /var/ 2G /var/
# df -h /var/ Filesystem Size Used Avail Capacity Mounted on /dev/da0p5 7.9G 5G 2.3G 68% /var
Обычно (хотя не всегда), разница возникает из-за файлов, которые были удалены – но в момент удаления были “захвачены” каким-то процессом.
Что бы выяснить это – можно выполнить команду lsof
:
# lsof -a +L1 / | grep var | grep httpd httpd 8739 root 14w REG 8,3 0 0 1835539 /var/run/wsgi.8739.16.1.lock (deleted) httpd 21612 apache 14w REG 8,3 0 0 1835539 /var/run/wsgi.8739.16.1.lock (deleted) httpd 21613 apache 14w REG 8,3 0 0 1835539 /var/run/wsgi.8739.16.1.lock (deleted) httpd 21614 apache 14w REG 8,3 0 0 1835539 /var/run/wsgi.8739.16.1.lock (deleted)
Или так:
# lsof +D /var/ +L1 | less
И найти файлы, для которых в колонке NLINK
значение будет 0. К сожалению, этот метод корректно работает не во всех системах, например – FreeBSD так и не отобразила “удалённые” файлы.
Если попытаться открыть файл – будет сообщено об ошибке доступа к нему:
# stat /var/run/wsgi.8739.16.1.lock stat: cannot stat `/var/run/wsgi.8739.16.1.lock': No such file or directory
Разница заключается в том, что du
– выполняет запрос непосредственно к каждому найденному файлу в разделе, а df
– к файловой системе.
При удалении файла, который в этот момент был “занят” процессом – его имя удаляется, но inode
– остаётся в файловой системе до тех пор, пока не завершится процесс, который “держит” этот файл.
Соответственно, что бы “освободить” уже удалённые файлы – необходимо перезапустить процесс, который этот файл держит.
Ещё один пример – были удалены и пересозданы файлы логов, но сам NGINX при этом не перезапускался. Проверим разницу в свободном/занятом месте раздела /var
до и после перезапуска сервера NGINX:
# df -h /var/ Filesystem Size Used Avail Capacity Mounted on /dev/da0p5 7.9G 5G 2.3G 68% /var # du -sh /var/ 2G /var/
# service nginx restart Performing sanity check on nginx configuration: nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful Stopping nginx. Waiting for PIDS: 1541. Performing sanity check on nginx configuration: nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful Starting nginx.
# du -sh /var/ 2G /var/
# df -h /var/ Filesystem Size Used Avail Capacity Mounted on /dev/da0p5 7.9G 2G 5.3G 27% /var