Transferencia de aproximadamente 300 gb en archivos de un servidor a otro

20

Tengo unos 200,000 archivos que estoy transfiriendo a un nuevo servidor hoy. No he hecho nada a gran escala antes, y quería obtener algunos consejos sobre cómo debería hacerlo. Los estoy moviendo entre dos distribuciones de Centos 6, y están en diferentes lugares del país. No tengo suficiente espacio en el disco duro en el servidor original para almacenar todos los directorios y archivos en un tarball masivo, así que mi pregunta es ¿cómo debo transferir todos estos archivos? rsync? alguna forma especial de usar rsync? Cualquier aportación / sugerencia sobre cómo hacerlo sería increíble.

Gracias

EDITAR: Para aquellos que se preguntan, recomiendo encarecidamente usar un screencuando se ejecuta un rsynccomando grande como este. Especialmente cuando puede ocurrir algo tonto y pierde la conexión con el servidor A desde el que ejecuta el rsynccomando. Luego simplemente separe la pantalla y reanudela más tarde.

MasterGberry
fuente
44
¿Ya lo has intentado rsync? ¿Quizás en un pequeño conjunto de archivos más o menos? Debería ser la herramienta ideal para eso.
slhck
Es casi seguro que no es la mejor herramienta para este trabajo, pero puede interesarle el hecho de que puede transmitir tar a través de una conexión ssh en lugar de tener que comprimir un archivo antes de mover el archivo:tar cz | ssh [email protected] tar xz
Aesin
2
podría estar fuera de tema, pero (especialmente para una carga inicial, y luego usarlo rsyncpara actualizaciones posteriores): "Nunca subestimes el ancho de banda de una camioneta llena de cintas" (es decir, ¿has considerado colocar un segundo hd (o conecta un usb2) / usb3 disk), hacer una copia de seguridad y enviarlo a través de fedex a la ubicación remota? Podría ser MUCHO más rápido que cualquier otra cosa y ahorrar ancho de banda para otros usos.
Olivier Dulac
No tengo ningún límite de BW para un proveedor y al otro no llegaré este mes. Así que realmente no tengo problemas para desperdiciarlo: P
MasterGberry
1
@OlivierDulac what-if.xkcd.com/31
Bob

Respuestas:

24

Solo para dar cuerpo a la respuesta de Simon , rsynces la herramienta perfecta para el trabajo:

   Rsync  is  a  fast  and extraordinarily versatile file copying
   tool.  It can copy locally,  to/from  another  host  over  any
   remote  shell,  or to/from a remote rsync daemon.  It offers a
   large number of options  that  control  every  aspect  of  its
   behavior  and permit very flexible specification of the set of
   files to be copied.  It is famous for its delta-transfer algo‐
   rithm,  which reduces the amount of data sent over the network
   by sending only the differences between the source  files  and
   the  existing  files in the destination.  Rsync is widely used
   for backups and mirroring and as an improved copy command  for
   everyday use.

Suponiendo que tiene acceso ssh a la máquina remota, desearía hacer algo como esto:

rsync -hrtplu path/to/local/foo [email protected]:/path/to/remote/bar

Esto copia el directorio path/to/local/fooa /path/to/remote/baren el servidor remoto. Se bar/foocreará un nuevo subdirectorio llamado . Si solo desea copiar el contenido de un directorio, sin crear un directorio con ese nombre en el destino, agregue una barra diagonal final:

rsync -hrtplu path/to/local/foo/ [email protected]:/path/to/remote/bar

Esto copiará el contenido de foo/en el directorio remoto bar/.

Algunas opciones relevantes:

 -h,                         output numbers in a human-readable format 
 -r                          recurse into directories
 -t, --times                 preserve modification times
 -p, --perms                 preserve permissions
 -l, --links                 copy symlinks as symlinks
 -u, --update                skip files that are newer on the receiver
 --delete                    delete extraneous files from dest dirs
 -z, --compress              compress file data during the transfer
 -C, --cvs-exclude           auto-ignore files in the same way CVS does
 --progress                  show progress during transfer
 --stats                     give some file-transfer stats
terdon
fuente
rsync -hrtplu --progressEntonces, ¿ qué podría hacer si quisiera ver el progreso a medida que avanza?
MasterGberry
@MasterGberry sí, exactamente. Tengo un script de respaldo que se ejecuta rsync --progress --stats -hrtl --update source destination.
terdon
Parece que tengo problemas para que funcione. rsync -hrtplu --progress --rsh='ssh -p2202'es lo que estoy usando y no se puede conectar. Sigue recibiendo 255 error. Pero estoy metido en eso. Entonces sé que no es el firewall ... ¿necesito proporcionar la contraseña a través del cmd también? o no me lo pediría después?
MasterGberry
Derp, nvm. Olvidé el tráfico saliente en mi firewall. Gracias
MasterGberry
Nota importante: con rsync, tenga mucho cuidado al usar "--delete": lea mucho sobre él, pruebe en otras carpetas (/ tmp / ...) y tenga cuidado con los cambios al agregar o no un "/" al final al final de los directorios de origen o de destino.
Olivier Dulac
14

Depende de qué tan rápido se deba copiar y cuánto ancho de banda esté disponible.

Para una conexión de red deficiente, considere el ancho de banda de un camión lleno de cintas. (Lea: envíe un disco duro de 2,5 pulgadas, o simplemente conduzca allí usted mismo. Las unidades de 300 gigabits deberían ser fáciles de encontrar).

Si necesita menos tiempo o tiene mucho ancho de banda, entonces rsync es excelente. Si hay un error, puede continuar sin volver a copiar los archivos anteriores.

[Editar] Olvidé agregar que puedes ejecutar rsync varias veces si tus datos se usan durante la copia.

Ejemplo:
1) Datos en uso. Rsync -> Todos los datos se copian. Esto puede tomar algo de tiempo.
2) Ejecute rsync nuevamente, solo se copian los archivos modificados. Esto debería ser rápido.

Puede hacerlo varias veces hasta que no haya cambios, o puede hacerlo de manera inteligente / segura haciendo que los datos sean de solo lectura durante la copia. (p. ej., si está en un conjunto compartido usado que comparte en solo lectura. O sincronice los datos, luego establezca el compartimiento en solo lectura mientras lo ejecuta por segunda vez).

Hennes
fuente
1
Ningún servidor debería estar viviendo en un lugar donde el ancho de banda no pueda manejar 300G en un tiempo razonable ...
Dan
1
Eso depende de lo que sea "razonable". Digamos que el enlace más débil es de 100 mbit (no me importa si ese es el límite de carga desde la oficina o la descarga en el otro). Eso permite aproximadamente 10 MB / seg. (div por 10 parece razonable, sé que puedes obtener un poco más si todo va perfectamente bien. Por ejemplo, nadie más está usando la línea para nada). 10MB / seg ~~ 600MB / min ~~ 36000MB / hora ~~ 36 GB / hora ~~ 300GB es 8h20min. Eso es factible de la noche a la mañana. Eso también hace muchas suposiciones. Por ejemplo, si la carga es de solo 2 mbit (tenemos oficinas con esas velocidades), tarda 50 veces más (415h o 17.3 días).
Hennes
¡Ay! Sí, 8-10 es razonable, pero de hecho estaba haciendo una serie de suposiciones.
Dan
2
@Dan Si es un requisito que el servidor esté activo y sirviendo solicitudes, saturar el ancho de banda ascendente es probablemente una mala idea. Por lo tanto, tendría que acelerar artificialmente la velocidad de transferencia para tener en cuenta eso.
Bob
6

Yo iría por rsync! Lo estoy usando para hacer una copia de seguridad de mi servidor en un servidor externo y funciona bien. Por lo general, hay unos pocos MB para copiar, pero algunos días sube a 20-30 GB y siempre funcionó sin problemas.

Simón
fuente
0

rsync a través de NFS usando una conexión Gigabit tomará casi 10 horas Será mejor copiar datos en el disco duro y moverlos entre el servidor. Si necesita hacer una copia uno a uno del disco, use dd o algo así para crear una imagen sin formato del disco. El uso de ssh (scp) causa una gran sobrecarga. Probado empíricamente en conexión Gigabit. rsync es bueno para realizar una sincronización incremental entre dos servidores utilizados en HA o en modo de copia de seguridad. Supongo.

Pawel
fuente
El lenguaje y el estilo de esta respuesta deben mejorarse.
FSMaxB
Rsync es especialmente bueno si los archivos pueden cambiar durante la copia. Solo ejecútalo algunas veces. Primera vez que se copian todos los datos. La segunda vez solo lo que cambió durante la primera copia (larga). Una tercera vez se haría de noche o con las acciones de solo lectura.
Hennes
will took nearly about 10h. It will be better to copy data on HDD and move them between server.excepto que está en todo el país, por lo que llevaría más tiempo.
Rob
@FSMaxB: Haré esto más tarde, gracias.
Pawel
@Rob: He leído esto;) Que los servidores están en dos ubicaciones diferentes. Por lo tanto, debe calcular qué será mejor para usted. Hacer un viaje por todo el país (verificar el costo del combustible, etc.) o usar la conexión de red. Lo que será más beneficioso.
Pawel
0

use NFS por primera vez y tar / untar (NFS es el protocolo más rápido en este caso, tar para ahorrar ancho de banda de red al utilizar más la CPU)

tar cf - * | ( cd /target; tar xfp -)

la próxima vez que use rsync

chorro
fuente
Si tiene suficiente potencia de CPU, puede mejorar esto agregando gzip al bucle. Y sin NFS puedes usar netcat. (O incluso ambos: tar -cf - * | gzip | nc -p 4567y nc -l 4567 | gunzip | tar xf -.
Hennes
gracias Hennes, esa fue mi idea, pero olvidé gzip en las tuberías
jet