reanudar la copia de archivos de Linux

9

¿Cómo reanudo una copia de un archivo grande en Linux? Tengo un archivo enorme (varios gigabytes) parcialmente copiado en una unidad de red, y tardó mucho tiempo, y se realizó principalmente antes de que la operación de copia se detuviera debido a un problema de red que ahora está solucionado. ¿Cómo reanudo la copia del archivo? No quiero un script ineficiente, y ecp no funcionó (no parece funcionar para archivos grandes).


fuente

Respuestas:

4

Me gustaría probar rsync -a /from/file /dest/file.

Gonzalo
fuente
1
y mientras hablamos de rsync, tenga en cuenta que puede copiar directamente a cualquier máquina remota [compatible con SSH] usando rsync -az -e ssh / from / file [email protected]: / full / dest / path
Mikeage
2
Guau. ejecutar rsync así sin ninguna opción eliminará / dest / file y retransmitirá todo. ¿Cómo se votó esto?
Justin
1
¿Cómo ayuda la preservación de los atributos del archivo (-a)? ¿Debería ser esto?
Malvineous
3

Si sabe que simplemente necesita agregar al archivo local y no desea usar rsync (que podría tomar mucho tiempo para calcular sumas de verificación), puede usar curl. Por ejemplo, si tiene un archivo grande en una memoria USB extraíble lenta montada /media/CORSAIR/somefile.daty solo la mitad está en el directorio actual, para reanudar:

curl -C - -O "file:///media/CORSAIR/somefile.dat"

usuario48985
fuente
Gracias por el consejo, tuve que usar este consejo porque estaba copiando desde un servidor SMB de Windows (así que no rsync) cuando se perdió la conexión lenta, y no quería descargar los 500 MB desde el principio.
MiKy
2

Sí, rsync es el camino a seguir. Para mí, hemos transferido más de 100 GB de datos a través de rsync + ssh. Si está buscando una copia de seguridad real, asegúrese de usar la -aopción (archivo) para preservar los atributos del archivo (tiempos, propietarios, permisos, etc.)

host1> rsync -aP file user@host2:/path/to/new/dir/

También es útil para copiar archivos grandes que pueden cambiar durante el curso de una migración. Puede precargar los datos en el destino y una vez que esté listo para la copia final, vuelva a hacerlo, pero solo por una fracción del tiempo. Puede ahorrar en tiempo de inactividad real utilizando rsync en todo su potencial.

El uso de PS v(detallado) puede ralentizar la transferencia de muchos archivos.

Pez volador
fuente
2

El comando que quieres va a ser algo como

rsync -v --append /path/to/afile /mnt/server/dest/afile

a menos que pueda acceder al servidor a través de ssh y ejecutar rsync de esa manera, en ese caso el comando que FlyingFish le dio es el mejor.

Justin
fuente
0

rsync solo es bueno si tiene rsync en el servidor de destino. En ese caso, de hecho es la mejor solución.

Pero no de otra manera. Dado que el objetivo de rsync es copiar solo partes modificadas en archivos grandes, se supone que estas partes modificadas pueden estar en cualquier parte del archivo. Esto significa que sumará todos los bloques que ya se han copiado. Si no tiene rsync en el extremo remoto, su rsync local comenzará por leer todo lo que ya ha sido transferido.

Si su máquina fuente tiene un servidor web o ftp, puede usar wget desde el servidor de destino con la opción "- continuar". (o rizar con la opción "--continue-at [- | size]").

Si su máquina de destino tiene un servidor FTP, puede usar curl en la máquina de origen con la opción --append.

Como último recurso, puede usar dd con los argumentos "bs =" (tamaño de bloque), "skip =" y "seek =". Por ejemplo:

Supongamos que podrá usar bloques de 2048 bytes. Si su archivo de destino es actualmente 2'048'000'000 bytes (2 GB), eso es 1'000'000 bloques de 2048 bytes. Para agregar el resto de su archivo fuente al destino, puede

dd if = archivo_origen de = archivo_destino bs = 2048 skip = 1000000 seek = 1000000

Es posible que pueda usar un tamaño de bloque más grande para mejorar la velocidad de transferencia. Solo recuerde especificar el tamaño del bloque con bs = y que el valor dado para saltar y buscar está en bloques, no en bytes.


fuente
Lo que dijiste sobre rsync es falso. man rsync, lea lo que hace la opción --append.
Justin