База знаний

Работа с объемом диска в LINUX команды df и du

  • 0

Работа с объемом диска в 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 задает вложенность показа).


Помог ли вам данный ответ?