du comando tarda mucho en ejecutarse

9

Estoy corriendo du -shen una variedad de directorios para encontrar cerdos de disco. Tengo dos servidores idénticos (Dell PE2850s), ambos con RHEL5 y tardará mucho más en ejecutarse duen un servidor sobre el otro.

Por ejemplo, hacerlo du -sh /opt/foobarllevará 5 minutos en el servidor A (que tiene aproximadamente 25 GB), y en el servidor B, el mismo comando con la misma cantidad de datos me informará casi instantáneamente. No veo nada evidentemente obvio cuando corro arriba, etc.

Cualquier consejo es muy apreciado.

Jon Weinraub
fuente
3
La velocidad de du -sno depende del tamaño de los datos, sino más bien del número de archivos. ¿Ambos árboles de directorio tienen una cantidad similar de archivos?
Ladadadada
2
Además, dufuncionará mucho más rápido si todos los metadatos del directorio (como los tamaños de archivo) están actualmente en caché. Si este es el caso por cualquier razón en un servidor y no en el otro, dará lugar a grandes diferencias.
Sven
@Ladadada Yo diría que sí, hay aproximadamente la misma cantidad de archivos. Incluso cuando agrega el asterisco para obtener una lista de los tamaños de archivo individualmente, toma mucho tiempo desplazarse. Pero no estoy totalmente seguro de cómo verificar si los metadatos están en caché o no.
Jon Weinraub

Respuestas:

6

Si tiene una gran cantidad de archivos en ese directorio y el contenido del directorio cambia constantemente, la entrada del directorio se fragmenta con el tiempo. Luego, cuando el sistema operativo esté leyendo el contenido del directorio, habrá muchas búsquedas innecesarias de discos. Esto sucede especialmente con los sistemas de archivos ext * (sin embargo, ext4 podría ser mejor) y los viejos sistemas de archivos ReiserFS v3.x (si eso superó el 85% más o menos).

La solución es bastante fácil:

cp -pr origdir newdir
mv origdir origdir.bak
mv newdir origdir

Por supuesto, si todo está en caché en la RAM, esto no importa tanto; Por lo general, Linux almacena en caché archivos y directorios a los que se accede con frecuencia de forma bastante agresiva. Si realmente desea mantener el contenido de esos directorios en la RAM, puede poner algo como ls -lah /your/dir 2>&1 >/dev/nullsu cron.

EDITAR: Oh, una cosa me vino a la mente. Si su servidor tiene un controlador RAID respaldado por batería con algo de caché, verifique que la batería esté bien. He visto situaciones en las que la batería está agotada y el controlador desactiva el caché por completo, arruinando el rendimiento muy mal. Por ejemplo, los servidores HP pueden decirle en los registros de iLO algo sobre la batería del controlador; en el panel de control del estado del servidor, todo parece estar bien y verde, pero solo la entrada del registro le informará sobre esto.

Janne Pikkarainen
fuente
1
Probablemente me lleve algo de tiempo hacerlo, está en un servidor de producción, así que tendré que hacerlo de la noche a la mañana y todo el directorio contiene varios cientos de gigabytes de datos, así que no quiero empantanarlo ... Informaré A primera hora de la mañana. Gracias por la idea
Jon Weinraub
Todavía estoy ejecutando este comando y no sé cuánto tiempo llevará. Incluso lo volví a dibujar y cp todavía se está ejecutando, han pasado aproximadamente 1 hora y 15 minutos desde que lo inicié. Incluso ejecutar un du en esa carpeta en otro shell tomó mucho tiempo, pero ¿crees que debería solo umountel disco y fsckeso?
Jon Weinraub
Simplemente déjelo funcionar a menos que moleste su producción de alguna manera. Con RHEL5 y su programador de E / S CFQ predeterminado, puede colocar el comando cp en la clase inactiva para que no intimide a los otros procesos: más ionice -c3 -p $(pidof cp)o menos.
Janne Pikkarainen
Por favor, lea también mi última edición.
Janne Pikkarainen
1
Sé que ha pasado un tiempo, pero finalmente pude hacer el comando cp que mencionaste. Son dos dos horas para copiar 25 GB. Después de hacer el movimiento, correr otro du -sh fue igual de lento. De hecho, incluso borrar el directorio de respaldo también es lento.
Jon Weinraub
0

Sugiero probar el comando du simple sin ningún interruptor. Eventualmente verá qué directorio está ralentizando el proceso. Podría ser un disco defectuoso, o alguna otra razón, ...

Király István
fuente