Estamos usando rsnapshot para copias de seguridad. Mantiene muchas instantáneas del archivo copiado, pero elimina las antiguas. Esto es bueno. Sin embargo, se tarda aproximadamente 7 horas en hacer un rm -rf
árbol de directorios masivo. El sistema de archivos es XFS. No estoy seguro de cuántos archivos hay, pero probablemente sean millones.
¿Hay alguna forma de acelerarlo? ¿Hay algún comando que haga lo mismo rm -rf
y no tome horas y horas?
find . -delete -name directory
y es mucho más rápido querm -rf
.Respuestas:
No.
rm -rf
realiza un recorrido recursivo en profundidad de su sistema de archivos, invocandounlink()
cada archivo. Las dos operaciones que hacen que el proceso vaya lentamente sonopendir()
/readdir()
yunlink()
.opendir()
yreaddir()
dependen de la cantidad de archivos en el directorio.unlink()
depende del tamaño del archivo que se elimina. La única forma de hacer que esto sea más rápido es reducir el tamaño y la cantidad de archivos (lo cual sospecho que no es probable) o cambiar el sistema de archivos a uno con mejores características para esas operaciones. Creo que XFS es bueno para unlink () en archivos grandes, pero no es tan bueno para estructuras de directorios grandes. Es posible que ext3 + dirindex o reiserfs sea más rápido. No estoy seguro de qué tan bien le va a JFS, pero estoy seguro de que hay muchos puntos de referencia del rendimiento del sistema de archivos diferente.Editar: Parece que XFS es terrible para eliminar árboles , así que definitivamente cambie su sistema de archivos.
fuente
unlink
que no hace nada al contenido real, pero para realizar unaunlink
llamada al sistema, el código del sistema de archivos tiene más trabajo que hacer si el enlace eliminado es el último al archivo y si no está abierto actualmente. Por supuesto, esto depende del sistema de archivos, pero puede haber una diferencia muy perceptible cuando el archivo eliminado es enorme.Como alternativa, mueva el directorio a un lado, vuelva a crearlo con el mismo nombre, permisos y propiedad y reinicie las aplicaciones / servicios que se preocupan por ese directorio.
Luego puede "rm agradable" el directorio original en segundo plano sin tener que preocuparse por una interrupción prolongada.
fuente
Asegúrese de tener las opciones de montaje correctas establecidas para XFS.
Usando -ologbufs = 8, logbsize = 256k con XFS probablemente triplicará su rendimiento de eliminación.
fuente
Si está haciendo el rm efectivamente en el nivel de archivo, entonces llevará mucho tiempo. Es por eso que las instantáneas basadas en bloques son tan buenas :).
Podría intentar dividir el rm en áreas separadas e intentar hacerlo en paralelo, sin embargo, no podría esperar que mejore. Se sabe que XFS tiene problemas para eliminar archivos y si eso es una gran parte de lo que haces, tal vez sería una idea un sistema de archivos diferente para eso.
fuente
Es bueno usar ionice para operaciones intensivas en IO como esa, independientemente del sistema de archivos utilizado.
Sugiero este comando:
Funcionará bien para operaciones en segundo plano en el servidor con una gran carga de E / S.
fuente
Sé que esto es viejo, pero pensé que la identificación debería incluir una sugerencia. Está eliminando esos archivos secuencialmente, la ejecución de operaciones rm paralelas puede acelerar las cosas.
http://savannah.nongnu.org/projects/parallel/ parallel puede usarse comúnmente en lugar de xargs
así que si estás eliminando todos los archivos en deltedir
Eso te dejaría con estructuras de directorio vacías para eliminar.
Nota: Es probable que aún alcance las limitaciones del sistema de archivos como se indicó anteriormente.
fuente
¿Sería una opción alternativa aquí separar los datos de tal manera que pueda desechar y reconstruir el sistema de archivos real en lugar de hacer el rm?
fuente
¿Qué hay de disminuir la amabilidad del comando? Me gusta:
fuente