He estado usando rsync para copiar archivos por algún tiempo. Tengo entendido que rsync es más rápido que cp cuando algunos de los archivos a transferir ya están en el directorio de destino, transfiriendo solo la diferencia incremental (es decir, los "deltas").
Si esto es correcto, ¿tendría alguna ventaja usar rsync para mover el contenido de una carpeta A , por ejemplo, una carpeta B , con B vacío?
La carpeta A tiene cerca de 1 TB de datos (y millones de archivos). La transferencia se realizaría a través de una red local ( A y B en diferentes sistemas de archivos, ambos montados en una supercomputadora, por ejemplo, A es NFS y B es lustre ).
Aparte de eso, ¿qué indicadores debo usar para pedirle a rsync que mueva (no copie) archivos de A a B (es decir, que elimine A cuando la transferencia haya finalizado con éxito)?
rsync
pueda reemplazarmv
. Esperaríamv
ser más rápido en la mayoría de los tipos de sistemas de archivos cuando el origen y el destino están dentro del mismo sistema de archivos, yarsync
que tendría que hacer una copia sin importar qué, ymv
probablemente podría salirse con el cambio de algunas entradas de directorio. Lo más parecido que puedo encontrar a unrsync mv
es el--remove-source-files
comando, pero eso no elimina los directorios.mv
más rápido?mv
no puede operar a través de una red; tendría que depender de un montaje local (por ejemplo, NFS). Si el cuello de botella es la red,rsync
probablemente sería más rápido quemv
porquersync
puede hacer compresión.cp
tiene-u
la opción de copiar el archivo de origen si es más reciente que el archivo de destino o cuando el archivo de destino no se encuentraRespuestas:
Puede pasar
--remove-source-files
a rsync para mover archivos en lugar de copiarlos.Pero en su caso, no tiene sentido usar rsync, ya que el destino está vacío. Un llano
mv
hará el trabajo lo más rápido posible.En su caso, lo que podría marcar una diferencia en el rendimiento es la elección del protocolo de red, si tiene la opción de elegir entre NFS, Samba, sshfs, sftp, rsync sobre ssh, tar pipe en ssh, etc. La velocidad relativa de estos métodos depende en cuanto al tamaño de los archivos, la red y el ancho de banda del disco, y otros factores, por lo que no hay forma de dar consejos generales, deberá ejecutar sus propios puntos de referencia.
fuente
--remove-source-files
solo elimina los archivos en la fuente. si desea borrar nuestra fuente, ¿no tendría que hacer un rm -rf (ofind
todos los directorios y pasar-delete
) en la fuente después de que rsync se ejecute correctamente?--checksum
para indicarle que verifique los resultados de la primera sincronización.Como
--remove-source-files
no elimina directorios, emito los siguientes comandos para mover archivos a través de ssh:Personalmente, me gusta la
--progress
función, ya que hago esta transferencia manualmente. Elimínelo si está utilizando un script. Espero que ralentice las transferencias marginalmente. Lafind
opción de eliminación del comando solo elimina directorios vacíos; no los userm -rf
, ya que puede eliminar directorios no vacíos en caso de que no se transfiera un archivo. La-delete
opción activa la-depth
opción para que los árboles de directorios vacíos se eliminen de "abajo" hacia arriba.fuente
-delete
es mucho más agradable que-exec rmdir {} +
etc.En general, como dijo Gilles, no hay ninguna ventaja en usar
rsync
para mover archivos cuando semv
hará el mismo trabajo de manera más simple y no hay una ganancia potencial de velocidad entre los sistemas de archivos normales.Sin embargo, hay ocasiones en que hay una ventaja. En particular, si tiene dudas sobre la estabilidad de la fuente, el destino o la máquina que realiza el trabajo, el uso
rsync
le brinda la capacidad de reanudar. Esto puede ser una ventaja notable si la transferencia es muy grande y, por ejemplo, su red eléctrica no es confiable. El uso de rsync será una forma más estable de evitar la corrupción de datos en caso de falla y continuar donde lo dejó.fuente
mv
que solo es mejor si el destino y la fuente están en la misma partición, de modo quemv
solo edita los metadatos del archivo en lugar de hacer una copia.rsync
lugar de mv es cuando quiero preservar la estructura de la carpeta (si la usa--relative
).Me he encontrado en una situación en la que rsync ES más rápido que mv simplemente porque mv no puede manejar la cantidad de archivos en el directorio. Tengo 1,8 millones de fotos de una cámara de seguridad que funcionó durante 20 días y el comando mv sale con un error porque no puede asignar recursos.
Sin embargo, rsync parece manejar todos los archivos sin problemas.
fuente
Si desea fusionar directorios de forma recursiva ... mueva un directorio a otro directorio con nombres de directorio potencialmente duplicados , entonces vea mi respuesta aquí en serverfault.com.
mv
hace un mal trabajo cuando existen directorios con el mismo nombre, yrsync
copia (leer + escribir datos completos) cada archivo en lugar de simplemente moverlos (leer y escribir solo metadatos).fuente
No hay forma de mover archivos usando rsync como lo haría el comando mv de Linux. Al usar --remove-source-files, esencialmente está copiando archivos al destino y luego eliminando archivos (excepto directorios) de la fuente. Esto puede lograr su propósito de mover archivos, pero NO ahorrará tiempo u operación de E / S.
fuente