Назад | Перейти на главную страницу

Я знаю, что у меня больше свободного места

Я пытаюсь отследить, куда ушло все место на моем жестком диске. У меня есть 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 МБ.