Diminuir / redefinir o tamanho do diretório?

10

Existe uma maneira de reduzir uma entrada de diretório?

Meus diretórios de domínio dovecot aumentaram em tamanho de o padrão 4096 para vários megas, e está mexendo com cotas de disco.

A única maneira que encontrei é excluir e recriar o diretório. Eu estou esperando que haja uma função mágica em algum lugar - eu estou aberto a qualquer coisa, exceto para assembler codificado a mão.

Editar: Para a posteridade, para encontrar dirents > 4096:

 find / -type d -size +4k -printf "%s\t%p\t%i\n" | sort -nr
    
por mikewaters 28.04.2011 / 02:05

3 respostas

6

Veja também rm em um diretório com milhões de arquivos ; tangencialmente relacionadas, mas nós discutimos lá.

Tanto quanto eu sei, pelo menos no ext2 / 3, não, não há nenhuma maneira (on-line) de encurtá-los antes de deletar + recriar. Desmontado, 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:

por 28.04.2011 / 02:40
3

Recentemente tive que excluir e recriar um diretório NFS para reduzir seu tamanho depois de ter inchado anteriormente. No processo, encontrei uma maneira bastante eficiente de fazer isso usando links rsync e hard. Esse método evita copiar os arquivos reais, enquanto ainda realiza o objetivo de recriar o diretório com o mesmo conteúdo.

Como precisávamos reduzir o tempo de inatividade para fazer essa operação durante nossa janela de manutenção, tornar o diretório recriado disponível o mais rápido possível era importante para nós. Se a simplicidade for mais importante para você, altere o primeiro comando de movimento 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 abstracionei os nomes dos diretórios, então peço desculpas se cometer um erro nessa tradução.

mkdir /tmp/holding_dir/
rsync -ai --delete --link-dest=/path/to/source_dir/ /path/to/source_dir/ /tmp/holding_dir/
mv /path/to/source_dir/ /tmp/deleteme/
mv /tmp/holding_dir/ /path/to/source_dir/

Mais tarde, removemos o diretório. Dependendo do tamanho, você pode precisar usar uma técnica mais sofisticada para fazer isso. Por exemplo, usar o rsync com o sinalizador --delete para sincronizar um diretório vazio nesse diretório pode ser mais eficiente.

rm -rf /tmp/deleteme/
    
por 15.05.2014 / 21:35
1

Eu faria assim.

cp -al oldir newdir && mv olddir tempname && mv newdir olddir && rm -r tempname

onde olddir é o diretório que você deseja encolher 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 com newdir e clean up.

    
por 26.01.2017 / 00:09