Portanto, um cliente meu recebeu um e-mail da Linode hoje dizendo que seu servidor estava causando a explosão do serviço de backup da Linode. Por quê? Muitos arquivos. Eu ri e depois corri:
# df -ih
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/xvda 2.5M 2.4M 91K 97% /
Porcaria. 2,4 milhões de inodes em uso. Que diabos está acontecendo ?!
Procurei os suspeitos óbvios ( /var/{log,cache}
e o diretório de onde todos os sites estão hospedados), mas não estou encontrando nada realmente suspeito. Em algum lugar dessa fera, tenho certeza de que há um diretório que contém alguns milhões de arquivos.
Por um contexto meus meus servidores ocupados usa 200k inodes e meu desktop (um velho instalar com mais de 4 TB de armazenamento usados) é apenas pouco mais de um milhão. Há um problema.
Então, minha pergunta é: como faço para encontrar onde está o problema? Existe um du
para inodes?
fonte
Respostas:
Verifique se
/lost+found
houve um problema no disco e um monte de lixo eletrônico acabou sendo detectado como arquivos separados, possivelmente incorretamente.Verifique
iostat
se algum aplicativo ainda está produzindo arquivos como um louco.find / -xdev -type d -size +100k
dirá se existe um diretório que use mais de 100kB de espaço em disco. Esse seria um diretório que contém muitos arquivos ou continha muitos arquivos no passado. Você pode ajustar a figura do tamanho.Eu não acho que exista uma combinação de opções no GNU
du
para fazer valer 1 por entrada no diretório. Você pode fazer isso produzindo a lista de arquivosfind
e contando um pouco no awk. Aqui está umdu
para inodes. Minimamente testado, não tenta lidar com nomes de arquivos contendo novas linhas.Uso:
du-inodes /
. Imprime uma lista de diretórios não vazios com a contagem total de entradas neles e seus subdiretórios recursivamente. Redirecione a saída para um arquivo e revise-a quando quiser.sort -k1nr <root.du-inodes | head
lhe dirá os maiores infratores.fonte
awk: line 2: find: regular expression compile failed (bad class -- [], [^] or [) [^ awk: line 2: syntax error at or near ] `/tmp/tmpw99dhs': Permission denied
Você pode verificar com este script:
Isso imprime os 10 principais subdiretórios por contagem de arquivos. Se você quer um x superior, mude
head
comhead -n x
, ondex
é um número natural maior que 0.Para resultados 100% seguros, execute este script com privilégios de root:
fonte
10: read: Illegal option -d
... esfregou a-d
bandeira,read
esperando que nada de ruim aconteça. Vou deixar você saber quando terminar de correr ...Geralmente, mais rápido que a localização, se o banco de dados de localização estiver atualizado:
Isso despeja todo o banco de dados de localização, retira tudo do último '/' no caminho e, em seguida, a classificação e "uniq -c" fornecem o número de arquivos / diretórios por diretório. "sort -n" é direcionado para obter os dez diretórios com mais coisas neles.
fonte
find /path/to/parent -xdev > filelist
primeiro e, em seguida, direcione o sed para ler as entradas dessa lista.Outra sugestão:
http://www.iasptk.com/20314-ubuntu-find-large-files-fast-from-command-line
Use essas pesquisas para encontrar os maiores arquivos em seu servidor.
Encontre arquivos com mais de 1 GB
Encontre arquivos com mais de 100 MB
Encontre arquivos com mais de 10 MB
A primeira parte é o comando find usando o sinalizador "-size" para localizar arquivos em tamanhos diferentes, medidos em kilobytes.
O último bit no final, começando com "-exec", permite especificar um comando que queremos executar em cada arquivo encontrado. Aqui, o comando "ls -lh" inclui todas as informações exibidas ao listar o conteúdo de um diretório. O h no final é especialmente útil, pois imprime o tamanho de cada arquivo em um formato legível por humanos.
fonte
Isso funcionou para mim quando o outro falhou no Android através do shell:
fonte
Eu gosto de usar algo como
du --inodes -d 1
com o de encontrar um diretório que recursivamente ou diretamente contenha muitos arquivos.Também gosto desta resposta: https://unix.stackexchange.com/a/123052
fonte