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

13

Antecedentes

Eu tive uma pequena missão de logro ... Logrotate rodaria os logs arquivados pelo 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 algum hairloss e encontrar / sed / grep magic) remover todos os arquivos ofensivos e consertar minha configuração logrotate. E pensei que tudo estava bem ...

Problema

Sempre que eu ls / du -hs ou 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 suspende por um bom ou dois minutos. Eu acredito que isso é de alguma forma relacionado com o logrotate mishap mas eu não tenho certeza, poderia ser outra coisa. De qualquer forma estou com perda de onde começar a depuração ou procurando 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 isso: Quantos arquivos em um diretório são muitos? (Download de dados da net) estava relacionado, mas eu não tenho mais os arquivos.

Editar

O problema persiste mesmo após uma chamada para init 1 , então acho que é seguro assumir que não há outro processo a ser responsabilizado, exceto o FS.

Solução (conforme 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
    
por Emily L. 22.09.2013 / 18:06

1 resposta

22

Os diretórios só 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 temporário como o novo diretório permanente.

    
por 22.09.2013 / 19:40