Tengo que copiar un gran árbol de directorios, aproximadamente 1,8 TB. Todo es local. Por costumbre lo usaría rsync
, sin embargo, me pregunto si tiene mucho sentido y si prefiero usarlo cp
.
Me preocupan los permisos y uid / gid, ya que deben conservarse en la copia (sé que rsync hace esto). Así como cosas como enlaces simbólicos.
El destino está vacío, así que no tengo que preocuparme por actualizar condicionalmente algunos archivos. Es todo un disco local, así que no tengo que preocuparme por ssh o la red.
La razón por la que me sentiría tentado a alejarme de rsync es porque rsync podría hacer más de lo que necesito. archivos de suma de comprobación rsync. No necesito eso, y me preocupa que pueda llevar más tiempo que cp.
Entonces, ¿qué te parece, rsync
o cp
?
Respuestas:
Usaría rsync, ya que si se interrumpe por cualquier motivo, puede reiniciarlo fácilmente con muy poco costo. Y al ser rsync, incluso puede reiniciarse a mitad de un archivo grande. Como otros mencionan, puede excluir archivos fácilmente. La forma más simple de preservar la mayoría de las cosas es usar la
-a
bandera - 'archivo'. Entonces:Aunque UID / GID y los enlaces simbólicos se conservan en
-a
(ver-lpgo
), su pregunta implica que es posible que desee una copia completa de la información del sistema de archivos; y-a
no incluye enlaces duros, los atributos extendidos, o ACL (en Linux) o los anteriores ni bifurcaciones de recursos (en OS X.) Por lo tanto, para obtener una copia robusta de un sistema de archivos, tendrá que incluir esas banderas:El cp predeterminado comenzará de nuevo, aunque el
-u
indicador "se copiará solo cuando el archivo SOURCE sea más nuevo que el archivo de destino o cuando falte el archivo de destino" . Y el-a
indicador (archivo) será recursivo, no volverá a copiar archivos si tiene que reiniciar y preservar los permisos. Entonces:fuente
Cuando copio al sistema de archivos local, siempre uso las siguientes opciones de rsync:
Aquí está mi razonamiento:
He visto transferencias un 17% más rápidas usando la configuración de rsync anterior sobre el siguiente comando tar como lo sugiere otra respuesta:
fuente
rsync: --no-compress: unknown option
@Ellis Percival.rm -rf /src/
.Cuando tengo que copiar una gran cantidad de datos, generalmente uso una combinación de tar y rsync. El primer paso es asearlo, algo como esto:
Por lo general, con una gran cantidad de archivos, habrá algunos que tar no podrá manejar por cualquier razón. O tal vez el proceso se interrumpirá, o si se trata de una migración del sistema de archivos, es posible que desee hacer la copia inicial antes del paso de migración real. En cualquier caso, después de la copia inicial, hago un paso rsync para sincronizarlo todo:
Tenga en cuenta que la barra inclinada final
/src/
es importante.fuente
pv
en el medio para poder ver el progreso, estimando el tamaño de todos los datos usandodf
. También lo usé--numeric-owner
, ya que el disco de origen era de otro sistema y no queríatar
tar -C /old-path --numeric-owner -S -c . | pv -tpeba -s 100G | tar -C /new-path --numeric-owner -S -xp
rsync
Aquí está el rsync que uso, prefiero cp para comandos simples, no este.
cpio
Aquí hay una manera que es aún más segura, cpio. Es casi tan rápido como el alquitrán, quizás un poco más rápido.
alquitrán
Esto también es bueno y continúa con fallas de lectura.
Tenga en cuenta que todos son solo para copias locales.
fuente
Lo que sea que prefieras. Simplemente no olvide el
-a
interruptor cuando decida usarlocp
.Si realmente necesita una respuesta: usaría rsync porque es mucho más flexible. ¿Necesita apagar antes de completar la copia? Simplemente ctrl-c y reanude tan pronto como esté de espaldas. ¿Necesita excluir algunos archivos? Solo úsalo
--exclude-from
. ¿Necesita cambiar la propiedad o los permisos? rsync lo hará por usted.fuente
El
rsync
comando siempre calcula sumas de verificación en cada byte que transfiere.La opción de línea de comando
--checksum
solo se relaciona con si las sumas de verificación de los archivos se usan para determinar qué archivos transferir o no, es decir:La página de manual también dice esto:
Así
rsync
también, siempre, calcula una suma de verificación de todo el archivo en el lado receptor, incluso cuando la-c/ --checksum
opción está "desactivada".fuente
rsync -aPhW --protocol=28
ayuda a acelerar esas copias grandes con RSYNC. Siempre uso rsync porque la idea de estar a mitad de camino a través de 90GiB y romper me asusta lejos de CPfuente
rsync es excelente, pero tiene problemas con los árboles de directorio realmente grandes porque almacena los árboles en la memoria. Solo buscaba para ver si solucionarían este problema cuando encontré este hilo.
También encontré:
http://matthew.mceachen.us/geek/gigasync/
También puede dividir manualmente el árbol y ejecutar múltiples rsyncs.
fuente
Este hilo fue muy útil y debido a que había tantas opciones para lograr el resultado, decidí comparar algunas de ellas. Creo que mis resultados pueden ser útiles para que otros tengan una idea de lo que funcionó más rápido.
Para mover 532 Gb de datos distribuidos entre 1.753.200 archivos tuvimos esos tiempos:
rsync
tomó 232 minutostar
tomó 206 minutoscpio
tomó 225 minutosrsync + parallel
tomó 209 minutosEn mi caso, preferí usar
rsync + parallel
. Espero que esta información ayude a más personas a decidir entre estas alternativas.El punto de referencia completo se publica aquí.
fuente
cp
? Este es el título de la pregunta!cp
es inseguro, es decir: cuando se rompe tienes que comenzar de nuevo, así es como favorezco las opciones que pueden reanudarse, ergorsync
es mi favorito :)Cuando hago una copia local de un directorio local, mi experiencia es que "cp -van src dest" es un 20% más rápido que rsync. En cuanto a la reiniciabilidad, eso es lo que hace "-n". Solo necesita rm el archivo parcialmente copiado. No es doloroso a menos que sea un ISO o algo así.
fuente
¡ARJ ES TAN ANTIGUO EN LA ESCUELA! Realmente dudo que ARJ y / o rsync den rendimiento.
Definitivamente lo que siempre hago es usar cpio:
Esto es casi más rápido que el CP, definitivamente más rápido que el alquitrán y sin canalizar nada.
fuente
cpio
Página del manual de FreeBSD .cpio
desafortunadamente tiene un límite superior de 8GB para archivos.find
comando, como lo mencionó, tiene una tubería:find . -print | cpio -pdm /target/folder
Definitivamente quieres probar rclone . Esto es una locura rápido:
Esta es una copia local desde y hacia un SSD LITEONIT LCS-256 (256GB).
Puede agregar
--ignore-checksum
en la primera ejecución para hacerlo aún más rápido.fuente
Ambos funcionarán bien.
fuente
tar
también haría el trabajo, pero no reanudará la interrupción como lo hará rsync.fuente
¿Qué pasa si usas ARJ?
donde
-jm -m1
están los niveles de compresión y lo-je
convierte en un ejecutable. Ahora tienes un bash encapsulado de archivos.Luego para la extracción al mapa objetivo
donde se realizará el mapa fuente (donde
-y
siempre se acepta, sobrescribe, omite, etc.)Luego se puede scp ftp el paquete de archivos al área de destino y ejecutarlo, si es posible.
fuente
Hay algunas aceleraciones que se pueden aplicar a
rsync
:Evitar
-z
/--compress
: la compresión solo cargará la CPU ya que la transferencia no se realiza a través de una red sino a través de la RAM.--append-verify
: reanudar una transferencia interrumpida. Esto suena como una buena idea, pero tiene el caso de falla peligrosa: cualquier archivo de destino del mismo tamaño (o mayor) que la fuente será IGNORADO. Además, comprueba el archivo completo al final, lo que significa que no se acelera significativamente--no-whole-file
al agregar un caso de falla peligrosa.Utilizar
-S
/--sparse
: convierte secuencias de nulos en bloques dispersos--partial
o-P
cuál es--partial --progress
: guarde los archivos parcialmente transferidos para reanudarlos en el futuro. Nota: los archivos no tendrán un nombre temporal, así que asegúrese de que nada más espere usar el destino hasta que se haya completado la copia completa.--no-whole-file
para que cualquier cosa que deba reenviarse use la transferencia delta. Leer la mitad de un archivo parcialmente transferido suele ser mucho más rápido que volver a escribirlo.--inplace
para evitar la copia de archivos (pero solo si nada está leyendo el destino hasta que se complete la transferencia completa)fuente