Come copio rapidamente 900.000 file?


9

Devo copiare alcuni dati che includono 900.000 piccoli file per un totale di circa 30 gigabyte su un computer Windows. Tuttavia, deve essere in grado di essere copiato e configurato in meno di un'ora e mezza e possono essere necessarie più di 5 ore per copiare un disco rigido USB principalmente a causa della folle quantità di file. Esiste un modo migliore / più veloce per gestirlo, come fare una sorta di copia a blocchi? Grazie


8
Sarà un obiettivo molto aggressivo per qualsiasi copia basata su file da un singolo disco non SSD. Il semplice enumerazione di tutti i file e la gestione delle voci e dei metadati del filesystem per molti file richiede una notevole quantità di tempo.
Afrazier

5
Riesci a rimuovere il disco rigido e posizionarlo nella destinazione? questa sarebbe la massima velocità, trasferendosi sul backplane della scheda madre.
iTom il


Vuoi vedere questa domanda nel blog? Aiuta rispondendo o votando su Meta .
Tamara Wijsman,

Risposte:


7

Con un numero elevato di file, è meglio creare un archivio tar in modo da avere meno file da gestire. Se si utilizza un disco rigido esterno USB 2.0, è necessario utilizzare USB 3.0, eSATA o utilizzare una rete locale veloce.

Qual è il tuo sistema operativo di origine? Se entrambi i sistemi operativi fossero Linux, è possibile reindirizzare i file attraverso tar, gzip e ssh al computer di destinazione. È possibile installare Cygwin su Windows per ottenere questo tipo di funzionalità anche per Windows.

Aggiornamento: il post
" Uso di Tar e SSH per migliorare le velocità SCP " descrive i comandi necessari per inviare contenuti tar su ssh.


tar leggerà comunque tutti i file uno per uno.
Tomas Andrle,

Sì, ma lo faresti solo una volta e altri comandi come scp non verrebbero ritardati gestendo singoli file. Se i file possono essere conservati nell'archivio tar sul computer di destinazione, si risparmia anche tempo a scrivere un file anziché molti.
dabest1,

Presumo che la connessione USB sia il collo di bottiglia. Quindi, prendere un'immagine grezza dell'unità come suggerisce @arcyqwerty mi sembra la soluzione migliore. Sarei curioso di vedere alcuni risultati effettivi, forse mi sbaglio completamente!
Tomas Andrle,

1
@ TomA - Nella mia esperienza quando ho a che fare con molti file di piccole dimensioni, il disco rigido è il collo di bottiglia. Ogni file letto richiede una ricerca della testa per la bitmap Allocazione, quindi un'altra ricerca della testa per il contenuto del file effettivo. Di conseguenza, il disco rigido impiega la maggior parte del tempo a cercare e molto poco tempo a leggere i file.
Nome falso

2
Ad esempio, con i file 1K, ottengo ~ 1-5 MBps sulla mia lan gigabit. Con file di grandi dimensioni (gigabyte ciascuno), ottengo ~ 80-90 MBps. Riguarda le letture sequenziali.
Nome falso

8

Se il disco rigido può essere rimosso dall'interfaccia USB e su SATA / ATA, lo installerei nel computer di destinazione. Otterrai velocità di trasferimento molto più elevate, come altri hanno notato. Per la copia, supponendo che tu sia su Windows, farei una semplice ROBOCOPIA. È il più veloce possibile, anche se ci sono altre alternative.

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

Cercherei di evitare di comprimere tutti questi file, tuttavia c'è una buona probabilità che il tempo di comprimere e spostare superi il semplice spostamento dei file.

* Aggiunta l'opzione / MT per robocopy. Può velocizzare notevolmente i trasferimenti quando ti trovi in ​​un ambiente multi-thread.


Sarà /MTaiutare il trasferimento a disco singolo locale, o causare massiccia thrashing disco? È comune per la copia di condivisioni di grandi dimensioni tra server, ma spesso hanno entrambi una latenza aggiunta dovuta al passaggio in rete e al miglioramento degli IOPS dagli array RAID.
Afrazier il

Non posso davvero commentare troppo pesantemente questo aspetto. Uso robocopy per eseguire il backup di tutti i miei progetti VS ogni notte, anche se vale solo circa 10 GB. Richiede solo pochi istanti poiché i file già esistenti non vengono copiati. Ho trovato questi benchmark Robocopy qualche mese fa: demartek.com/Reports_Free/…
Lee Harrison,

nella mia esperienza, se l'adattatore da USB a SATA nell'involucro dell'unità supporta l'accodamento dei comandi nativo, ottengo un significativo aumento delle prestazioni dall'opzione / MT.
collo lungo

6

Potresti provare a scattare un'immagine dell'intera cartella / unità

Sui sistemi Linux è possibile utilizzare ddper ottenere una copia non elaborata del filesystem e copiarlo come un singolo file di grandi dimensioni.

Per estrarre l'immagine su Windows potrebbe essere necessario installare cygwin o un programma in grado di elaborare le ddimmagini.


Questo è il biglietto.
Tomas Andrle,

3

Installa il disco in cui risiedono i file di origine nel computer che stai configurando e trasferisci il disco su disco. Dimentica USB. Anche il trasferimento via cavo (collegando le macchine insieme) sarebbe più veloce di USB (supponendo NIC USB 2.0 e 1Gbps). Se questo è un evento ricorrente, cerca invece la replica.


3

Usa rsynccon zopzione.

-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

Ciò aumenterà la velocità di trasferimento sulla rete. Quindi molto probabilmente non è utile nel tuo caso.

Dopo qualche altra lettura mi sono reso conto che, non dovremmo usare il flag '-z' quando si copiano i dati da un disco rigido locale a un altro, aumenta il sovraccarico. Grazie per commentare da @FakeName.


1
rsync non comprime per i trasferimenti locali (o su una LAN, credo). Inoltre, ciò non avrebbe alcun vantaggio, poiché il vero problema è il tempo impiegato per leggere i file, non per inviarli via cavo (poiché ogni file letto richiederà almeno due operazioni di ricerca).
Nome falso

@FakeName +1 hai ragione, dopo alcune letture ho capito il tuo punto. Ho aggiornato la mia risposta.
Sachin Divekar,

1

Ti stai avvicinando rapidamente ai limiti del tuo disco rigido. In effetti, con le attuali unità di prodotto, è impossibile calcolare il tempo di trasferimento con un'operazione di copia per file.

Supponendo che ogni file richieda 1 tempo di ricerca e ricerca in HD è di 7 ms (che è un po 'idealizzato, realisticamente, ogni file richiederà due ricerche, a meno che la bitmap del volume non sia memorizzata nella cache in RAM), nella migliore delle ipotesi gestirai ~ 142 file / sec ( \ $ \ frac {1000} {7} = 142,8 ... \ $).

Con le specifiche OP (30 GB, 900.000 file) che è ~ 33K per file (\ $ \ frac {30.000.000k} {900.000} = ~ 33.3 ... \ $. 33KB * 142 = 4.68 MBps.

Il tempo minimo per trasferire 30 GB a 5 MBps è di ~ 1 ora e 40 minuti (\ $ \ frac {30.000} {5} = = 6.000 \ $ secondi. \ $ \ Frac {6.000} {60} = 100 \ $ minuti o 1:40 ore)

Pertanto, è impossibile raggiungere una velocità migliore di ~ 5 MBPS, ovvero con un'unità ideale (e meno operazioni di ricerca. Questo è per una ricerca per file. Realisticamente, sarebbe due). Sei completamente limitato dalle prestazioni del disco.


L'unico modo per migliorare le prestazioni è copiare l'intero file system e la partizione in sequenza. ddpuoi farlo su Linux.

Cosa stai cercando di fare?


TeX funziona per qualcun altro? Sembra non essere il rendering per me.
Nome falso

0

Prova 7zip per archiviare i file in un solo file. Se possibile, utilizzare la WLAN con una connessione ad hoc a un notebook.


1
o meglio ancora, una connessione ethernet diretta, preferibilmente gig-e
Journeyman Geek

0

In relazione alla risposta di @arcyqwery, potresti essere in grado di comprimerlo e contemporaneamente trasformarlo in un file di grandi dimensioni. Questo accelererà un po 'il processo.

Potrebbe anche valere la pena utilizzare un programma come TeraCopy , poiché di solito è più veloce delle prestazioni di copia di Windows predefinite. Tuttavia, dovresti provare con circostanze simili nel tuo caso.


0

Ho avuto un caso simile. Ho disattivato Anti-virus, la velocità di copia è cambiata da 3 MB / sa 12 MB / s.

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.