Как определить, какие файлы занимают 80% пространства на веб-сервере Linux?

Драйв постоянно наполняется. Вы выследили все запасные и случайные файлы, которые можете. grep'd для coredump файлов и даже удалил некоторые ненужные резервные копии...

Каким будет ваш следующий ход.

На рассматриваемом сервере имеется 10 ГБ файлов веб-сайта, а ОС не должна занимать более 10 ГБ, так как же вы отследите, что заполняет 50 ГБ (виртуальный) диск?

11 ответов

Решение

Я считаю, что ncdu ( http://dev.yorhel.nl/ncdu) может быть очень полезным для этого.

Конечно, есть более сложные способы, но я помню,

du -max-глубина =1 -ч /

Теперь возьмите каталог, который занимает больше всего места (du --max-depth=1 -h /yourdir) и идите глубже, пока не найдете своего виновника.
Если вы хотите, чтобы ваш вывод был отсортирован по размеру и вам не нужен читабельный формат, вы также можете сделать du --max-depth=1 /your_dir | sort -n

Я использую программу Gnome Baobab. Вы можете запустить это на своем рабочем столе, и вы можете подключиться через SSH к серверу. Он показывает легко читаемую графическую карту использования дискового пространства. Он установлен под Gnome как "Анализатор использования диска"

Дайте gt5 попробовать.

df -k показывает, какие fs являются проблемой. Затем перейдите на верхний уровень dir и запустите du -xk | сортировать -n | tail -25 это покажет верхнюю 25 dir, отсортированную, для sun 9 или ранее, замените x на d.

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

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

Ниже приведена гораздо более полезная команда, которая выводит список самых больших папок в формате . Вы можете заменить/homeс/также.

      sudo du -a --max-depth=2 --human-readable --time --exclude=.* /home 2>/dev/null | sort --human-numeric-sort --reverse | head -n 15

Самое замечательное в приведенной выше команде то, что она будет рекурсивно работать только до двух уровней, поэтому вы устраняете много шума.

Если вы можете запустить программное обеспечение в системе, то xdiskusage графически покажет вам, какие каталоги / файлы занимают ваше место. Очень полезно.

Я считаю, что KDE содержит нечто подобное.

Если это только текст и вы не можете установить дополнительное программное обеспечение, du вероятно, приведет вас туда.

Вот кое-что, что я собрал вместе, чтобы отследить некоторые мошеннические процессы на наших серверах баз данных: rabbitfinder

#!/bin/sh
tree -s -f > /tmp/out1 && sleep 5 && tree -s -f > /tmp/out2; diff /tmp/out1 /tmp/out2 | egrep "\|--" | awk -F[ '{print $2}' | awk -F] '{print $2 }' | sort | uniq | xargs fuser -f | xargs ps -lFp

это довольно круто и не очень надежно, но работает так:

  1. создать рекурсивный список дерева текущего каталога
  2. подождите 5 секунд
  3. создать другой список
  4. сравнить два выхода
  5. закрепить файлы, которые изменили размер и
  6. ps -lFp покажет файлы, какой процесс им принадлежит

    user@poseidon:~$ tree -s -f > /tmp/out1 && sleep 5 && tree -s -f > /tmp/out2; diff /tmp/out1 /tmp/out2 | egrep "\|--" | awk -F[ '{print $2}' | awk -F] '{print $2 }' | sort | uniq | xargs fuser -f | xargs ps -lFp
    ./tmp/output:       
    F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN    RSS PSR STIME TTY          TIME CMD
    0 R 1000     14310 14275 23  80   0 -  1072 -        748   1 22:19 pts/2    00:00:06 dd if /dev/zero of ./output bs 1024 count 10000000
    

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

Например, чтобы отобразить 20 самых больших каталогов в текущей папке, используйте следующую однострочную строку:

du -ah . | sort -rh | head -20

или же:

du -a . | sort -rn | head -20

Для 20 самых больших файлов в текущем каталоге (рекурсивно):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

или с удобочитаемыми размерами:

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

Вторая команда для правильной работы на OSX/BSD (как sort не имеет -h), вам нужно установить sort от coreutils, Затем добавьте папку bin в свой PATH,

Вы можете определить эти команды как псевдонимы (например, добавить в ваши файлы RC, такие как .bash_profile):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'

Тогда беги big или же big-files внутри папок, которые, по вашему мнению, имеют место (например, в /home).

  1. перейдите в домашний каталог веб-серверов (домашний каталог apache)
  2. выполните команду "du -a |head -30|sort -nr"
  3. это даст вам 30 самых больших файлов / каталогов, потребляющих диск
  4. Вы можете найти их и удалить (если не полезно)
Другие вопросы по тегам