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

Сервер CentOS - доступное дисковое пространство постоянно падает

Результат команды df:

Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda2      864000688 809338092  10773908  99% /
tmpfs           32965940         0  32965940   0% /dev/shm
/dev/sda1         198337     87394    100703  47% /boot

Результат команды df через несколько секунд:

Filesystem     1K-blocks      Used Available Use% Mounted on
/dev/sda2      864000688 809400076  10711924  99% /
tmpfs           32965940         0  32965940   0% /dev/shm
/dev/sda1         198337     87394    100703  47% /boot

Я теряю дисковое пространство на своем сервере с невероятной скоростью. И каждый раз, когда доступное пространство достигает 0 октетов, происходит сбой службы Mysql.

у меня уже есть reboot сервер, чтобы очистить dmesg logs, я удалил все большие файлы журналов (журналы ошибок, журналы сообщений и журналы named.run) и запустил этот запрос: sudo /usr/sbin/lsof | grep deleted.

Однако освободившееся пространство было съедено днем.

Итак, я выполнял такие запросы, как:

du -hsx * | sort -rh | head -15

и это :

find . -type d -print0 | xargs -0 du | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {

Во всех каталогах из моего корневого каталога.

Но самый большой файл, который я смог найти, - это дамп из моей базы данных, и это файл размером всего 1 ГБ:

-rw-r--r-- 1 root root 1032237681  6 déc.   2013 dump_experta2.sql
-rw-r--r-- 1 root root  389789251  6 déc.   2013 dump_experta.sql

Можете ли вы объяснить мне, почему доступное пространство, кажется, используется некоторыми невидимыми файлами? И как я могу локализовать и остановить утечку дискового пространства?

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

Я побежал find / -mindepth 1 -maxdepth 1 -print0 |xargs -0 du -s

И получил такой результат:

1216308 /usr
23356   /lib64
73176   /root
440     /tmp
4       /selinux
4       /command
5574820 /var
4       /media
16      /lost+found
352388  /lib
8       /opt
0       /.autorelabel
4       /service
0       /sys
36500   /www
0       /proc
81785   /boot
7760    /bin
160     /dev
742949400       /home
14572   /sbin
0       /currentsize
0       /.autofsck
2092    /package
4       /srv
4       /mnt
27676   /etc
72944   /test

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

# find /home -mindepth 1 -maxdepth 1 -print0 |xargs -0 du -s
133952  /home/advisio
16      /home/dovecot
2210824 /home/vpopmail
186500  /home/admin
37152   /home/ginger
511121816       /home/user1
229278612       /home/user2

И я повторил процесс и увидел, что данные user1 выросли, поэтому я продолжил поиск в каталоге user1 и нашел эти два тяжелых каталога:

281766156       /home/user1/www/log
207269420       /home/user1/www/fichiers

Размер каталога "fichiers" не является необычным, поскольку он используется для хранения бесчисленных файлов pdf и изображений. Я посмотрел на папку журнала и нашел следующее:

# ls -l
-rwxrwxrwx 1 vroom users 288586156425  2 juil. 15:34 log-sql-error.txt

Я понял, что то, что вы сказали о моем методе поиска, было невероятно правильным. Мне удается пропустить файл журнала размером 288 ГБ из-за поиска журналов в неправильных каталогах.

В любом случае я остановил httpd и mysqld services, очистил журнал ошибок, и вот теперь мой df:

Filesystem     1G-blocks  Used Available Use% Mounted on
/dev/sda2           824G  505G      278G  65% /
tmpfs                32G    0G       32G   0% /dev/shm
/dev/sda1             1G    1G        1G  47% /boot

А пока я воспользуюсь вашими советами, когда буду искать тяжелые файлы и папки. Спасибо!

Первое: последовательность find . -type d -print0 | xargs -0 du | sort -n невероятно рекурсивен и неэффективен.
Нахождение самые большие файлы, с участием find / -type f -print0 | xargs -0 du | sort -n уже намного лучше с find / -type f -printf "%s %p\n" |sort -n еще эффективнее.

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

Во-вторых: когда ты бежал find "во всех каталогах из моего корневого каталога" возможно, вы пропустили «скрытые» файлы / каталоги в корневом каталоге / т.е. простые, начинающиеся с точки /.<name> и менее очевидные, например, состоящие только из пробела / / или символ TAB.

Начать с:

find / -mindepth 1 -maxdepth 1 -print0 |xargs -0 du -s 

и пройдите свой путь вниз от этого.

Вы уже просмотрели удаленные файлы, которые могут оставаться открытыми с помощью lsof но у вас могут быть процессы, записывающие большие (временные) файлы, и было бы интересно и полезно посмотреть sudo lsof -s | awk '$5 == "REG"' | sort -n -r -k 7,7 | head -n 50

В будущем используйте такой инструмент, как ncdu для отображения использования вашей файловой системы. Вы бы очень легко обнаружили проблему с файлом журнала.