Najszybsza metoda kopiowania plików

15

Jeśli mamy udaną kompilację na naszym serwerze kompilacji (CCNET), wszystkie pliki strony ASP.NET są kopiowane do katalogu wirtualnego (% katalog_wyjściowy%), aby nie-programiści mogli zobaczyć / przetestować najnowszą wersję strony. Na końcu kompilacji wykonywany jest następujący plik nietoperza.

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

Problem polega na tym, że kopiowanie jest powolne i zastanawiałem się, czy w systemie Windows 2008 dostępne są polecenia kopiowania szybsze niż xcopy? Źródło i miejsce docelowe znajdują się na tym samym dysku. Poniżej znajdują się argumenty, których używamy podczas kopiowania.

/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
dmcgiv
źródło

Odpowiedzi:

21

Tylko z punktu widzenia wydajności , XCopy lub robocopy daje podobne wyniki. Przeprowadziłem kilka testów na 64-bitowym pudełku z dodatkiem SP2 dla Windows Vista, aby dokonać porównań. Wszystkie kopie zostały wykonane między wewnętrznym dyskiem Sata II o prędkości 7200 obr./min a zewnętrznym napędem USB 2.0 lub na tym samym dysku wewnętrznym, jeśli jest to wskazane. Nie przeprowadzono specjalnej konfiguracji (zdecyduj, czy to unieważnia / zatwierdza test), tylko po to, aby wprowadzić polecenie do pliku wsadowego w celu wykonania. Do przechwytywania czasu rozpoczęcia i zakończenia użyto programu PowerShell. Po kilku przejściach tutaj są średnie z narzędzi, którymi grałem:

Plik: 732,909,568 bajtów (698 MB), 1 plik ISO skopiowany do innego katalogu na tym samym dysku wewnętrznym.

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)  

Plik: 732,909,568 bajtów (698 MB), 1 plik ISO skopiowany na zewnętrzny dysk USB.

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)  

Pliki: 45 033 616 bajtów (42,9 MB) 5 losowych plików skopiowanych na zewnętrzny dysk USB

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)

Pliki / directoies: 1087 180 800 bajtów (1,01 GB), 27 plików / 8 katalogów skopiowanych na zewnętrzny dysk USB.

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)

Nie jest to bynajmniej wyczerpujący test, ale samo rzucenie szybkiego scenariusza w świecie rzeczywistym na niektóre z bardziej popularnych narzędzi tego gatunku pokazuje, że całkiem bezpieczne trzymanie się Xcopy lub Robocopy (tylko z punktu widzenia wydajności). Również opcja Robocopy /NP(bez postępu) oszczędza Ci 0 czasu. Nie oznacza to jednak, że nie możesz czerpać korzyści z używania czegoś innego niż xcopy. Robocopy jest doskonałym przykładem (z Wikipedii ):

Robocopy jest godne uwagi ze względu na możliwości wykraczające poza wbudowane
polecenia kopiowania i xcopy systemu Windows , w tym:

  • Zdolność do tolerowania awarii sieci i wznawiania kopiowania tam, gdzie poprzednio zostało przerwane (niekompletne pliki są oznaczone datownikiem odpowiadającym 1980-01-01 i zawierają zapis odzyskiwania, dzięki czemu Robocopy wie, gdzie kontynuować).
  • Możliwość domyślnego prawidłowego kopiowania atrybutów, informacji o właścicielu, alternatywnych strumieniach danych, informacji kontrolnych i znaczników czasu, bez potrzeby stosowania wielu często zapomnianych przełączników wiersza polecenia.
  • Zdolność do prawidłowego kopiowania list ACL NTFS (jeśli podano / COPYALL) oraz do zapewnienia „prawa do tworzenia kopii zapasowych” w systemie Windows NT (/ B), aby administrator mógł skopiować cały katalog, w tym pliki, których nie można odczytać administratorowi.
  • Trwałość domyślnie, z programowalną liczbą automatycznych ponownych prób, jeśli pliku nie można otworzyć.
  • Tryb „lustrzany”, który utrzymuje synchronizację drzew poprzez opcjonalne usuwanie plików z miejsca docelowego, które nie są już obecne w źródle.
  • Możliwość kopiowania dużej liczby plików, które w przeciwnym razie spowodowałyby awarię wbudowanego narzędzia XCOPY.
  • Wskaźnik postępu w wierszu poleceń, który jest stale aktualizowany.
  • Możliwość kopiowania długich nazw plików i folderów przekraczających 256 znaków - do teoretycznej 32 000 znaków - bez błędów.
Shaun Hess
źródło
5

Zazwyczaj używam:

robocopy source dest /E /MIR

lub inny wariant parametrów - być może /NFL /NDL /NS /NC /NPpasujący do „cichego”

Marc Gravell
źródło
tak, / NP jest koniecznością dla szybkich robocopii
Ivo Looser
kiedy będziesz tworzyć tę samą treść, co w źródle w kółko, używałbym / MIR lub / PURGE z komendy Robocopy.
Ivo Looser
1

W rzeczywistości, eliminując sieć, naprawdę ograniczyłeś swoje testy. Możesz rozważyć użycie udziału sieciowego, który będzie wymagał dużej ilości pracy administracyjnej.

Ponadto powinieneś użyć FTP i całkowicie pominąć CIFS. Eseutil.exe to kolejne narzędzie, które możesz tam wrzucić. (narzędzie Exchange, którego można użyć w innym miejscu, wraz z jego czterema zależnymi bibliotekami DLL).

Potem chciałbym zobaczyć twoje wyniki.

Len
źródło
1

Używam XCopy do tego samego celu. Dodałem także inną kartę sieciową do tego serwera i umieściłem ją w osobnej podsieci. Następnie nawiązałem bezpośrednie połączenie z serwerem, z którego przesyłam pliki. W ten sposób 2 maszyny przenoszą skopiowane dane przez jedną podsieć, a użytkownicy mogą nadal uzyskiwać dostęp za pośrednictwem drugiej nici, która jest podłączona bezpośrednio do sieci LAN.

Saif Khan
źródło
1

Mówisz, że źródło i miejsce docelowe znajdują się na tym samym dysku, ale czy oba są na serwerze kompilacji?

Jeśli serwer kompilacji to lokalizacja źródła i miejsca docelowego, rozważ przeniesienie jednego folderu lub drugiego na inny dysk, być może na inny kontroler.

Jeśli serwer kompilacji nie jest lokalizacją źródła i miejsca docelowego (zrzuty kompilacji nie zawsze są na serwerze, na którym są wbudowane), rozważ utworzenie zadania na serwerze, na którym znajdują się foldery źródłowy i docelowy. Następnie zdalnie rozpocznij to zadanie.

Donald Byrd
źródło
1

Przez lata musiałem zrobić kilka kopii. Mamy jeden komputer z systemem Windows Server 2008 R2, który ma jeden katalog z ponad 12 milionami obrazów (około 400 GB).

Oczywiście wolałbym, żeby to nie był tak duży katalog ALE:

  • XCOPY obsługuje kopię dużego folderu, ale zawiesza się podczas próby przejścia z dużego katalogu.
  • ROBOCOPY radzi sobie z kopią bez problemów i jest o wiele ładniejszym doświadczeniem podczas kopiowania, ponieważ oferuje lepsze wskaźniki postępu.
  • XCOPY w małych katalogach jest szybszy.

W każdym razie pomyślałem, że podzielę się z nimi swoimi doświadczeniami z powodu niezwykłej natury mojego naprawdę dużego katalogu.

Will Zablocki
źródło