df и du показывают разные значения
Исходные данные: VPS с FreeBSD 11.0, диск 75 GB. Система только установлена, но значение Avail всего 65 GB.
Вывод df
# df -h Filesystem Size Used Avail Capacity Mounted on /dev/ada0p2 73G 1.4G 65G 2% / devfs 1.0K 1.0K 0B 100% /dev # df -H Filesystem Size Used Avail Capacity Mounted on /dev/ada0p2 78G 1.5G 70G 2% / devfs 1.0k 1.0k 0B 100% /dev
Виной всему Миша 2% невнимательное чтение Handbook.
Это связано с тем, как эти команды на самом деле работают. du проходит по дереву каталогов, замеряя, насколько большой объем занимает каждый файл, и выдает общий объем. df просто запрашивает файловую систему об оставшемся объеме. Это выглядит как одно и то же, однако файл без записи в каталоге затронет df, но не повлияет на du. Когда программа использует файл и этот файл удаляется, то на самом деле он не удаляется из файловой системы, пока программа не прекратит его использовать. Однако файл тут же удаляется из списка каталога. Представим себе файл достаточно большого размера, чтобы его присутствие влияло на вывод du и df. Если файл удаляется в процессе работы с ним команды more, команда more не сообщает сразу же, что не может просматривать файл. Запись о файле просто удалена из каталога, так что другие программы или пользователи не смогут к нему обратиться. Тем не менее, du покажет, что файл исчез, поскольку она просматривает дерево каталогов, а файла там нет. df показывает, что файл всё ещё здесь, так как файловая система знает, что more всё ещё использует это пространство. Как только закончится работа с more, команды du и df придут в соответствие.
По-умолчанию 8% дискового пространства на разделе резервируется для пользователя root. - т.е. по достижении этого порога обычные пользователи не смогут вести запись в раздел.
И чтобы окончательно всё понимать внимательно читаем:
FAQ прочитан и осмыслен и можно бороться с несправедливостью root-узурпатора.
Смотрим информацию о разделе
# tunefs -p /dev/ada0p2 tunefs: POSIX.1e ACLs: (-a) disabled tunefs: NFSv4 ACLs: (-N) disabled tunefs: MAC multilabel: (-l) disabled tunefs: soft updates: (-n) enabled tunefs: soft update journaling: (-j) enabled tunefs: gjournal: (-J) disabled tunefs: trim: (-t) disabled tunefs: maximum blocks per file in a cylinder group: (-e) 4096 tunefs: average file size: (-f) 16384 tunefs: average number of files in a directory: (-s) 64 tunefs: minimum percentage of free space: (-m) 8% tunefs: space to hold for metadata blocks: (-k) 6408 tunefs: optimization preference: (-o) time tunefs: should optimize for space with minfree < 8% tunefs: volume label: (-L)
Уменьшить данное значение можно через утилиту tunefs.
Попробуем поставить резерв 1%
# tunefs -m 1 /dev/ada0p2 tunefs: minimum percentage of free space changes from 8% to 1% tunefs: should optimize for space with minfree < 8% tunefs: /dev/ada0p2: failed to write superblock
И если бы я внимательно прочитал сначала документацию, а потом уже вводил волшебные команды, то не получил бы ошибку tunefs failed to write superblock
. tunefs можно запускать только на отмонтированных, или смонтированных в режиме "только чтение" файловых системах.
А так как у нас VPS, то перезагружаемся в Single Mode и выполняем команду ещё раз.
tunefs -m 1 /dev/ada0p2 tunefs: minimum percentage of free space changes from 8% to 1% tunefs: should optimize for space with minfree < 8%
Смотрим вывод df
после применения изменений
# df -h Filesystem Size Used Avail Capacity Mounted on /dev/ada0p2 73G 1.4G 71G 2% / devfs 1.0K 1.0K 0B 100% /dev # df -H Filesystem Size Used Avail Capacity Mounted on /dev/ada0p2 78G 1.5G 76G 2% / devfs 1.0k 1.0k 0B 100% /dev
Вот они наши драгоценные гигабайты.
Такие дела. Читайте доки товарищи админы!
Обсуждение