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

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

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

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

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

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

du --max-depth=1 -h /

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

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

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

Дайте gt5 попытка.

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

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

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

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

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

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

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

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

Например. чтобы отобразить 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).

вот кое-что, что я собрал вместе, чтобы отследить некоторые мошеннические процессы на наших серверах баз данных: 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. fuser файлы, которые изменили размер и
  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