Команда df не показывает правильные значения

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

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

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

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

 [root@tms /]# df -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 ГБ для / .

 [root@tms /]# 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 показывает неправильные значения? И как я могу узнать, что на самом деле занимает пространство?

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

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

 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 на самом деле установлен так, как должен.

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