¿Cómo copio rápidamente 900,000 archivos?

9

Necesito copiar algunos datos que incluyen 900,000 pequeños archivos con un total de alrededor de 30 gigabytes en una computadora con Windows. Sin embargo, debe poder copiarse y configurarse en menos de una hora y media, y puede tomar más de 5 horas copiar un disco duro USB, principalmente debido a la gran cantidad de archivos. ¿Existe una forma mejor / más rápida de lidiar con esto, como hacer algún tipo de copia en bloque? Gracias

Joe Lyga
fuente
8
Ese será un objetivo muy agresivo para cualquier copia basada en archivos de un solo disco que no sea SSD. Simplemente enumerar todos los archivos y tratar con las entradas y metadatos del sistema de archivos para esa cantidad de archivos lleva una cantidad significativa de tiempo.
Afrazier
55
¿Eres capaz de quitar el disco duro y colocarlo en el destino? esta sería la velocidad más rápida, transfiriendo sobre el plano posterior de la placa base.
iTom
1
xkcd.com/949
user541686
¿Quieres ver esta pregunta en un blog? Ayuda respondiendo o votando en Meta .
Tamara Wijsman

Respuestas:

7

Con una gran cantidad de archivos, es mejor crear un archivo tar para que tenga menos archivos con los que lidiar. Si está utilizando un disco duro externo USB 2.0, debería usar USB 3.0, eSATA o una red local rápida.

¿Cuál es su sistema operativo de origen? Si sus dos sistemas operativos fueran Linux, podría canalizar los archivos a través de tar, gzip y ssh a la máquina de destino. También podría instalar cygwin en Windows para obtener este tipo de funcionalidad para Windows.

Actualización: la publicación
" Uso de Tar y SSH para mejorar las velocidades de SCP " describe los comandos necesarios para enviar contenido tar a través de ssh.

dabest1
fuente
tar leerá todos los archivos uno por uno.
Tomás Andrle
Sí, pero lo haría solo una vez y otros comandos como scp no se retrasarían al tratar con archivos individuales. Si los archivos se pueden guardar en un archivo tar en la máquina de destino, también ahorrará tiempo al escribir un archivo en lugar de muchos.
dabest1
Supongo que la conexión USB es el cuello de botella. Así que tomar una imagen cruda del disco como sugiere @arcyqwerty me parece la mejor solución. Sin embargo, sería curioso ver algunos resultados reales, ¡tal vez estoy completamente equivocado!
Tomás Andrle
1
@TomA: en mi experiencia cuando se trata de muchos archivos pequeños, el disco duro es el cuello de botella. Cada lectura de archivo requiere una búsqueda de cabeza en el mapa de bits de Asignación, y luego otra búsqueda de cabeza en el contenido real del archivo. Como resultado, el disco duro pasa la mayor parte del tiempo buscando, y muy poco tiempo leyendo los archivos.
Nombre falso
2
Como ejemplo, con archivos de 1K, obtengo ~ 1-5 MBps sobre mi gigabit lan. Con archivos grandes (gigabytes cada uno), obtengo ~ 80-90 MBps. Se trata de las lecturas secuenciales.
Nombre falso
8

Si el disco duro se puede quitar de la interfaz USB y en SATA / ATA, lo instalaría en la computadora de destino. Obtendrá velocidades de transferencia mucho más rápidas, como otros han notado. Para copiar, suponiendo que esté en Windows, haría una ROBOCOPIA simple. Es casi tan rápido como realmente puedes esperar, aunque hay otras alternativas.

ROBOCOPY /E /B /MT 'source' 'destination'

Sin embargo, trataría de evitar comprimir todos estos archivos, hay una buena posibilidad de que el tiempo para comprimir y mover exceda simplemente mover los archivos.

* Se agregó la opción / MT para robocopy. Puede acelerar enormemente las transferencias cuando se encuentra en un entorno de subprocesos múltiples.

Lee Harrison
fuente
¿ /MTAyudará en las transferencias locales de un solo disco, o causará una agitación masiva del disco? Es común para copiar grandes recursos compartidos entre servidores, pero a menudo tienen latencia adicional debido a que pasan por la red y mejoran las IOPS de las matrices RAID.
Afrazier
Realmente no puedo comentar demasiado sobre este aspecto. Utilizo robocopy para hacer una copia de seguridad de todos mis proyectos de VS todas las noches, aunque solo vale unos 10 GB. Solo lleva unos minutos, ya que los archivos que ya existen no se copian. Encontré estos puntos de referencia de Robocopy hace unos meses: demartek.com/Reports_Free/…
Lee Harrison
en mi experiencia, si el adaptador USB a SATA en el gabinete de su unidad admite la cola de comandos nativa, entonces obtengo un aumento significativo del rendimiento del conmutador / MT.
Longneck
6

Puede intentar tomar una imagen de toda la carpeta / unidad

En los sistemas Linux, puede usar ddpara obtener una copia sin formato del sistema de archivos y copiarlo como un solo archivo grande.

Para extraer la imagen en Windows, es posible que necesite instalar cygwin o un programa que pueda procesar ddimágenes.

arcyqwerty
fuente
Ese es el boleto.
Tomás Andrle
3

Instale el disco donde residen los archivos de origen en la computadora que está configurando y transfiera el disco a disco. Olvídate de USB. Incluso transferir a través del cable (conectar las máquinas en red) sería más rápido que el USB (suponiendo usb 2.0 y 1Gbps NIC). Si este es un evento recurrente, busque replicación en su lugar.

Paul Ackerman
fuente
3

Usar rsynccon zopción.

-z,         --compress              compress file data during the transfer
            --compress-level=NUM    explicitly set compression level
            --skip-compress=LIST    skip compressing files with suffix in LIST

Esto aumentará la velocidad de transferencia a través de la red. Lo más probable es que no sea útil en su caso.

Después de leer un poco más, me di cuenta de que, no debemos usar el indicador '-z' al copiar datos de un disco duro local a otro, aumenta la sobrecarga. Gracias por comentar de @FakeName.

Sachin Divekar
fuente
1
rsync no comprime las transferencias locales (o en una LAN, creo). Además, esto no tendría ningún beneficio, ya que el problema real es el tiempo necesario para leer los archivos, no enviarlos por cable (ya que cada lectura de archivo requerirá dos operaciones de búsqueda como mínimo).
Nombre falso
@FakeName +1 tienes razón, después de leer un poco entendí tu punto He actualizado mi respuesta.
Sachin Divekar
1

Te estás acercando rápidamente a las limitaciones de tu disco duro. De hecho, con las unidades de productos básicos actuales, es imposible mejorar su tiempo de transferencia con una operación de copia por archivo.

Suponiendo que cada archivo requiere 1 búsqueda HD y el tiempo de búsqueda es de 7 ms (lo cual es un poco idealizado, de manera realista, cada archivo requerirá dos búsquedas, a menos que el mapa de bits de volumen se almacene en caché en ram), en el mejor de los casos, administrará ~ 142 archivos / seg ( \ $ \ frac {1000} {7} = 142.8 ... \ $).

Con las especificaciones OP (30 GB, 900,000 archivos) que son ~ 33K por archivo (\ $ \ frac {30,000,000k} {900,000} = ~ 33.3 ... \ $. 33KB * 142 = 4.68 MBps.

El tiempo mínimo para transferir 30 GB a 5 MBps es de ~ 1 hora, 40 minutos (\ $ \ frac {30,000} {5} = = 6,000 \ $ segundos. \ $ \ Frac {6,000} {60} = 100 \ $ minutos o 1:40 horas)

Por lo tanto, es imposible lograr una velocidad mejor que ~ 5 MBPS, y eso es con una unidad ideal (y menos operaciones de búsqueda. Esto es para una búsqueda por archivo. Realmente, serían dos). Estás completamente limitado por el rendimiento del disco.


La única forma de mejorar el rendimiento es copiar el sistema de archivos completo y la partición secuencialmente. ddPuede hacer esto en Linux.

¿Que estás tratando de hacer?

Nombre falso
fuente
¿TeX funciona para alguien más? Parece que no se está procesando para mí.
Nombre falso el
0

Intente 7zip para archivar los archivos en un solo archivo. Si es posible, use WLAN con una conexión ad hoc a una computadora portátil.

ott--
fuente
1
o mejor aún, una conexión directa de ethernet, preferiblemente gig-e
Journeyman Geek
0

En relación con la respuesta de @arcyqwery, es posible que pueda comprimirlo y, simultáneamente, convertirlo en un archivo grande. Esto acelerará un poco el proceso.

También podría valer la pena usar un programa como TeraCopy , ya que generalmente es más rápido que el rendimiento predeterminado de copia de Windows. Sin embargo, debe probar con circunstancias similares en su caso para verificar.

soandos
fuente
0

Tuve un caso similar. Desactivé el antivirus, la velocidad de copia cambió de 3 MB / sa 12 MB / s.

ingrese la descripción de la imagen aquí

Rm558
fuente