Metodo più veloce per copiare i file


15

Se abbiamo una build di successo sul nostro server di build (CCNET), tutti i file del sito Web ASP.NET vengono copiati nella directory virtuale (% output_dir%) in modo che i non sviluppatori possano vedere / testare l'ultima versione del sito Web. Alla fine della compilazione viene eseguito il seguente file bat.

rmdir /s /q "%output_dir%"
mkdir "%output_dir%"
xcopy "%source_dir%*"  "%output_dir%" /e /c /i /q /-y

Il problema è che trovo la copia lenta e mi chiedevo se ci sono comandi di copia disponibili in Windows 2008 che sono più veloci di xcopy? La fonte e la destinazione sono sulla stessa unità. Di seguito sono riportati gli argomenti che utilizziamo durante la copia.

/e = copies directories and sub directories including empty ones.
/c = continues copying even if there are errors
/i = if destination does not exist destination is directory
/q = don't display filenames
/-y = confirm overwrite

Risposte:


21

Solo dal punto di vista delle prestazioni , xcopy o robocopy ti daranno risultati simili. Ho eseguito un paio di test su una scatola SP2 a 64 bit di Windows Vista per fare alcuni confronti. Tutte le copie sono state eseguite tra un disco Sata II da 7200 RPM interno e un'unità USB 2.0 esterna o sulla stessa unità interna stessa dove indicato. Non è stata eseguita alcuna configurazione speciale (decidersi se ciò invalida / convalida il test), solo per immettere il comando in un file batch da eseguire. PowerShell è stato utilizzato per acquisire i tempi di inizio e fine. Dopo un paio di passaggi ecco le medie degli strumenti con cui ho giocato:

File: 732.909.568 byte (698 MB), 1 file ISO copiato in un'altra directory sullo stesso disco interno.

copy      6 secs (ex. copy G:\folder1\* G:\folder2\)
xcopy     6 secs (ex. xcopy G:\folder1 G:\folder2 /I /E /Y /R)
robocopy  6 secs (ex. robocopy G:\folder1\ G:\folder2 /E /NP)
teracopy 28 secs (ex. TeraCopy.exe Copy G:\folder1\ G:\folder2\)
fastcopy 19 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=G:\folder2)  

File: 732.909.568 byte (698 MB), 1 file ISO copiato su disco USB esterno.

copy     36 secs (ex. copy G:\folder1\* I:\folder2\)
xcopy    35 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy 36 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 36 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy 38 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)  

File: 45.039.616byte (42,9 MB) 5 file casuali copiati su disco USB esterno

copy      6 secs (ex. copy G:\folder1\* I:\folder2\)
xcopy     5 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy  6 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 12 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy  6 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)

File / directory: 1.087.180.800 byte (1,01 GB), 27 file / 8 directory copiati su disco USB esterno.

copy     *Not included in test
xcopy    57 secs (ex. xcopy G:\folder1 I:\folder2 /I /E /Y /R)
robocopy 58 secs (ex. robocopy G:\folder1\ I:\folder2 /E /NP)
teracopy 56 secs (ex. TeraCopy.exe Copy G:\folder1\ I:\folder2\)
fastcopy 60 secs (ex. fastcopy.exe /auto_close G:\folder1 /to=I:\folder2)

Questo non è affatto un test esaustivo, ma solo lanciare un rapido scenario del mondo reale su alcuni degli strumenti più popolari in questo genere mostra che il tuo attaccamento abbastanza sicuro con xcopy o Robocopy (solo dal punto di vista delle prestazioni). Anche l'opzione Robocopy /NP(Nessun progresso) ti fa risparmiare 0 tempo. Ciò non significa che non puoi trarre vantaggio dall'uso di qualcosa di diverso da xcopy. Robocopy è un ottimo esempio (da Wikipedia ):

Robocopy è notevole per le funzionalità che vanno oltre i
comandi integrati di copia e xcopy di Windows , tra cui:

  • Capacità di tollerare interruzioni di rete e riprendere a copiare da dove era stata interrotta in precedenza (i file incompleti sono contrassegnati con un timbro della data corrispondente al 1980-01-01 e contengono un record di recupero in modo che Robocopy sappia da dove continuare).
  • Possibilità di copiare correttamente attributi, informazioni sul proprietario, flussi di dati alternativi, informazioni di controllo e timestamp per impostazione predefinita, senza la necessità di numerose opzioni della riga di comando spesso dimenticate.
  • Possibilità di copiare correttamente ACL NTFS (quando fornito / COPYALL fornito) e di far valere il "diritto di backup" di Windows NT (/ B) in modo che un amministratore possa copiare un'intera directory, inclusi i file che non possono essere letti dall'amministratore.
  • Persistenza per impostazione predefinita, con un numero programmabile di tentativi automatici se non è possibile aprire un file.
  • Una modalità "mirror", che mantiene sincronizzati gli alberi eliminando facoltativamente i file dalla destinazione che non sono più presenti nell'origine.
  • Possibilità di copiare un gran numero di file che altrimenti andrebbero in crash l'utilità XCOPY integrata.
  • Un indicatore di avanzamento sulla riga di comando che si aggiorna continuamente.
  • Possibilità di copiare nomi di file e cartelle lunghi che superano i 256 caratteri - fino a un massimo di 32.000 caratteri - senza errori.

5

Di solito uso:

robocopy source dest /E /MIR

o qualche altra variante dei parametri - forse /NFL /NDL /NS /NC /NPper abbinare il "silenzioso"


sì, / NP è un must per i veloci robotici
Ivo Looser,

quando dovessi creare lo stesso identico contenuto della fonte più e più volte avrei usato / MIR o / PURGE dal comando Robocopy.
Ivo Looser,

1

In realtà, eliminando la rete, hai davvero limitato i tuoi test. Potresti prendere in considerazione l'utilizzo di una condivisione di rete, che sarà la maggior parte del lavoro di amministrazione.

Inoltre, è necessario utilizzare FTP e saltare CIFS del tutto. Eseutil.exe è un'altra utility che potresti inserire. (un programma di utilità Exchange che può essere utilizzato altrove, insieme alle sue quattro DLL dipendenti.)

Quindi mi piacerebbe vedere i tuoi risultati.


1

Uso XCopy per lo stesso scopo. Ho anche aggiunto un'altra scheda di rete a quel server e l'ho messa su una sottorete separata. Quindi ho effettuato una connessione diretta al server da cui sto trasferendo i file. In questo modo le 2 macchine spostano i dati copiati tramite una sottorete e gli utenti possono comunque accedere tramite il secondo nic che è collegato direttamente alla LAN.


1

Dici che l'origine e la destinazione sono sulla stessa unità, ma sono entrambi sul server di build?

Se il server di build è la posizione dell'origine e della destinazione, prendere in considerazione l'idea di spostare una cartella o l'altra su un'altra unità, magari su un altro controller.

Se il server di build non è la posizione dell'origine e della destinazione (i drop di build non sono sempre sul server su cui sono basati), prendere in considerazione la creazione di un'attività sul server in cui risiedono le cartelle di origine e destinazione. Quindi avviare l'attività in remoto.


1

Nel corso degli anni ho dovuto fare diverse copie. Abbiamo una macchina Windows Server 2008 R2 che ha una singola directory con oltre 12 milioni di immagini al suo interno (circa 400 GB).

Ovviamente preferirei che non fosse una directory così grande MA:

  • XCOPY gestisce la copia della cartella grande, ma si arresta in modo anomalo quando si tenta di passare dalla directory grande.
  • ROBOCOPY gestisce la copia senza problemi ed è un'esperienza molto più piacevole durante la copia in quanto offre migliori indicatori di progresso.
  • XCOPY su piccole directory è più veloce.

Comunque, ho pensato di condividere la mia esperienza con loro a causa della natura insolita della mia directory davvero grande.

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.