Eu tenho uma unidade de disco em que o uso do inode é 100% (usando o df -i
comando). No entanto, após a exclusão substancial de arquivos, o uso permanece 100%.
Qual é a maneira correta de fazer isso?
Como é possível que uma unidade de disco com menos uso de espaço em disco possa ter maior uso de Inode do que uma unidade de disco com maior uso de espaço em disco?
É possível se eu compactar muitos arquivos que reduziriam a contagem de inodes usados?
linux
unix
memory-management
inode
neversaint
fonte
fonte
Respostas:
É muito fácil para um disco usar um grande número de inodes, mesmo que o disco não esteja muito cheio.
Um inode é alocado para um arquivo, portanto, se você tiver zilhões de arquivos, todos com 1 byte cada, ficará sem inodes muito antes de ficar sem disco.
Também é possível que a exclusão de arquivos não reduza a contagem de inodes se os arquivos tiverem vários links físicos. Como eu disse, os inodes pertencem ao arquivo, não à entrada do diretório. Se um arquivo tiver duas entradas de diretório vinculadas, a exclusão de uma não liberará o inode.
Além disso, você pode excluir uma entrada de diretório, mas, se um processo em execução ainda tiver o arquivo aberto, o inode não será liberado.
Meu conselho inicial seria excluir todos os arquivos que você puder e, em seguida, reinicie a caixa para garantir que nenhum processo seja deixado mantendo os arquivos abertos.
Se você fizer isso e ainda tiver um problema, informe-nos.
A propósito, se você estiver procurando os diretórios que contêm muitos arquivos, este script pode ajudar:
fonte
>/tmp/count_em_$$
isso só funcionará se você tiver espaço para isso ... se for esse o caso, veja a resposta do @ simon./tmp
isso não afetará seus outros sistemas de arquivos.ls -A
vez dels -a
. Por que você quer contar? e ..?Se você é muito azarado, usou cerca de 100% de todos os inodes e não pode criar o scipt. Você pode verificar isso com
df -ih
.Então este comando bash pode ajudá-lo:
E sim, isso levará tempo, mas você pode localizar o diretório com mais arquivos.
fonte
awk
pode manter um hash do diretório e a contagem de arquivos sem uniqing e ordenando um zilhão de linhas. Dito isto, talvez aqui esteja uma melhoria:find . -maxdepth 1 -type d | grep -v '^\.$' | xargs -n 1 -i{} find {} -xdev -type f | cut -d "/" -f 2 | uniq -c | sort -n
- isso apenas classifica a última lista.sort
pode não manter tudo na memória e tentará voltar automaticamente à gravação de um arquivo temporário. Um processo que, obviamente, não conseguem ...sort
falhou para mim, mas eu era capaz de dar o--buffer-size=10G
que funcionou.Minha situação era que eu estava sem inodes e já havia excluído tudo o que podia.
Estou em um ubuntu 12.04LTS e não foi possível remover os antigos kernels do linux, que ocupavam cerca de 400.000 inodes porque o apt foi quebrado por causa de um pacote ausente. E não consegui instalar o novo pacote porque estava sem inodes, por isso fiquei preso.
Acabei excluindo alguns kernels Linux antigos manualmente para liberar cerca de 10.000 inodes
Isso foi o suficiente para, então, deixar-me instalar o pacote que faltava e corrigir meu apt
e remova o restante dos antigos kernel do linux com o apt
as coisas estão muito melhores agora
fonte
sudo rm -rf /usr/src/linux-headers-3.2.0-2*
se tiver certeza de que não estou usando esse kernel?$ sudo apt-get autoremove
sozinho, fez o truque para mim.Minha solução:
Tente descobrir se este é um problema de inodes com:
Tente encontrar pastas raiz com grande número de inodes:
Tente encontrar pastas específicas:
Se esse for o cabeçalho do linux, tente remover o mais antigo com:
Pessoalmente, mudei-os para uma pasta montada (porque para mim o último comando falhou) e instalei o mais recente com:
Isso resolveu meu problema.
fonte
SpamAssasin-Temp
.find /var/spool/MailScanner/incoming/SpamAssassin-Temp -mtime +1 -print | xargs rm -f
fez o trabalho :) Obrigado!for i in /usr/src/*; do echo -en "$i\t"; find $i 2>/dev/null |wc -l; done
for i in /src/*; do echo "$i, `find $i |wc -l`"; done|sort -nrk 2|head -10
mostrar os 10 maiores diretóriosEu tive o mesmo problema, corrigi-o removendo as sessões de diretório do php
Pode estar sob
/var/lib/php5
se você estiver usando uma versão php mais antiga.Recrie-o com a seguinte permissão
A permissão por padrão para o diretório no Debian foi mostrada
drwx-wx-wt
(1733)fonte
rm -rf /var/lib/php/sessions/*
provavelmente seria um comando melhor - ele não removerá o diretório da sessão, apenas seu conteúdo ... Então você não precisa se preocupar em recriá-lo.Experimentamos isso em uma conta HostGator (que impõe limites de inode a toda a hospedagem) após um ataque de spam. Ele deixou um grande número de registros de fila em /root/.cpanel/comet. Se isso acontecer e você achar que não possui inodes gratuitos, poderá executar este utilitário cpanel através do shell:
fonte
Você pode usar o RSYNC para excluir o grande número de arquivos
Crie uma pasta blanktest com 0 arquivos e o comando sincronizará suas pastas de teste com um grande número de arquivos (eu excluí quase 5 milhões de arquivos usando este método).
Obrigado a http://www.slashroot.in/which-is-the-fastest-method-to-delete-files-in-linux
fonte
rm *
para muitos arquivos, devido à expansão do curinga e à passagem / processamento de cada argumento, masrm test/
é bom para excluir umatest/
pasta que contém muitos arquivos.O eaccelerator pode estar causando o problema, pois compila o PHP em blocos ... Eu tive esse problema com um servidor Amazon AWS em um site com carga pesada. Libere os inodes excluindo o cache do eaccelerator em / var / cache / eaccelerator se você continuar com problemas.
(ou qualquer que seja o diretório do cache)
fonte
Enfrentamos um problema semelhante recentemente. Caso um processo se refira a um arquivo excluído, o Inode não será liberado; portanto, você deve verificar lsof / e interromper / reiniciar o processo liberará os inodes.
Corrija-me se estiver errado aqui.
fonte
Como dito anteriormente, o sistema de arquivos pode ficar sem inodes, se houver muitos arquivos pequenos. Forneci alguns meios para encontrar diretórios que contêm a maioria dos arquivos aqui .
fonte
Resposta tardia: no meu caso, eram meus arquivos de sessão em
que estavam usando inodes.
Eu até consegui abrir o meu crontab ou criar um novo diretório e muito menos acionar a operação de exclusão. Como uso o PHP, temos este guia onde copiei o código do exemplo 1 e configurei um cronjob para executar essa parte do código.
Se você está se perguntando como eu consegui abrir meu crontab, então excluí algumas sessões manualmente através da CLI.
Espero que isto ajude!
fonte
você pode ver esta informação
fonte
Muitas respostas até agora e todas as opções acima parecem concretas. Eu acho que você estará seguro usando à
stat
medida que avança, mas dependendo do SO, você pode receber alguns erros de inode. Portanto, implementar sua própriastat
funcionalidade de chamada64bit
para evitar problemas de estouro parece bastante compatível.fonte
Se você usar a janela de encaixe, remova todas as imagens. Eles usaram muito espaço ....
Pare todos os contêineres
Excluir todos os contêineres
Excluir todas as imagens
Trabalha para mim
fonte