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?


Respostas:



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


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"



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.


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.


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á.


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)

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).


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
    
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.