La lista ext4 de archivos es muy lenta en un directorio específico que contenía muchos archivos antes

16

Antecedentes

Tuve un pequeño error de logrotate ... Logrotate rotaría los registros archivados por error causando un crecimiento cuadrático de archivos en mi /var/log/. Y cuando me di cuenta de que algo andaba mal, /var/log/ya contenía algunos millones de archivos ...

Logré (después de un poco de pérdida de cabello y encontrar / sed / grep magic) eliminar todos los archivos ofensivos y arreglar mi configuración de logrotate. Y pensé que todo estaba bien ...

Problema

Siempre que ls/ du -hso de otra manera listar el contenido de /var/log/(que ahora contiene 80 MB de archivos / logs y como máximo unos pocos cientos de archivos) el proceso haciendo que cuelga de un buen par de minutos. Creo que esto está relacionado de alguna manera con el error de logrotate, pero no estoy seguro, podría ser otra cosa. De todos modos, no sé por dónde comenzar a depurar o buscar una solución para esto. Por favor ayuda: 3

Otra información

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 

Pensé esto: ¿Cuántos archivos en un directorio son demasiados? (La descarga de datos de la red) estaba relacionada, pero ya no me quedan los archivos.

Editar

El problema persiste incluso después de una llamada, por init 1 lo que creo que es seguro asumir que no hay otro proceso que culpar, excepto el FS.

Solución (aplicada a partir de la respuesta aceptada)

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.
fuente

Respuestas:

25

Los directorios solo crecen en tamaño, no se reducen. Intente mover todos esos archivos a un directorio temporal (como log2), luego dirija el directorio antiguo y cambie el nombre del tempo como nuevo permanente.

Matthew Ife
fuente
Acabo de hacer esto cuando respondiste. Funcionó :) Lamentablemente, no tengo suficiente reputación para votarte: /
Emily L.