
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 cp
s 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.