Это сервер RHEL, я использую на нем сервер MySQL, файлы базы данных и журнала (однако регистрация отключена) находятся в каталоге /srv где доступно много места.

Недавно у меня был разбитый стол, поэтому я попытался его исправить, но на следующий день я обнаружил, что MySQL не может ответить на многие запросы с ошибкой, указывающей на отсутствие дискового пространства:

ERROR 1030 (HY000): Got error 28 from storage engine

Поэтому я выполнил следующую команду, чтобы увидеть, что занимает пространство

# -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/server-slash 9.9G 9.5G 0 100% / tmpfs 7.8G 0 7.8G 0% /dev/shm /dev/sda1 485M 58M 402M 13% /boot /dev/mapper/server-var 739G 252G 450G 36% /srv

Удивительно, что это каталог / . Но более удивительно то, что в каталогах под / не указывается используемое пространство более 2 ГБ , тогда как df показывает общее пространство 9,9 ГБ для / .

# du -sh /* 7.5M /bin 48M /boot 200K /dev 24M /etc 4.0K /home 223M /lib 21M /lib64 16K /lost+found 4.0K /media 4.0K /mnt 183M /opt ...deleted some file-not-found errors for files under /proc 0 /proc 144K /root 14M /sbin 4.0K /selinux 252G /srv 0 /sys 44K /tmp 917M /usr 259M /var

Итак, почему df показывает неправильные значения? И как я могу узнать, что на самом деле занимает пространство?

2 Solutions collect form web for “Команда df не показывает правильные значения”

Общим методом программирования является создание временного файла и немедленное отключение (). Это оставляет файл (и его пространство) доступным на время работы программы, но автоматически вызывает его удаление, когда программа, использующая его, завершается. Одно из преимуществ заключается в том, что для записи не требуется никакого кода для эпилога (очистки).

Чтобы определить, есть ли у вас процесс, содержащий открытый файл, выполните следующие действия:

Lsof -a +L1 /dev/server_slash

Lsof +D /dev/server_slash +L1

Найдите файлы с нулевым значением NLINK (0). Это будут файлы с нулевым количеством ссылок, которые исчезнут, когда последний процесс завершится. Столбец SIZE / OFFSET предложит размер символа рассматриваемого файла.

1) df не сообщает пространство, зарезервированное для root (по умолчанию 5%) в файловых системах в стиле unix. Поэтому df всегда будет сообщать меньше, чем следовало бы.

2) Однако, я думаю, вы запустили свою базу данных без монтирования srv-partition. Без монтируемого srv-раздела все будет записано в точку монтирования, т.е. в каталог srv в / -разделе. (корневой раздел), тем самым используя очень много места на / -разделе.

Однако, когда вы монтируете srv-раздел в каталоге srv, все файлы в каталоге srv / -partition становятся «скрытыми» разделом, который вы «монтировали поверх», но все же пространство остается но вы не можете увидеть его или получить к нему доступ, чтобы удалить его.

Попробуйте размонтировать srv-partition (перейдите в режим singleuser-moder / runlevel 1 / maintenance, так что все остановлено), убедитесь, что он действительно размонтирован (с mount), и посмотрите, есть ли файлы, скрывающиеся под каталогами, которые вы обычно используете в качестве точек монтирования (usr, srv, home, var, tmp, …) в / -разложении. Готов поспорить, вы обнаружите что-то большое в некоторых из них. Когда вы закончите и перезагрузитесь, убедитесь, что srv-partition на самом деле установлен так, как должен.

Это – то, что вы можете иметь материал в каталогах, которые обычно скрыты монтируемыми разделами, может иногда быть полезным.

В этом руководстве мы будем учиться использовать команду df. Команда df, означает D isk F ree, что означает использование дискового пространства в файловой системе. Она отображает объем дискового пространства, доступного в файловой системе, в системе Linux. Команду DF не следует путать с командой df. Они служит различным целям. Отчеты команды DF, сколько дискового пространства мы имеем (то есть свободное место), тогда как отчеты команды df, это сколько дискового пространства потребляется на файлы и папки. Надеюсь, что мы объяснили вам ясно. Давайте идти вперед и увидеть некоторые практические примеры команды df, так что бы вы могли лучше понять ее.

Учебник по команде df с примерами

1. Вид использования всей файловой системы на диске

Запустите команды без каких-либо аргументов, чтобы отобразить все дисковое пространство файловой системы.

Пример вывода:

Filesystem 1K-blocks Used Available Use% Mounted on dev 4033216 0 4033216 0% /dev run 4038880 1120 4037760 1% /run /dev/sda2 478425016 428790352 25308980 95% / tmpfs 4038880 34396 4004484 1% /dev/shm tmpfs 4038880 0 4038880 0% /sys/fs/cgroup tmpfs 4038880 11636 4027244 1% /tmp /dev/loop0 84096 84096 0 100% /var/lib/snapd/snap/core/4327 /dev/sda1 95054 55724 32162 64% /boot tmpfs 807776 28 807748 1% /run/user/1000

Как вы можете видеть, результат делится на шесть колонок. Давайте посмотрим, что означает каждый столбец.

  • Filesystem – файловая система в системе.
  • 1K-blocks – размер файловой системы, измеренные в 1K блоках.
  • Used – количество используемого пространства в 1К блоках.
  • Available – количество свободного пространства в 1К блоках.
  • Use% – процент использования файловой системы.
  • Mounted on – точка монтирования, где установлена файловая система.

2. Использование файловой системы диска. Отображение в удобочитаемом формате

Как вы заметили, в приведенных выше примерах, использование показывается в 1к блоках. Если вы хотите отобразить их в удобочитаемом формате, используйте флаг -h .

$ df -h Filesystem Size Used Avail Use% Mounted on dev 3.9G 0 3.9G 0% /dev run 3.9G 1.1M 3.9G 1% /run /dev/sda2 457G 409G 25G 95% / tmpfs 3.9G 27M 3.9G 1% /dev/shm tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup tmpfs 3.9G 12M 3.9G 1% /tmp /dev/loop0 83M 83M 0 100% /var/lib/snapd/snap/core/4327 /dev/sda1 93M 55M 32M 64% /boot tmpfs 789M 28K 789M 1% /run/user/1000

Теперь посмотрим на колонки Size и Avail , использование показано в GB и MB.

3. Показать использование дискового пространства только в МБ

Для просмотра использования дискового пространства в файловой системе только в мегабайтах, используйте флаг -m .

$ df -m Filesystem 1M-blocks Used Available Use% Mounted on dev 3939 0 3939 0% /dev run 3945 2 3944 1% /run /dev/sda2 467212 418742 24716 95% / tmpfs 3945 26 3920 1% /dev/shm tmpfs 3945 0 3945 0% /sys/fs/cgroup tmpfs 3945 12 3933 1% /tmp /dev/loop0 83 83 0 100% /var/lib/snapd/snap/core/4327 /dev/sda1 93 55 32 64% /boot tmpfs 789 1 789 1% /run/user/1000

4. Список информации inode вместо использования блока

Мы можем перечислить информацию inode вместо использования блока с помощью флага -i , как показано ниже.

$ df -i Filesystem Inodes IUsed IFree IUse% Mounted on dev 1008304 439 1007865 1% /dev run 1009720 649 1009071 1% /run /dev/sda2 30392320 844035 29548285 3% / tmpfs 1009720 86 1009634 1% /dev/shm tmpfs 1009720 18 1009702 1% /sys/fs/cgroup tmpfs 1009720 3008 1006712 1% /tmp /dev/loop0 12829 12829 0 100% /var/lib/snapd/snap/core/4327 /dev/sda1 25688 390 25298 2% /boot tmpfs 1009720 29 1009691 1% /run/user/1000

5. Отображение типа файловой системы

Чтобы отобразить тип файловой системы, используйте флаг -T .

$ df -T Filesystem Type 1K-blocks Used Available Use% Mounted on dev devtmpfs 4033216 0 4033216 0% /dev run tmpfs 4038880 1120 4037760 1% /run /dev/sda2 ext4 478425016 428790896 25308436 95% / tmpfs tmpfs 4038880 31300 4007580 1% /dev/shm tmpfs tmpfs 4038880 0 4038880 0% /sys/fs/cgroup tmpfs tmpfs 4038880 11984 4026896 1% /tmp /dev/loop0 squashfs 84096 84096 0 100% /var/lib/snapd/snap/core/4327 /dev/sda1 ext4 95054 55724 32162 64% /boot tmpfs tmpfs 807776 28 807748 1% /run/user/1000

Как вы видите, есть дополнительный столбец (второй слева), который показывает тип файловой системы.

6. Отображение только конкретного типа файловой системы

Мы можем ограничить список для определенных файловых систем. например, ext4 . Для этого мы используем флаг -t .

$ df -t ext4 Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda2 478425016 428790896 25308436 95% / /dev/sda1 95054 55724 32162 64% /boot

Увидели? Эта команда показывает только использования дискового пространства файловой системой ext4.

7. Исключить конкретный тип файловой системы

Вы можете исключить конкретную файловую систему из результата. Это может быть достигнуто путем использования флага -x .

$ df -x ext4 Filesystem 1K-blocks Used Available Use% Mounted on dev 4033216 0 4033216 0% /dev run 4038880 1120 4037760 1% /run tmpfs 4038880 26116 4012764 1% /dev/shm tmpfs 4038880 0 4038880 0% /sys/fs/cgroup tmpfs 4038880 11984 4026896 1% /tmp /dev/loop0 84096 84096 0 100% /var/lib/snapd/snap/core/4327 tmpfs 807776 28 807748 1% /run/user/1000

Эта команда покажет использование всех файловых систем, за исключением ext4 .

8. Показать использование для папок

Для отображения доступного дискового пространства и места его подключения к папке, например /home/sk/, используйте следующую команду:

$ df -hT /home/sk/ Filesystem Type Size Used Avail Use% Mounted on /dev/sda2 ext4 457G 409G 25G 95% /

Эта команда показывает тип файловой системы, используемое и доступное пространство в читабельной форме и где она установлена. Если вы не хотите отображать тип файловой системы, просто игнорируйте с помощью флага -t .

Если Вы не следите за оставшимся свободным местом в корневом разделе - то Вас могут ожидать неприятные новости. В случае переполнения данного раздела, важные для Вашего проекта сервисы перестанут работать. Согласитесь, неработающий MySQL или web server скажется на проекте не лучшим образом.

Одним из лучших решений данного вопроса будет использование некоторых утилит, которые помогут Вам определить в чем же проблема, что именно занимает дисковое пространство. Тот момент, когда оно постепенно заполняется, приводит к сложностям проведения анализа данной проблемы. Для этого существует ряд команд, которые помогут Вам провести мониторинг довольно быстро. Чаще всего виновником данной проблемы является «демон» , активно записывающий свои действия в лог файл (привет людям, которые не настраивают ротацию логов, или забывают выключать режим debug в сервисах после отладки).

Поиск самых больших файлов
В такие моменты главная задача - оперативно найти необходимое свободное место. Самый простой метод - использование df вместе с du : #df -h - покажет место по разделам; #du -sh /directory занимаемое место директорией (ключ -s уберет лишний вывод).

Наиболее вероятный виновник - /var/log второй по месту /home/ , дальше идут /backup & /var/www/ . В случае, когда виноват лог web-server"a , достаточно удалить или очистить файл лога. Обратите внимание, что в случаях когда файл держится демоном (лог apache ) для пересчета свободного места стоит дернуть apache , обнулить файл можно следующей командой # echo ‘’ > /var/log/httpd/httpd.log .

Если у Вас возникли некоторые вопросы по общему объему памяти, то Вы можете воспользоваться командой df -h и узнать объем свободного пространства в файловой системе. Итак, начнем:

# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg0-root 53G 44G 6.2G 88% / tmpfs 939M 0 939M 0% /dev/shm /dev/vda1 485M 45M 415M 10% /boot /dev/mapper/vg0-temp 2.0G 75M 1.8G 4% /tmp
Редким является вариант, когда df -h показывает свободных 88% в разделе, но создание файла невозможно. В таком случае стоит использовать df с ключом -i , команда # df , вызванная с данным ключом покажет значение свободных inode для файловой системы.

# df -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/mapper/vg0-root 3506176 320241 3185935 10% / tmpfs 240295 1 240294 1% /dev/shm /dev/vda1 128016 44 127972 1% /boot /dev/mapper/vg0-temp 131072 275 130797 1% /tmp
Добавив ключ -l (local) - Вам выведутся данные только о локально-смонтированных файловых системах:

# df -hl Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg0-root 53G 44G 6.2G 88% / tmpfs 939M 0 939M 0% /dev/shm /dev/vda1 485M 45M 415M 10% /boot /dev/mapper/vg0-temp 2.0G 75M 1.8G 4% /tmp
Используя команду sort , Вы сортируете строки, входящие во все исходные файлы. Если имена файлов не указаны, или в качестве файла указан - , исходная информация поступает со стандартного ввода. Добавив опцию -n (числовое сравнение) с помощью которой сначала отбрасываются начальные пробелы, затем цифровые цепочки символов, содержащие быть может знак минус и десятичную точку, Вы получаете следующий результат:

# df -hl | sort -n /dev/mapper/vg0-root 53G 45G 5.9G 89% / /dev/mapper/vg0-temp 2.0G 75M 1.8G 4% /tmp /dev/vda1 485M 45M 415M 10% /boot Filesystem Size Used Avail Use% Mounted on tmpfs 939M 0 939M 0% /dev/shm
С помощью утилиты du (disk used) Вы получаете отчет об использовании дискового пространства заданными файлами, а также каждым каталогом иерархии подкаталога каждого указанного каталога. Если Вы запустили команду без аргументов, то команда du выдает отчет о дисковом пространстве для текущего каталога.

# du 8 ./.config/htop 12 ./.config 5056 ./.xmlcache/ispmgr/checked 15048 ./.xmlcache/ispmgr 752 ./.xmlcache/core/checked 4440 ./.xmlcache/core 1088 ./.xmlcache/ispmgrnode/checked 6780 ./.xmlcache/ispmgrnode 26284 ./.xmlcache 20 ./.ssh 168 ./.gem/specs/api.rubygems.org%443/quick/Marshal.4.8 172 ./.gem/specs/api.rubygems.org%443/quick 8376 ./.gem/specs/api.rubygems.org%443 8380 ./.gem/specs 8384 ./.gem 8 ./.spamassassin 4 ./.mc/cedit 32 ./.mc 12 ./mod
Добавив параметр - - time Вы получите вывод данных с указанным временем модификации.

# du --time . | sort -k2 | tail -5 5056 2015-07-29 17:11 ./.xmlcache/ispmgr/checked 20 2015-09-03 18:04 ./.ssh 4 2015-10-15 12:42 ./test 32 2015-10-20 19:38 ./.mc 1245816 2015-11-06 13:50 .
Вы также можете запустить поиск больших файлов, используя команду find :

# find . -size +1M -ls | sort -n -k7 15089762 1264 -rw-r----- 1 shs staff 1289365 Feb 24 2015 ./bin/235.log 12731834 1724 -rw-r----- 1 shs staff 1761280 Oct 15 2015 ./bin.tar 13320206 2192 -rw------- 1 shs staff 2239058 Dec 8 2015 ./mail/lab7 13320203 6308 -rw------- 1 shs staff 6443348 Oct 26 2015 ./mail/lab6 12731744 19736 -rw-r----- 1 shs staff 20183040 Jul 29 2015 ./backup.tar
Удобная утилита для общей оценки занимаемого места и очистки уже неактуальных данных ncdu - предоставляет псевдографический интерфейс, и удобную навигацию. Из минусов: не подходит для экстренных ситуаций описанных вначале статьи, т.к. ncdu сначала подсчитывает весь объем файлов указанного диска (директорий), и только собрав требующую информацию, выдает результат, с которым можно работать.

P.S. Мы проводим акцию специально для читателей Хабра.