Объём диска на тарифе хостинга ограничен, и заполняется он обычно незаметно. Однажды вы видите в панели, что занято 90 процентов, хотя ничего крупного на сайт вроде бы не загружали. На деле место чаще всего съедают несколько невидимых «пожирателей»: забытые архивы резервных копий, разросшиеся журналы, распакованные старые копии сайта. Вместо того чтобы искать их наугад, можно точно найти их парой команд. Ниже — порядок действий шаг за шагом.
Сверху вниз: поиск по папкам
Самый эффективный способ — начать с домашнего каталога, найти самую тяжёлую папку и спускаться в неё уровень за уровнем. Для этого используется команда du. Команда ниже покажет размер каждой папки первого уровня в домашнем каталоге и отсортирует их от меньшей к большей:
cd ~
du -xh -d 1 2>/dev/null | sort -h
Параметр -x не даёт переходить на другие файловые системы, а -d 1 ограничивает глубину одним уровнем. Последняя строка списка — самая тяжёлая папка. Заходите в неё, повторяете команду и так добираетесь до виновника. Например, если самой большой оказалась папка www, следующий шаг — проверить конкретный сайт:
du -xh -d 1 ~/www/example.uz 2>/dev/null | sort -h | tail -10
На сайтах WordPress наверх обычно выходят wp-content/uploads и папки плагинов резервного копирования внутри wp-content. В других системах много места занимают журналы и кеш.
Ищем самые большие файлы напрямую
Иногда удобнее не ходить по папкам, а сразу увидеть самые большие файлы всего аккаунта одним списком. Команда ниже находит файлы больше 50 МБ и выводит 20 самых крупных в удобочитаемом виде:
find ~ -xdev -type f -size +50M -printf '%s\t%p\n' 2>/dev/null \
| sort -n | tail -20 | numfmt --field=1 --to=iec
Обычно лишнее видно сразу: backup-2024.zip, old-site.tar.gz, error_log на несколько гигабайт. Если на сервере нет numfmt, уберите последнюю часть — размеры будут показаны в байтах.
Кто обычно занимает место
Архивы резервных копий и дампы базы
Самая частая ситуация — копии, оставленные прямо внутри сайта. Архив, созданный при переезде, ежедневные копии плагина или вручную выгруженный дамп базы месяцами лежат и никем не удаляются. Их удобно искать по типу файла:
find ~ -xdev -type f \( -name '*.zip' -o -name '*.tar.gz' -o -name '*.sql' \
-o -name '*.sql.gz' -o -name '*.wpress' \) -printf '%s\t%p\n' 2>/dev/null \
| sort -n | numfmt --field=1 --to=iec
Расширение .wpress принадлежит архивам плагина All-in-One WP Migration. Скачайте последнюю нужную копию на компьютер, остальные удалите. Важно помнить: копия, которая хранится рядом с сайтом, пропадёт вместе с ним при проблеме на сервере, так что полноценной защиты она не даёт.
Разросшиеся журналы
PHP часто пишет ошибки в файл error_log в той папке, где лежит скрипт. Если на сайте постоянно повторяется какое-то предупреждение, такой файл за несколько месяцев дорастает до гигабайтов, причём таких файлов может быть много в разных папках. Найти все сразу можно так:
find ~/www -type f -name 'error_log' -size +5M -printf '%s\t%p\n' \
| sort -n | numfmt --field=1 --to=iec
Прежде чем удалять журнал, посмотрите его последние строки командой tail -50 error_log: там часто видна настоящая ошибка сайта. Если её не исправить, файл снова вырастет. Безопаснее не удалять файл, а обнулить его командой : > error_log.
Скрытые папки
Папки, имя которых начинается с точки, не видны в обычном списке, но место занимают. Composer, npm или pip хранят свой кеш в ~/.cache, ~/.npm или ~/.composer, и он может достигать сотен мегабайт:
du -sh ~/.[!.]* 2>/dev/null | sort -h
Эти кеш-папки удалять безопасно: инструменты создадут их заново, когда понадобится. Не трогайте только папки с настройками вроде .ssh.
Пример: школьный сайт и видеоуроки
Сайт частной школы в Самарканде на example.uz — обычный WordPress с новостями и расписанием. За месяц диск оказался заполнен. Поиск через du привёл в wp-content/uploads, а уровнем ниже, в папке текущего месяца, нашлись видеоуроки на несколько гигабайт, которые учителя загружали прямо в медиатеку. Чтобы найти крупные файлы, загруженные за последнюю неделю, использовали такую команду:
find ~/www -xdev -type f -size +20M -mtime -7 -printf '%TY-%Tm-%Td %s\t%p\n' \
| sort
В итоге видео разместили на видеохостинге, на сайт вставили только плеер, а исходные файлы с хостинга удалили. Это не только освободило диск, но и ускорило загрузку страниц, ведь раздача больших видео через обычный хостинг сильно нагружает сервер.
Что можно удалять, а что трогать нельзя
Перед удалением каждого найденного файла разберитесь, что это такое. Папки кеша, старые журналы, распакованные архивы и старые копии сайта обычно удаляются безопасно. А вот изображения в wp-content/uploads, файлы базы данных, почтовые ящики и конфигурационные файлы — часть сайта, и бездумное удаление его сломает. Если сомневаетесь, сначала скачайте файл на компьютер или переименуйте его и понаблюдайте несколько дней.
Даже без SSH размер папок можно посмотреть в файловом менеджере панели хостинга, хотя на больших аккаунтах это медленнее. Клиенты sayt.uz открывают панель из личного кабинета и видят там статистику диска, а вопросы о доступе по SSH или объёме тарифа можно задать технической поддержке. Если раз в месяц проходить по диску в таком порядке, неожиданная ошибка «диск заполнен» вам не грозит.