Итак задача простая, имея в руках обычную консоль сервера или компьютера (иными словами терминал) узнать сколько свободно и занято места на подключенных файловых системах, а так же сколько занимает места определённый файл или каталог.

Для решения описанных выше задач вам пригодятся как минимум 3 командочки:

1) Команда ls.

Чтобы узнать размер фалов можно воспользоваться командой листинга ls с параметром -l

dkplayer@dkplayer-x:~$ ls -l
итого 4124
-rw-r--r-- 1 dkplayer dkplayer 370 2009-07-09 09:17 adsense
-rw-r--r-- 1 dkplayer dkplayer 1344 2009-02-09 21:09 archive.key
drwxr-xr-x 2 dkplayer dkplayer 4096 2009-07-03 16:41 bin
-rw-r--r-- 1 dkplayer dkplayer 6 2009-06-08 14:15 c7200_i0_lock
-rw-r--r-- 1 dkplayer dkplayer 0 2009-06-08 14:15 c7200_i0_log.txt
drwxr-xr-x 6 dkplayer dkplayer 4096 2009-06-16 17:10 Cisco
drwxr-xr-x 2 dkplayer dkplayer 4096 2009-06-05 00:32 Desktop
drwxr-xr-x 7 dkplayer dkplayer 4096 2009-07-08 17:06 Downloads
drwxr-xr-x 2 dkplayer dkplayer 4096 2009-07-09 15:09 errorlogs
-rw-r--r-- 1 dkplayer dkplayer 357 2009-06-04 16:51 examples.desktop
drwxr-xr-x 9 dkplayer dkplayer 4096 2009-06-16 10:58 from_book
drwxr-xr-x 3 dkplayer dkplayer 4096 2009-06-09 16:11 scripts
-rw-r--r-- 1 dkplayer dkplayer 131572 2009-06-16 10:30 test1.gif
-rw-r--r-- 1 dkplayer dkplayer 1989190 2009-07-06 16:41 test.gf.zip
-rw-r--r-- 1 dkplayer dkplayer 2004817 2009-06-16 10:21 test.gif
drwxr-xr-x 3 dkplayer dkplayer 4096 2009-06-05 00:30 zimbra
drwxr-xr-x 13 dkplayer dkplayer 4096 2009-07-08 17:06 Видео
drwxr-xr-x 3 dkplayer dkplayer 4096 2009-06-16 15:08 Документы
drwxr-xr-x 2 dkplayer dkplayer 4096 2009-06-30 15:30 Картинки
drwxr-xr-x 4 dkplayer dkplayer 4096 2009-06-16 12:21 Музыка
drwxr-xr-x 2 dkplayer dkplayer 4096 2009-06-15 10:06 Общедоступная
drwxr-xr-x 2 dkplayer dkplayer 4096 2009-07-07 14:33 Рабочий стол
drwxr-xr-x 2 dkplayer dkplayer 4096 2009-06-04 23:06 Шаблоны

5-е поле как раз выдаёт размер фала. Для каталогов он всегда равен 4096. Кстати используя параметр -h можно выводить размер в удобочитаемом виде, т.е. не в байтах, а в килобайтах, мегабайтах и т.д. Размер будет суммироваться автоматически!

dkplayer@dkplayer-x:~$ ls -lh
итого 4,1M
-rw-r--r-- 1 dkplayer dkplayer 370 2009-07-09 09:17 adsense
-rw-r--r-- 1 dkplayer dkplayer 1,4K 2009-02-09 21:09 archive.key
drwxr-xr-x 2 dkplayer dkplayer 4,0K 2009-07-03 16:41 bin
-rw-r--r-- 1 dkplayer dkplayer 6 2009-06-08 14:15 c7200_i0_lock
-rw-r--r-- 1 dkplayer dkplayer 0 2009-06-08 14:15 c7200_i0_log.txt
drwxr-xr-x 6 dkplayer dkplayer 4,0K 2009-06-16 17:10 Cisco
drwxr-xr-x 2 dkplayer dkplayer 4,0K 2009-06-05 00:32 Desktop
drwxr-xr-x 7 dkplayer dkplayer 4,0K 2009-07-08 17:06 Downloads
drwxr-xr-x 2 dkplayer dkplayer 4,0K 2009-07-09 15:09 errorlogs
-rw-r--r-- 1 dkplayer dkplayer 357 2009-06-04 16:51 examples.desktop
drwxr-xr-x 9 dkplayer dkplayer 4,0K 2009-06-16 10:58 from_book
drwxr-xr-x 3 dkplayer dkplayer 4,0K 2009-06-09 16:11 scripts
-rw-r--r-- 1 dkplayer dkplayer 129K 2009-06-16 10:30 test1.gif
-rw-r--r-- 1 dkplayer dkplayer 1,9M 2009-07-06 16:41 test.gf.zip
-rw-r--r-- 1 dkplayer dkplayer 2,0M 2009-06-16 10:21 test.gif
drwxr-xr-x 3 dkplayer dkplayer 4,0K 2009-06-05 00:30 zimbra
drwxr-xr-x 13 dkplayer dkplayer 4,0K 2009-07-08 17:06 Видео
drwxr-xr-x 3 dkplayer dkplayer 4,0K 2009-06-16 15:08 Документы
drwxr-xr-x 2 dkplayer dkplayer 4,0K 2009-06-30 15:30 Картинки
drwxr-xr-x 4 dkplayer dkplayer 4,0K 2009-06-16 12:21 Музыка
drwxr-xr-x 2 dkplayer dkplayer 4,0K 2009-06-15 10:06 Общедоступная
drwxr-xr-x 2 dkplayer dkplayer 4,0K 2009-07-07 14:33 Рабочий стол
drwxr-xr-x 2 dkplayer dkplayer 4,0K 2009-06-04 23:06 Шаблоны

2) Команда df.

Эта команда выводит размер, а так же свободное и занятое место на всех смонтированных (подключенных) файловых системах.

dkplayer@dkplayer-x:~$ df
Файловая система 1K-блоков Исп Доступно Исп% смонтирована на
/dev/sda6 151676932 121729460 22242700 85% /
tmpfs 1030732 0 1030732 0% /lib/init/rw
varrun 1030732 304 1030428 1% /var/run
varlock 1030732 0 1030732 0% /var/lock
udev 1030732 144 1030588 1% /dev
tmpfs 1030732 168 1030564 1% /dev/shm
lrm 1030732 2192 1028540 1% /lib/modules/2.6.28-13-generic/volatile
/dev/sda5 180639 26059 144943 16% /boot

Так же как и ls программа может по ключу -h выводить размер в удобочитаемом виде.

dkplayer@dkplayer-x:~$ df -h
Файловая система Разм Исп Дост Исп% смонтирована на
/dev/sda6 145G 117G 22G 85% /
tmpfs 1007M 0 1007M 0% /lib/init/rw
varrun 1007M 304K 1007M 1% /var/run
varlock 1007M 0 1007M 0% /var/lock
udev 1007M 144K 1007M 1% /dev
tmpfs 1007M 168K 1007M 1% /dev/shm
lrm 1007M 2,2M 1005M 1% /lib/modules/2.6.28-13-generic/volatile
/dev/sda5 177M 26M 142M 16% /boot

3) Команда du.

Последня команда в этом небольшом обзоре позволяет посчитать размер отдельных файлов или каталогов. Команда может как выводить размер по каждому файлу в указанном пути, так и суммировать размер всего каталога (ключик -s) со всеми вложенными файлами и подкаталогами. Это удобно например чтобы посчитать сколько занимает места тот или иной каталог. Как и две предыдущие команды в команде du присутствует ключик -h для того чтобы отображать размер в удобочитаемом виде.


dkplayer@dkplayer-x:~$ du Документы/
71064 Документы/lessons/Internet/Yandex
71068 Документы/lessons/Internet
378888 Документы/lessons/ucoz/reg_2.0
378892 Документы/lessons/ucoz
449964 Документы/lessons
449972 Документы/
dkplayer@dkplayer-x:~$ du -h Документы/
70M Документы/lessons/Internet/Yandex
70M Документы/lessons/Internet
371M Документы/lessons/ucoz/reg_2.0
371M Документы/lessons/ucoz
440M Документы/lessons
440M Документы/
dkplayer@dkplayer-x:~$ du -sh Документы/
440M Документы/

Напоследок небольшая демонстрация работы команд df и du.

4) Приложение говорит «cannot write blah to hdd, not enough space»

Нередко случается такое, что приложение говорит «cannot write blah to hdd, not enough space», хотя df -h говорит, что места ещё много. 

Чаще всего такое поведение случается в трех случаях:
0) вы не туда смотрите df-ом
1) кончились inodes на диске
2) какой-то из демонов держит удаленные файлы.

Давайте поподробнее. Про нулевой случай всё понятно — приложение пытается записать в /var, он у вас смонтирован отдельным разделом, а вы смотрите на место в корне. Или такая же фигня с каким-нибудь /dev/shm, /run или любым другим tmpfs. В том числе и с самим /tmp — он из-за разных глюков может смонтироваться с размером в несколько килобайт.
Also, «не туда» может возникнуть по причине того, что вы смонтировали новый раздел в не пустой каталог. Например, у вас стало заканчиваться место в /var, вы подключили новый hdd, скопировали всё, смонтировали новый hdd в /var. Логично, что место в «старом» /var (который был частью корневого раздела и ею остаётся на физическом уровне) не освободится и вы никак не узнаете, что у вас там лежит ещё 50 гб хлама, который вы не сможете увидеть, пока не отмонтируете новый /var и не удалите файлы явно.

Про inodes тоже понятно. Если у вас много-много мелких файлов, то inodes будут кончаться сильно быстрее, чем место на диске. Каждый файл будет кушать хотя бы одну inode. Если количество inodes меньше, чем блоков на диске — то они закончатся быстрее, чем свободное место (т.е. блоки).
Починить на лету это сложно (ну кроме как удалением той самой кучи мелких файлов). На типовом стеке LAMP-ы это случается чаще всего из-за файлов сессий (если вы их вынесли куда то из /var/lib/php5 и не настроили чистку нового каталога по крону) или из-за битриксов — небольшой сайт на битриксе с включенным кешированием скушает вам 300-400k inodes (а на digitalocean вам на виртуалке за 5 баксов дают 2kk inodes). Большой сайт на битриксе влегкую кушает 2-3kk inodes и не давится.

Проверить, сколько у вас inodes

Проверить, сколько у вас inodes свободно можно командой df -i:

root@server:~# df -i
Filesystem  Inodes  IUsed   IFree  IUse%  Mounted on
rootfs      1966080 1966079 1      100%   /
...

IFree — целая одна. Нужно чистить (удалять мелкие файлы). Ну или просто большие файлы, но это будет куда менее эффективно.

Ну и второй вариант — самый непонятный. df говорит, что места нет, df -i говорит, что inodes есть, du -h / говорит, что файлы занимают меньше половины всего места, блаблабла, куда делось место — непонятно. Возможная причина — ниже.

Когда вы удаляете файлы, используемый в данный момент запущенным приложением, файл не удаляется вообще — только стирается его inode и файл больше не видно в ls. То есть, если вы удалите 100G-овый /var/log/syslog не останавливая syslog — то место не освободится, а syslog продолжит писать в файл по старому адресу (при этом посмотреть этот файл штатными средствами системы вы уже не сможете, так как ни один новый процесс уже не сможет обратиться к этому файлу).
Проверяется такое очень легко — командой lsof | grep deleted:

root@server:~# lsof | grep deleted
syslog-ng 196 root 14w REG 252,2 8082186240 1704154 /var/log/syslog (deleted)
syslog-ng 196 root 20w REG 252,2 14302392320 1708519 /var/log/mail.log (deleted)
syslog-ng 196 root 25w REG 252,2 14302023680 1708509 /var/log/mail.info (deleted)
syslog-ng 196 root 26w REG 252,2 14301499392 1709839 /var/log/mail.warn (deleted)
mysqld 582 mysql 4u REG 252,2 0 1707925 /tmp/ib9mkQir (deleted)
mysqld 582 mysql 5u REG 252,2 215 1708488 /tmp/ib5CiO9t (deleted)
mysqld 582 mysql 6u REG 252,2 0 1709769 /tmp/ibLxoM0w (deleted)
mysqld 582 mysql 7u REG 252,2 0 1709868 /tmp/ibRdFsTz (deleted)
mysqld 582 mysql 11u REG 252,2 0 1709877 /tmp/ibJklN0D (deleted)

Здесь мы хорошо видим, что файлы, которые используют syslog-ng и mysqld, удалили, но демоны всё ещё висят над этими файлами и пишут в них.
«Починить место» в данном случае можно так:

root@server:~# /etc/init.d/mysql stop; /etc/init.d/mysql start
root@server:~# /etc/init.d/syslog-ng stop; /etc/init.d/syslog-ng start

Само собой, если у вас там другие процессы в первом столбце — то перезапускать нужно их.

 

 

 Истоник: showmehow.ru, debian.pro