lista ext4 de arquivos muito lenta em um diretório específico que continha muitos arquivos antes

16

fundo

Eu tive um pequeno erro de logrotate ... O logrotate giraria os logs arquivados por erro, causando um crescimento quadrático de arquivos no meu /var/log/. E quando percebi que algo estava errado, /var/log/já continha alguns milhões de arquivos ...

Eu consegui (depois de alguns problemas e encontrar / sed / grep magic) remover todos os arquivos ofensivos e corrigir minha configuração de logrotate. E pensei que tudo estava bem ...

Problema

Sempre que eu ls/ du -hsou listar o conteúdo de /var/log/(que agora contém 80mb de arquivos / logs e no máximo algumas centenas de arquivos), o processo é interrompido por um bom minuto ou dois. Acredito que isso esteja relacionado ao logrotate, mas não tenho certeza, poderia ser outra coisa. De qualquer forma, estou sem saber onde começar a depurar ou procurar uma correção para isso. Por favor ajude: 3

Outras informações

uname -a
Linux xxx 3.3.8-gentoo #18 SMP Sat Sep 21 22:44:40 CEST 2013 x86_64 Intel(R) 
Core(TM)2 CPU 4400 @ 2.00GHz GenuineIntel GNU/Linux

cat /proc/meminfo 
MemTotal:        2051552 kB
MemFree:           75612 kB
Buffers:            9016 kB
Cached:          1740608 kB
SwapCached:            0 kB

CFQ IO scheduler + SLUB allocator 

Eu pensei o seguinte: Quantos arquivos em um diretório são muitos? (Download de dados da net) estava relacionado, mas não tenho mais os arquivos.

Editar

O problema persiste mesmo depois de uma chamada para, init 1 então eu acho que é seguro assumir que não há outro processo para culpar além do FS.

Solução (aplicada a partir da resposta aceita)

init 1
mv /var/log /var/log1
mkdir /var/log
chmod --reference=/var/log1 /var/log
chown --reference=/var/log1 /var/log
tar -C /var/log1 -cvp . | tar -C /var/log -xvp
rm -rf /var/log1
init 5
Emily L.
fonte

Respostas:

25

Os diretórios apenas crescem em tamanho, não diminuem. Tente mover todos esses arquivos para um diretório temporário (como log2), em seguida, rmdir o diretório antigo e renomeie o temp um como o novo permanente.

Matthew Ife
fonte
Eu apenas fiz isso quando você respondeu. Funcionou :) Infelizmente, não tenho reputação suficiente para fazer o voto positivo: /
Emily L.