Работа с объемом диска в LINUX команды df и du
Начну сразу с двух особенностей:
UFS: Почему возможно заполнение раздела больше чем на 100%?
Часть каждого раздела UFS (по умолчанию 8%) зарезервировано для использования операционной системой и пользователем root. Утилита df(1) не учитывает это при подсчёте значения в колонке Capacity, так что оно может превышать 100%. Также вы заметите, что колонка Blocks всегда больше, чем сумма значений в колонках Used и Avail, обычно на 8%.
ext 2/ext3 5% файловой системы резервируется под рута.
Зачем это делается:
«А это на тот случай, если у тебя какой-нибудь мудак повесит в фоне cat /dev/random > myfile и уйдет домой спать. Файлуха переполнится и с некоторой долей вероятности нельзя будет даже прилогиниться - зависит от того, как у тебя разбиты точки монтирования.
А так - 5% файлухи (задаётся ключом -m в соответствующем mkfs) резервируется под рута, всем остальным будет возвращаться ошибка. Так что как минимум прилогиниться и почистить систему тебе хватит.»
Исходя из этого вот такая картина почти нормальная:
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00
444G 56G 365G 14% /
/dev/sdb1 99M 13M 82M 14% /boot
tmpfs 3.0G 0 3.0G 0% /dev/shm
/dev/sda5 917G 908G 0 100% /mnt/data
Обращам внимание на /dev/sda5 .
Полезные команды:
root@server [~]# df -ah
Filesystem Size Used Avail Use% Mounted on
/dev/vzfs 20G 5.0G 1017M 84% /
proc 0 0 0 – /proc
sysfs 0 0 0 – /sys
none 7.9G 4.0K 7.9G 1% /dev
none 0 0 0 – /dev/pts
none 0 0 0 – /proc/sys/fs/binfmt_misc
Если мы хотели бы просмотреть информацию об использовании inode (максимальное число теоретически возможных файлов на данной файловой системе), то это можно проделать с помощью опции -i.
root@server [~]# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/vzfs 20971520 176654 20794866 1% /
если нет надобности выводить информацию по какой то из файловых систем, то её можно исключить используя опцию -x , а опцией -t можно ограничить вывод определенными типами файловых систем.
root@server [~]# df -ah -x sysfs
Filesystem Size Used Avail Use% Mounted on
/dev/vzfs 20G 5.0G 893M 85% /
proc 0 0 0 – /proc
none 7.9G 4.0K 7.9G 1% /dev
none 0 0 0 – /dev/pts
none 0 0 0 – /proc/sys/fs/binfmt_misc
В моем примере видно, что творится какая то чертовщина, поскольку разница общего и использованного объема составляет 15 Гигов, при том, что свободным у меня остается 1Гиг. Явно что какой то глюк, поэтому надо смотреть кто и сколько кушает. Для этого мы воспользуемся утилитой du (сокращение от disk usage), предоставляющей нам информацию об использовании диска файлами и директориями.
root@server [~]# du -hsx /
5.4G /
Это общий размер дискового пространства занимаемого файловой системой / . Чтобы посмотреть разблюдовку по директориям в корневой файловой системе:
root@server [~]# du -shc /*
0 /aquota.group
0 /aquota.user
5.0M /bin
4.0K /boot
4.0K /dev
6.5M /etc
887M /home
24M /lib
4.0K /media
4.0K /mnt
14M /opt
0 /proc
4.8M /root
21M /sbin
7.8M /scripts
4.0K /selinux
4.0K /srv
0 /sys
12K /tmp
4.2G /usr
354M /var
1.5M /yum
1.4M /yum-ce5.tar.gz
5.4G total
Где опция -s выводит итоговый объям для кадого аргумента, опция -h пишет нам в удобочитаемом формате, опция -c заканчивает список общей суммой.
Естественно, что проделывать все операции необходимо из под пользователя имеющего права чтения на директории.
При одновременном использовании этих команд, в большистве случаев мы получим разные результаты вывода для каждой из них. Это вызвано различными алгоритмами работы данных утилит, которые следуют из их названий: утилита df считает общий суммарный объем блоков, помеченных в суперблоке файловых систем как свободные, в то время как утилита du исходит из информации об объеме занятом файлами, отправляясь от описания в метаданных.
В связи с тем, что операции файловой системы абсолютно во всех случаях, так или иначе, кэшируются, то довольно часто может возникнуть ситуация, когда файл физически удален, т.е. имя файла удалено из записи каталога, а в карте занятости, освобождение соответствующего пространства еще не произошло, и тогда, как раз, блоки данных будут подсчитываться при использовании df, и будут не учтены в результатах du.
Еще можно посмотреть сколько место занято по дерикториям du -hd 1
(ключик d задает вложенность показа).