Acho que o ncdu ( link ) é bastante útil para isso.
O drive está constantemente se enchendo. Você tem caçado todos os arquivos de reposição e aleatórios que você pode. 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 tem 10 GB de arquivos de sites e o sistema operacional não deve levar mais de 10 GB. Então, como você rastreia o que está preenchendo uma unidade de 50 GB (virtual)?
Acho que o ncdu ( link ) é bastante útil para isso.
Certamente existem maneiras mais elaboradas, mas a que eu lembro é
du --max-depth=1 -h /
Agora pegue o diretório que usa mais espaço (du --max-depth=1 -h /yourdir)
e vá mais fundo até encontrar seu 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 pode fazer du --max-depth=1 /your_dir | sort -n
Eu uso o baobab do programa Gnome. Você pode executar isso na sua área de trabalho e pode se conectar via SSH ao servidor. Ele mostra um mapa gráfico de fácil leitura do uso do espaço em disco. É instalado sob o Gnome como "Disk Usage Analyzer"
Dê uma gt5 uma tentativa.
df -k mostra quais fs são o problema. Em seguida, vá para o diretório de nível superior e execute du-xk | sort -n | cauda -25 isso mostrará o top 25 dir, classificado, para o sun 9 ou anterior, substitua o x por um d.
Observe que os arquivos podem ser excluídos enquanto ainda estão sendo gravados, portanto, eles usam o espaço em disco enquanto o processo de criação está em execução, mas não possuem um nome de arquivo.
Isso torna isso inacessível com as ferramentas usuais - você pode usar o lsof para investigar quais processos têm arquivos abertos.
Se você pode executar o software no sistema, o xdiskusage mostrará graficamente quais diretórios / arquivos estão ocupando seu espaço. Extremamente útil.
Eu acredito que o KDE contém algo semelhante.
Se for somente texto e você não puder instalar software extra, o uso criativo de du
provavelmente o levará até lá também.
Você pode usar os seguintes comandos para encontrar quais arquivos ou pastas ocupam muito espaço.
Por exemplo para exibir os 20 maiores diretórios da pasta atual, use o seguinte one-liner:
du -ah . | sort -rh | head -20
ou:
du -a . | sort -rn | head -20
Para os 20 maiores arquivos no 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
The second command to work on OSX/BSD properly (as
sort
doesn't have-h
), you need to installsort
fromcoreutils
. Then add the bin folder to yourPATH
.
Você pode definir esses comandos como aliases (por exemplo, adicionar a 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 big
ou big-files
dentro das pastas que você acredita ter ocorrido (por exemplo, em /home
).
aqui está algo que eu montei para encontrar alguns processos desonestos 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
é um pouco kludgey e não muito robusto, mas funciona assim:
ps -lFp
mostrará os 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