He estado tratando de usar rsnapshot para hacer copias de seguridad, pero lo encuentro inutilizable. Si bien es capaz de diferenciar un directorio (50 gb) y duplicarlo (vincular cada archivo) en unos minutos, y puedo copiar todo el directorio en aproximadamente media hora, toma más de una hora eliminarlo. Incluso usando directamente rm -rfv
, encuentro que puede tomar hasta medio segundo para ejecutar un solo archivo, mientras que los comandos cp
y se link
completan instantáneamente.
¿Por qué es tan lento? ¿Hay alguna forma más rápida de eliminar recursivamente los enlaces duros? No tiene sentido para mí que copiar un archivo debería tomar menos tiempo que eliminarlo.
El sistema de archivos en el que estoy trabajando es una unidad de almacenamiento externa, conectada a través de usb y tipo fuseblk (que creo que significa que es ntfs). Mi computadora está ejecutando ubuntu linux.
Salida desde arriba:
Cpu(s): 3.0%us, 1.5%sy, 0.0%ni, 54.8%id, 40.6%wa, 0.0%hi, 0.1%si, 0.0%st
Mem: 8063700k total, 3602416k used, 4461284k free, 557604k buffers
fuente
fuseblk
no significa que el disco es NTFS, solo significa que está montado como un dispositivo de bloque FUSE. Eso podría ser casi cualquier cosa.Respuestas:
En última instancia, no importa lo que haga,
rm
debe ejecutarseunlink
en cada archivo que desee eliminar (incluso si llamarm -r
al directorio principal). Si hay muchos archivos para eliminar, esto puede llevar mucho tiempo.Hay dos procesos que requieren mucho tiempo cuando ejecuta
rm -r
:readdir
, seguido por,unlink
.Encontrar todos los archivos, y luego revisar cada archivo para eliminarlo, puede llevar mucho, mucho tiempo.
Si encuentra esto "inutilizable" porque hace que el directorio quede inutilizable durante algún tiempo, considere mover el directorio principal antes de eliminarlo. Esto liberará ese nombre para que el programa lo use nuevamente, sin que el tiempo sea demasiado inconveniente.
Suponiendo que el sistema de archivos realmente es NTFS (no está claro en su pregunta), NTFS generalmente es bastante lento para eliminar grandes extensiones de archivos. Puede considerar usar un sistema de archivos más adecuado para sus propósitos (los sistemas de archivos ext más recientes tienen un rendimiento de eliminación bastante bueno, si no tiene otras necesidades particulares). FUSE en sí tampoco es particularmente rápido, en general. Puede considerar ver si puede hacer esto de alguna manera que no use FUSE.
fuente
¿Por qué es tan lento? No tengo idea. Pero sí conozco una forma más rápida:
Actualización: esta respuesta en Serverfault tiene algunas explicaciones. Parece que rsync está eliminando los archivos en un orden particular que hace que el árbol del sistema de archivos permanezca equilibrado y nunca necesite un reequilibrio. rm simplemente eliminará los archivos y causará mucho reequilibrio a medida que se eliminen. Hay algo de información sobre el reequilibrio de aquí .
fuente
rm -rf
?rsync
todavía tieneunlink()
todos los archivostest/
, y eso es probablemente lo que toma el tiempo.unlink(2)
en el directorio (y recordar hacerfsck
más tarde) ...Bueno, una vez tuve un problema similar con el tuyo. Descubrí que tu "wa" es alta, podrías usar
verificar si la utilidad de su disco es alta, si es así, significa que su disco está bastante ocupado. Verifique si algunos otros procesos están escribiendo en el disco continuamente.
Por simplicidad, use
para verificar si b es alto o r < b . Eso indica que algo anda mal. En su situación, creo que el disco io es la razón original.
fuente