Copia de archivos paralelos

Copia de archivos paralelos

Tengo una lista de archivos que necesito copiar en un sistema Linux; cada archivo tiene un tamaño de entre 10 y 100 GB.

Sólo quiero copiar al sistema de archivos local. ¿Hay alguna manera de hacer esto en paralelo, con múltiples procesos, cada uno de los cuales es responsable de copiar un archivo, en unsimple¿manera?

Puedo escribir fácilmente un programa multiproceso para hacer esto, pero estoy interesado en saber si existe un método Linux de bajo nivel para hacerlo.

Respuesta1

Si su sistema no se ve afectado (por ejemplo, tal vez los archivos estén en el caché), entonces GNU Parallelhttp://www.gnu.org/software/parallel/puede funcionar para usted:

find . -type f -print0 | parallel -0 -j10 cp {} destdir

Esto ejecutará 10 cps simultáneos.

Ventaja: es fácil de leer.

Desventaja: GNU Parallel no es estándar en la mayoría de los sistemas, por lo que probablemente tengas que instalarlo.

Si desea mantener la estructura del directorio:

find . -type f -print0 |
  parallel -0 -j10 mkdir -p destdir/{//}';' cp {} destdir/{//}

Mire el vídeo de introducción para obtener más información:http://www.youtube.com/watch?v=OpaiGYxkSuQ

Ver tambiénhttps://oletange.wordpress.com/2015/07/04/parallel-disk-io-is-it-faster/para una discusión sobre E/S de disco paralelo.

Respuesta2

No existe un mecanismo de bajo nivel para esto por una razón muy simple: hacer esto destruirá el rendimiento del sistema. Con las unidades de plato, cada escritura competirá por la ubicación del cabezal, lo que provocará una espera de E/S masiva. Con los SSD, esto terminará saturando uno o más de los buses del sistema, causando otros problemas.

Respuesta3

Como se mencionó, esta es una idea terrible. Pero creo que todos deberían poder implementar sus propios planes horribles, así que...

for FILE in *;do cp $FILE <destination> &;done

El asterisco se puede reemplazar con una expresión regular de tus archivos, o $(cat <listfile>)si los tienes todos en un documento de texto. El signo comercial inicia un comando en segundo plano, por lo que el bucle continuará y generará más copias.

Como se mencionó, esto aniquilará por completo tu IO. Entonces... realmente no recomendaría hacerlo.

--Christopher Karel

Respuesta4

Aquí hay una herramienta de copia de archivos distribuida/paralela y descentralizada que fragmentará el archivo y copiará todos los fragmentos en paralelo. Probablemente solo te ayude si tienes un SSD que admita múltiples transmisiones o algún tipo de configuración con múltiples cabezales de disco.

https://github.com/hpc/dcp

información relacionada