Я пытаюсь отследить, куда ушло все место на моем жестком диске. У меня есть 1 ТБ общего пространства, и, согласно моей системе, использовано 433 ГБ. Однако я знаю, что у меня их больше, поскольку у меня нет больших файлов или папок, о которых я знаю. Ниже показаны 10 лучших каталогов.
du -cks *|sort -rn|head
В нем говорится, что папка / var занимает 480 ГБ, но когда я захожу в эту папку, нет ничего значительного (я запускаю это из root или с разрешениями '/' w / su).
Что мне не хватает? Есть ли какие-нибудь скрытые файлы, которые этот код не распознает? Для справки, я использую opensuse 11.3, если это дает различие.
Если вы выполняете рекурсивное du, как предлагается, и вычисляете все пространство для всего дерева var, и оно не складывается в используемое общее количество, вы можете проверить несвязанный дескриптор файла, который остался открытым. Это может произойти из-за неправильных сценариев logrotate, которые удаляют или перемещают журнал, в который все еще ведется запись. Вы отсоединяете файл (удаляете индексный дескриптор, поэтому ls больше не сообщает об этом), но процесс все еще записывает в него.
lsof обычно не является стандартной установкой, поэтому вам придется установить его любыми способами, которые использует OpenSuse, а затем запустить: lsof +L -a /var
Вы увидите результат вроде
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME
httpd 32287 apache 14w REG 253,7 3020256 1 121 /var/log/httpd/access_log
Будет отображаться много файлов, но вы ищете тот, который имеет большое значение в столбце размера и 0 в столбце NLINK (и не помечен как удаленный). Этот файл все еще записывается, но больше не связан.
Затем вы можете исправить это, завершив процесс, в котором открыт дескриптор несвязанного файла.
Все это означает, что вы не нашли файлы, в которых используется все пространство. Найти его будет тривиально, потому что если du
находит его на верхнем уровне, а затем находится в файловой системе.
Если du -s /directory
показывает использованное пространство, но du -s /directory/*
нет, значит проблема в скрытых ("начинается с.") файлах или каталогах непосредственно в /directory
. Если есть несоответствие между df
и du
(больше, чем можно объяснить разницей в округлении), то вы удалили, но не выпустили файлы, занимающие место.
Quanta, ваш ответ помог мне это закрепить ... оказалось, что это была папка / var / lib / mysql ... теперь мне нужно выяснить, что делать с этим ...
Вы использовали репликацию MySQL? Если так, возможно, двоичные журналы заполняют ваш жесткий диск. Его можно удалить автоматически, установив expire_logs_days
из mysql>
Подсказка:
mysql> set global expire_logs_days = 7;
(также измените my.cnf
сделать его постоянным)
Вы должны установить его не ниже максимального количества дней, на которое ваши подчиненные устройства могут отставать от главного.
Если не, продолжаем проверку всех баз данных в /var/lib/mysql
.
У вас есть что-нибудь смонтированное ниже / var?
Данные могут быть скрыты «под» точкой монтирования.
mkdir /var/test
dd if=/dev/zero of=/var/test/data.dat bs=1M count=16
Теперь смонтируйте что-нибудь в / var / test - вы не увидите, где находятся недостающие 16 МБ.