Мастерская iPloGic
+7 (926) 961-66-26

 — База знаний — Как узнать что занимает место на диске через ssh

Как узнать что занимает место на диске через ssh

Зачастую мы получаем от хостера сообщение о том, что место на диске исчерпано. Обычно это происходит не из-за того, что пользователи действительно выложили на сайт много информации, а из-за разрастания каких-либо служебных файлов за которыми редко кто следит постоянно, пока они не станут проблемой. Так как же найти директорию или файл, который занял все место на диске?

Через файлмэнеджеры это сделать крайне проблематично. Они не показывают полный размер всех файлов и поддиректорий папки. Поэтому можно часами просматривать файлы в разветвленной структуре директорий сервера. Есть путь быстрее. Используем для этого ssh.

Открываем консоль (например, PuTTY или любую другую) и заходим на наш сервер. Вводим две команды:

# cd /
# du -h --max-depth=1

То есть сначала мы переходим в корень сервера, а затем командой du запрашиваем список папок с указанием размера. Причем размер папок здесь указывается рекурсивно, то есть с учетом всех поддиректорий и файлов. Ключ -h нужен для того, чтобы информация была выведена в удоботворимом для чтения виде, а --max-depth=1 нужен для того, чтобы были показаны папки только первого уровня. Без этого ключа будут показаны все директории сервера и понять что-либо будет невозможно.

Получаем результат, что-то вроде:

52M     ./etc
4.0K    ./lost+found
976M    ./var
22M     ./lib64
7.3M    ./sbin
41M     ./boot
1.1G    ./usr
6.4M    ./bin
295M    ./lib
8.0K    ./selinux
1.6M    ./opt
4.0K    ./mnt
du: cannot access `./proc/851/task/851/fd/4': No such file or directory
du: cannot access `./proc/851/task/851/fdinfo/4': No such file or directory
du: cannot access `./proc/851/fd/4': No such file or directory
du: cannot access `./proc/851/fdinfo/4': No such file or directory
0       ./proc
4.0K    ./media
28M     ./root
0       ./sys
8.2M    ./tmp
17G     ./home
4.0K    ./dev
4.0K    ./srv
20G     .

Здесь мы видим размер каждой из папок. Последняя цифра общий объем информации хранящейся сейчас на сервере. На ошибки чтения не обращаем внимания, сейчас там ничего интересного для нас нет. Ищем самые тяжелые папки. В нашем случае это ./usr и ./home. Конечно же ./home занимает подавляющее количество места на диске. Начинаем с нее. Делаем:

# cd home
# du -h --max-depth=1<span class="redactor-invisible-space">

Получаем такой же список папок, как показано выше, но уже внутри папки home. Ищем самые большие директории в ней. Повторяем то же самое для них. И так до тех пор, пока не найдем злосчастную директорию, где хранится занявшая все место на сервере информация. Далее, при наличии соответствующих знаний, прямо через консоль или через обычный файлменеджер чистим эту директорию.

Конечно, стоит напомнить, что не надо бездумно стирать файлы, которые занимают место. Надо разобраться в причинах. Например, если лог ошибок за месяц разросся до 10G, то это повод задуматься что не так, даже если все работает нормально.

Если вы не просто хотите восстановить работу сервера, а "капитально убраться" на нем, то проделайте указанную выше процедуру несколько раз, пока не убедитесь, что место занимают нужные файлы.

Возможно бывалые программисты упрекнут в том, что способ крайне примитивен, все можно сделать проще и быстрее, есть специальные приложения. Я это пишу для тех кто столкнулся с проблемой первый раз. Вы это и так знаете. Зачем путать людей лишней информацией. Нужно помнить, что все описанное выше сработает ВСЕГДА, даже если сервер забит до последнего байта и не доступен больше не через что кроме ssh.

24.11.2016