Como descobrir quais arquivos estão ocupando 80% do espaço em um servidor Web Linux?

15

A unidade está constantemente enchendo. Você procurou todos os arquivos sobressalentes e aleatórios que puder. grep'd para arquivos coredump e até removeu alguns dos backups desnecessários ...

Qual seria o seu próximo passo?

O servidor real em questão possui 10 GB de arquivos do site e o sistema operacional não deve demorar mais que 10 GB. Como rastrear o que está enchendo uma unidade (virtual) de 50 GB?

Gareth
fonte

Respostas:

9

Acho que o ncdu ( http://dev.yorhel.nl/ncdu ) é bastante útil para isso.

Scott
fonte
Perfeito. Interface brilhante e capacidade de manipular arquivos de dentro do programa. Felicidades!
305 Gareth Gareth
23

Certamente existem maneiras mais elaboradas, mas a única que me lembro é

du --max-profundidade = 1 -h /

Agora pegue o diretório que ocupa mais espaço (du --max-depth=1 -h /yourdir)e vá mais fundo até encontrar o culpado.
Se quiser que sua saída seja classificada por tamanho e não se importe com o formato legível por humanos, você também podedu --max-depth=1 /your_dir | sort -n

Marie Fischer
fonte
Sim. Eu faço praticamente a mesma coisa "du -S | sort -n -r | less". Eu realmente adoraria ver um programa parecido com htop e cron com mlocate, mas, quando executado, fornecia informações precisas e contemporâneas sobre os arquivos em seu sistema.
Gareth
1
Em vez de iniciar a partir de / no servidor da web, tente iniciar a partir de http_root. Se não houver sucesso lá, pode-se usar '/'. O diretório executando du / '/' levará muito tempo.
Saurabh Barjatiya
4

Eu uso o baobab do programa Gnome. Você pode executar isso na área de trabalho e não pode se conectar via SSH ao servidor. Ele mostra um mapa gráfico fácil de ler do uso do espaço em disco. Está instalado no Gnome como "Disk Usage Analyzer"

Josh
fonte
3

Experimente o GT5 .

Pausado até novo aviso.
fonte
Em segundo lugar, é ótimo para rastrear aonde o espaço está indo, pois mostra diferenças.
21139 Josh
Adorável. Essa deve ser a resposta certa. Que super achado. Obrigado.
PKHunter
2

df -k mostra quais fs são o problema. Em seguida, vá para o diretório de nível superior e execute du -xk | classificar -n | cauda -25, mostrará os 25 principais dir, classificados, para o sol 9 ou anterior, substitua x por um d.

Ronald Pottol
fonte
Sim, semelhante ao que acabei de mencionar na resposta de @Marie Fischer. Por que usar o -k (tamanho do bloco) e não -h para humanos?
Gareth
-k é usado para que todos os tamanhos sejam relatados em kb. Isso é útil para classificar outra classificação que colocaria 10kb antes de 20mb durante a classificação.
Saurabh Barjatiya
1

Observe que os arquivos podem ser excluídos enquanto ainda estão sendo gravados, portanto, eles usam espaço em disco enquanto o processo de criação está em execução, mas não possuem um nome de arquivo.

Isso o torna inviável com as ferramentas usuais - você pode usar lsof para investigar quais processos têm arquivos abertos.

Thorbjørn Ravn Andersen
fonte
Eu uso /usr/sbin/lsof | grep deletedpara conseguir isso.
21711 Kevin M
0

Se você pode executar o software no sistema, o xdiskusage mostra graficamente quais diretórios / arquivos estão ocupando seu espaço. Extremamente útil.

Eu acredito que o KDE contém algo semelhante.

Se for apenas texto e você não puder instalar software extra, o uso criativo duprovavelmente o levará até lá.

sleske
fonte
0
  1. cd para o diretório inicial dos servidores web (diretório inicial do apache)
  2. execute o comando "du -a | head -30 | sort -nr"
  3. ele fornecerá os 30 maiores arquivos / diretórios que consomem discos
  4. você pode encontrá-los e excluir (se não for útil)
Tecnologias ASEveryWhere
fonte
Isso não funcionará, a menos que você altere a ordem de heade sort. Além disso, você deve usar os recursos de formatação.
22416 kasperd
0

Você pode usar os seguintes comandos para encontrar quais arquivos ou pastas estão ocupando muito espaço.

Por exemplo, para exibir os 20 principais diretórios da pasta atual, use o seguinte recurso:

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

ou:

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

Para os 20 maiores arquivos do diretório atual (recursivamente):

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

ou com tamanhos legíveis por humanos:

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

O segundo comando para funcionar corretamente no OSX / BSD (como sortnão tem -h), você precisa instalar a sortpartir coreutils. Em seguida, adicione a pasta bin ao seu PATH.

Você pode definir esses comandos como aliases (por exemplo, adicionar aos seus arquivos rc , como .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'

Em seguida, execute bigou big-filesdentro das pastas que você acha que ocorrem (por exemplo, dentro /home).

kenorb
fonte
0

aqui está algo que eu juntei para rastrear alguns processos não autorizados em nossos servidores de banco de dados: 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

é meio kludgey e não muito robusto, mas funciona assim:

  1. gerar uma lista em árvore recursiva do diretório atual
  2. aguarde 5 segundos
  3. gerar outra lista
  4. compare as duas saídas
  5. fusor os arquivos que mudaram de tamanho e
  6. ps -lFp mostrará aos arquivos que processo os possui

    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
    
Greeblesnort
fonte