Existe uma maneira de reduzir uma entrada de diretório?
Meus diretórios dovecot maildir aumentaram de tamanho do padrão 4096 para vários megas, e estão interferindo nas cotas de disco.
A única maneira que encontrei é excluir e recriar o diretório. Espero que exista uma função mágica em algum lugar - estou aberto a qualquer coisa, exceto para o assembler codificado à mão.
Edit: Para posteridade, para encontrar dirents> 4096:
find / -type d -size +4k -printf "%s\t%p\t%i\n" | sort -nr
Respostas:
Veja também rm em um diretório com milhões de arquivos ; tangencialmente relacionados, mas nós discutimos isso lá.
Até onde eu sei, pelo menos no ext2 / 3, não, não há como (online) reduzir os arquivos excluindo + recriar. Desmontadas, várias fontes sugerem que
e2fsck -D
pode funcionar, embora eu não possa reivindicar nenhuma experiência pessoal com essa opção.Algumas referências para leitura adicional:
fonte
Recentemente, tive que excluir e recriar um diretório NFS para diminuir seu tamanho depois que ele havia inchado anteriormente. No processo, encontrei uma maneira bastante eficiente de fazer isso usando rsync e links físicos. Esse método evita copiar os arquivos reais, enquanto ainda cumpre o objetivo de recriar o diretório com o mesmo conteúdo.
Como precisávamos de um tempo de inatividade para fazer essa operação durante nossa janela de manutenção, disponibilizar o diretório reconstruído o mais rápido possível foi importante para nós. Se a simplicidade for mais importante para você, altere o primeiro comando de movimentação para um 'rm -rf' no diretório de origem e pule o outro comando 'rm -rf'.
Eu extraí esses comandos de um processo maior e abstraí os nomes dos diretórios, então peço desculpas se cometi um erro nessa tradução.
Depois, removemos o diretório Dependendo do tamanho, pode ser necessário usar uma técnica mais sofisticada para fazer isso. Por exemplo, o uso do rsync com o sinalizador --delete para sincronizar um diretório vazio nesse diretório pode ser mais eficiente.
fonte
Eu faria assim.
cp -al
oldirnewdir
&& mv
olddirtempname
&& mv
newdirolddir
&& rm -r
tempnameonde olddir é o diretório que você deseja reduzir newdir e tempname são nomes de arquivos temporários
cp -al
cria links para o conteúdo de olddir em newdir e os próximos três comandos os trocam por newdir e limpam.fonte