Necesito transferir una gran cantidad de mp3 entre dos servicios (Ubuntu). Por enorme quiero decir alrededor de un millón de archivos que son en promedio 300K. Lo intenté scp
pero me habría llevado alrededor de una semana. (aproximadamente 500 KB / s) Si transfiero un solo archivo por HTTP, obtengo 9-10 MB / s, pero no sé cómo transferirlos todos.
¿Hay alguna manera de transferirlos todos rápidamente?
linux
performance
file-transfer
nicudotro
fuente
fuente
Respuestas:
Yo recomendaría alquitrán. Cuando los árboles de archivos ya son similares, rsync funciona muy bien. Sin embargo, dado que rsync realizará múltiples pases de análisis en cada archivo y luego copiará los cambios, es mucho más lento que tar para la copia inicial. Este comando probablemente hará lo que quieras. Copiará los archivos entre las máquinas, así como preservará tanto los permisos como la propiedad de usuarios / grupos.
Según el comentario de Mackintosh a continuación, este es el comando que usaría para rsync
fuente
~
carácter de escape solo está habilitado si SSH está usando una terminal. Este no es el caso cuando especifica un comando remoto (a menos que pase la-t
opción). Entonces su preocupación no es válida.Disco duro externo y entrega por mensajería el mismo día.
fuente
Yo usaría rsync.
Si los ha exportado a través de HTTP con listas de directorios disponibles, también puede usar wget y el argumento --mirror.
Ya está viendo que HTTP es más rápido que SCP porque SCP está encriptando todo (y, por lo tanto, el cuello de botella en la CPU). HTTP y rsync se moverán más rápido porque no están encriptados.
Aquí hay algunos documentos sobre cómo configurar rsync en Ubuntu: https://help.ubuntu.com/community/rsync
Esos documentos hablan sobre tunelizar rsync a través de SSH, pero si solo está moviendo datos en una LAN privada, no necesita SSH. (Supongo que está en una LAN privada. Si obtiene 9-10MB / seg por Internet, ¡quiero saber qué tipo de conexiones tiene!)
Aquí hay algunos otros documentos muy básicos que le permitirán configurar un servidor rsync relativamente inseguro (sin dependencia de SSH): http://transamrit.net/docs/rsync/
fuente
--include
y--exclude
para obtener más matices.Sin mucha discusión, use netcat, navaja suiza de red. Sin sobrecarga de protocolo, está copiando directamente al socket de red. Ejemplo
fuente
pv
) y verificación de integridad víasha512sum
, pero una vez que se voltea un poco, todo el flujo es malo porque no hay forma de recuperarlo. Lo que realmente necesitamos es un protocolo liviano como un torrente de transmisión para estos entornos seguros cuando necesitamos una sobrecarga baja, algo que verificará la integridad en el nivel de fragmento (por ejemplo, 4 MB) y puede volver a emitir un fragmento cuando uno falla. TCP crc no es lo suficientemente potente.Con muchos archivos si va con rsync, trataría de obtener la versión 3 o superior en ambos extremos . La razón es que una versión menor enumerará cada archivo antes de que comience la transferencia. La nueva característica se llama recursividad incremental .
fuente
rsync, como otros ya lo han recomendado. Si la sobrecarga de la CPU del cifrado es un cuello de botella, use otro algoritmo menos intensivo de la CPU, como blowfish. Por ejemplo, algo como
rsync -ax -e 'ssh -c blowfish' /local/path user@host:/remote/path
fuente
Al mover 80 TB de datos (millones de archivos pequeños) ayer, el cambio de
rsync
atar
resultó ser mucho más rápido , ya que dejamos de intentarloy cambió a su
tar
lugar ...Dado que estos servidores están en la misma LAN, el destino está montado en NFS en el sistema de origen, que está haciendo el empuje. No lo hagas aún más rápido, decidimos no preservar los
atime
archivos:El siguiente gráfico muestra la diferencia que hizo el cambio de rsync a tar. Fue idea de mi jefe y mi colega lo ejecutó e hizo la gran reseña en su blog . Simplemente me gustan las fotos bonitas . :)
fuente
tar cf - directory | ttcp -t dest_machine
de ftp.arl.mil/mike/ttcp.htmlAl copiar una gran cantidad de archivos, descubrí que las herramientas como tar y rsync son más ineficientes de lo que deberían ser debido a la sobrecarga de abrir y cerrar muchos archivos. Escribí una herramienta de código abierto llamada fast-archiver que es más rápida que tar para estos escenarios: https://github.com/replicon/fast-archiver ; funciona más rápido al realizar múltiples operaciones concurrentes de archivos.
Aquí hay un ejemplo de archivador rápido versus tar en una copia de seguridad de más de dos millones de archivos; el archivador rápido tarda 27 minutos en archivarse, mientras que el tar tarda 1 hora 23 minutos.
Para transferir archivos entre servidores, puede usar el archivador rápido con ssh, como este:
fuente
También uso el
netcat
método tar through , excepto que prefiero usarsocat
, mucha más potencia para optimizar su situación, por ejemplo, ajustando mss. (Además, ríete si quieres, pero encuentrosocat
argumentos más fáciles de recordar porque son consistentes). Entonces, para mí, esto es muy común últimamente, ya que he estado moviendo cosas a nuevos servidores:Los alias son opcionales.
fuente
Otra alternativa es Unison . Podría ser un poco más eficiente que Rsync en este caso, y es algo más fácil configurar un oyente.
fuente
Parece que puede haber un par de errores tipográficos en la respuesta superior. Esto puede funcionar mejor:
fuente
wget --mirror
que Evan Anderson ha sugerido o cualquier otro cliente http. Tenga cuidado de no tener enlaces simbólicos desagradables o archivos de índice engañosos. Si todo lo que tienes es MP3, debes estar seguro.He notado que otras personas han recomendado usar netcat . Según mi experiencia con él, puedo decir que es lento en comparación con las otras soluciones.
fuente
Gracias a la maravillosa respuesta de Scott Pack (no sabía cómo hacer esto con ssh antes), puedo ofrecer esta mejora (si
bash
es su shell). Esto agregará compresión paralela, un indicador de progreso y comprobará la integridad en el enlace de red:pv
es un buen programa visor de progreso para su canalización ypigz
es un programa gzip paralelo que usa tantos subprocesos como su CPU tiene por defecto (creo que hasta 8 máx.). Puede ajustar el nivel de compresión para ajustarse mejor a la relación de la CPU a la red de ancho de banda e intercambiarlo conpxz -9e
ypxz -d
si tiene mucha más CPU que el ancho de banda. Solo tiene que verificar que las dos sumas coincidan al finalizar.Esta opción es útil para grandes cantidades de datos, así como para redes de alta latencia, pero no es muy útil si el enlace es inestable y se cae. En esos casos, rsync es probablemente la mejor opción, ya que puede reanudarse.
Salida de muestra:
Para dispositivos de bloque:
Obviamente, asegúrese de que tengan el mismo tamaño o límite con count =, skip =, seek =, etc.
Cuando copio los sistemas de archivos de esta manera, a menudo primero pongo
dd if=/dev/zero of=/thefs/zero.dat bs=64k && sync && rm /thefs/zero.dat && umount /thefs
a cero la mayor parte del espacio no utilizado, lo que acelera el xfer.fuente
No creo que vaya a hacerlo mejor que scp a menos que instale tarjetas de red más rápidas. Si está haciendo esto a través de Internet, eso no ayudará.
Yo recomendaría usar rsync . Puede que no sea más rápido, pero al menos si falla (o si lo cierra porque está tardando demasiado), puede continuar donde lo dejó la próxima vez.
Si puede conectar las 2 máquinas directamente usando Gigabit Ethernet, probablemente será la más rápida.
fuente
Para 100 Mb / s, el rendimiento teórico es de 12.5 MB / s, por lo que a 10 MB / s lo está haciendo bastante bien.
También haría eco de la sugerencia de hacer rsync, probablemente a través de ssh. Algo como:
A 100 Mb / s, sus CPU deberían poder manejar el cifrado / descifrado sin afectar significativamente la velocidad de datos. Y si interrumpe el flujo de datos, debería poder reanudar desde donde lo dejó. Cuidado, con "millones" de archivos, el inicio tardará un tiempo antes de que realmente transfiera algo.
fuente
Me he encontrado con esto, excepto que estaba transfiriendo registros de Oracle.
Aquí está el desglose
scp
rsync
FTP / HTTP
Utilicé FTP con gran éxito (donde un gran éxito es equivalente a ~ 700Mb / s en una red de Gb). Si está obteniendo 10 MB (que es igual a 80 Mb / s), probablemente algo esté mal.
¿Qué nos puede decir sobre el origen y el destino de los datos? ¿Es de unidad única a unidad única? RAID a USB?
Sé que esta pregunta ya tiene una respuesta, pero si su red va tan lenta en un cable cruzado de Gb / s, es absolutamente necesario solucionar algo.
fuente
No mencionó si las dos máquinas están en la misma LAN, o si un canal seguro (es decir, usando SSH) es obligatorio, pero otra herramienta que podría usar es netcat .
Usaría lo siguiente en la máquina receptora:
Luego en el lado de envío:
Tiene las siguientes ventajas:
gzip -1
proporciona una compresión ligera sin saturar una CPU por lo que tiene una buena compensación, dando un poco de compresión, manteniendo el máximo rendimiento. (Probablemente no sea tan ventajoso para los datos MP3, pero no hace daño).p.ej,
Notas:
tar
lugar decpio
si lo prefiere.gzip -1
tu lugar para evitar la saturación de la CPU. (O al menos establezca el CompressionLevel en 1.)fuente
Un scp simple con las opciones adecuadas alcanzará fácilmente 9-10 MB / s a través de LAN:
Con esas opciones, es probable que el rendimiento sea 4x o 5x más rápido que ninguna opción (predeterminado)
fuente
Si tiene un servidor ftp en el lado src, puede usar ncftpget desde el sitio ncftp . Funciona perfecto con archivos pequeños, ya que utiliza alquitrán internamente.
Una comparación muestra esto: mover archivos pequeños de 1.9GB (33926 archivos)
fuente
También puede intentar usar el comando BBCP para hacer su transferencia. Es un ssh paralelo amortiguado que realmente grita. Por lo general, podemos obtener una tasa de línea de 90% + siempre que podamos mantener la tubería alimentada.
Normalmente, nos esforzamos mucho para evitar tener que movernos sufriendo. Utilizamos grupos ZFS a los que siempre podemos simplemente "agregar" más espacio en disco. Pero a veces ... solo tienes que mover cosas. Si tenemos un sistema de archivos "en vivo" que puede tardar horas (o días) en copiarse incluso cuando se ejecuta a toda velocidad ... hacemos la rutina de envío zfs de dos pasos:
También enviamos nuestros volcados zfs a través de BBCP ... maximiza la utilización de nuestra red y minimiza los tiempos de transferencia.
BBCP está disponible gratuitamente, puedes buscarlo en Google y es una compilación directa. Simplemente cópielo en su / usr / local / bin en las máquinas src y de destino y funcionará prácticamente.
fuente
Supongo que mi respuesta está un poco tarde aquí, pero hice buenas experiencias con el uso de mc (Midnight Commander) en un servidor para conectarme a través de SFTP al otro servidor.
La opción para conectarse a través de FTP se encuentra en los menús "Izquierda" y "Derecha", ingresando la dirección de esta manera:
o
Puede navegar y hacer operaciones de archivos casi como en un sistema de archivos local.
Tiene una opción incorporada para hacer la copia en segundo plano, pero prefiero usar el comando de pantalla y separarlo de la pantalla mientras mc está copiando (creo que también se ejecuta más rápido).
fuente
A @scottpack respuesta de la opción rSync
Para mostrar el progreso de la carga, use '--progess' como opción después de -avW en el comando como se muestra a continuación.
fuente
Aquí hay un punto de referencia rápido para comparar algunas técnicas,
Número de archivos: 9632, Tamaño total: 814 MiB, Tamaño promedio: 84 KiB
El comando para tar / netcat fue:
fuente
rsync o es posible que desee tarlo para que esté todo dentro de un archivo y luego scp. Si carece del espacio en disco, puede canalizar el alquitrán directamente sobre ssh mientras se está haciendo.
fuente
Si envía archivos MP3 y otros archivos comprimidos, no obtendrá mucho de ninguna solución que intente comprimir aún más esos archivos. La solución sería algo que pueda crear múltiples conexiones entre ambos servidores y, por lo tanto, ejercer más presión sobre el ancho de banda entre los dos sistemas. Una vez que esto se maximiza, no se puede ganar mucho sin mejorar su hardware. (Tarjetas de red más rápidas entre esos servidores, por ejemplo).
fuente
Intenté un par de herramientas para copiar un archivo de 1GB. El resultado es el siguiente: HTTP el más rápido, con wget -c nc segundo en la línea scp más lento, y falló un par de veces. No hay forma de reanudar rsync utiliza ssh como back-end, por lo tanto, el mismo resultado. En conclusión, elegiría http con wget -bqc y le daría algo de tiempo. Espero que esto ayude
fuente
Tuve que copiar el disco BackupPC en otra máquina.
Yo usé rsync.
La máquina tenía 256 MB de memoria.
El procedimiento que seguí fue este:
rsync
sin-H
(tomó 9 horas)cpool
directorio y comencé con elpc
directorio; Corté la transferencia.rsync
con la-H
marca, y todos los archivos vinculados en elpc
directorio se transfirieron correctamente (el procedimiento encontró todos los archivos realescpool
y luego se vinculó alpc
directorio) (tomó 3 horas).Al final pude verificar con
df -m
que no se gastó espacio adicional.De esta manera eludo el problema con la memoria y rsync. Todo el tiempo puedo verificar el rendimiento usando top y top y finalmente transferí 165 GB de datos.
fuente