¿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).
9
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.dat
y solo la mitad está en el directorio actual, para reanudar:curl -C - -O "file:///media/CORSAIR/somefile.dat"
fuente
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
-a
opción (archivo) para preservar los atributos del archivo (tiempos, propietarios, permisos, etc.)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.fuente
El comando que quieres va a ser algo como
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.
fuente
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