Найшвидший спосіб копіювання файлів


15

Якщо у нас є успішна збірка на нашому сервері збірки (CCNET), всі файли веб-сайтів ASP.NET копіюються у віртуальний каталог (% output_dir%), щоб не розробники могли бачити / перевіряти останню версію веб-сайту. В кінці збірки виконується наступний файл bat.

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

Проблема полягає в тому, що я вважаю, що копіювання повільне, і мені було цікаво, чи є в Windows 2008 доступні команди копіювання, які швидші, ніж xcopy? Джерело та місце призначення на одному приводі. Нижче наведені аргументи, які ми використовуємо при копіюванні.

/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

Відповіді:


21

З точки зору продуктивності , xcopy або robocopy дадуть вам аналогічні результати. Я пройшов кілька тестів на 64-розрядному SP2 для Windows Vista, щоб порівняти. Усі копії виконані між внутрішнім диском 7200 RPM Sata II та зовнішнім накопичувачем USB 2.0 або на тому самому внутрішньому диску, де зазначено. Ніяких спеціальних налаштувань не робилося (майте на увазі, якщо це скасовує / підтверджує тест), лише для введення команди у пакетний файл для виконання. PowerShell використовувався для зйомки часу початку та зупинки. Після пари пропусків ось середні знаряддя інструментів, з якими я грав:

Файл: 732,909,568 байт (698 МБ), 1 ISO-файл, скопійований у різний каталог на одному внутрішньому диску.

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)  

Файл: 732,909,568 байт (698 МБ), 1 ISO-файл, скопійований на зовнішній диск 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)  

Файли: 45,039,616 байт (42,9 МБ) 5 випадкових файлів скопійовано на зовнішній 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)

Файли / каталоги: 1,087,180,800 байт (1,01 ГБ), 27 файлів / 8 каталогів, скопійованих на зовнішній диск 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)

Це аж ніяк не вичерпне випробування, але просто викидання швидкого сценарію реального світу на деякі з найпопулярніших інструментів у цьому жанрі показує, що ваша досить безпечна дотримання або xcopy, або роботокопії (лише з точки зору продуктивності). Також опція Robocopy /NP(Без прогресу) економить 0 разів. Це не означає, що ви не можете отримати користь від використання іншого, ніж xcopy. Робокопія - прекрасний приклад (з Вікіпедії ):

Робокопія примітна можливостями вище та поза вбудованими
командами Windows copy and xcopy, включаючи наступне:

  • Можливість переносити відключення мережі та відновити копіювання там, де вона раніше припинена (неповні файли відмічаються штампом дати, що відповідає 1980-01-01, і містять запис відновлення, тому Robocopy знає, з чого продовжувати).
  • Можливість правильно копіювати атрибути, інформацію про власника, альтернативні потоки даних, інформацію про аудит та часові позначки за замовчуванням, без необхідності численних часто забутих комутаторів командного рядка.
  • Можливість правильно копіювати ACL-файли NTFS (коли / надається COPYALL), а також стверджувати "право резервного копіювання" (/ B) для Windows NT, щоб адміністратор міг скопіювати цілий каталог, включаючи файли, яким відмовлено читати адміністратору.
  • Зберігання за замовчуванням, з програмованою кількістю автоматичних повторних спроб, якщо файл неможливо відкрити.
  • "Дзеркальний" режим, який зберігає дерева в синхронізації, необов'язково видаляючи файли з пункту призначення, які більше не містяться в джерелі.
  • Можливість копіювання великої кількості файлів, які в іншому випадку призведуть до збою вбудованої утиліти XCOPY.
  • Індикатор виконання в командному рядку, який постійно оновлюється.
  • Можливість копіювання довгих імен файлів і папок, що перевищують 256 символів - до теоретичних 32 000 символів - без помилок.

5

Я зазвичай використовую:

robocopy source dest /E /MIR

або якийсь інший варіант параметрів - можливо, /NFL /NDL /NS /NC /NPщоб відповідати "тихому"


так, / NP є обов'язковим для швидких робочих копій
Іво

коли ви повинні створити такий самий вміст, що і в джерелі, знову і знову я використовую / MIR або / PURGE з команди Robocopy.
Іво Лузер

1

Власне, усунувши мережу, ви дійсно обмежили тестування. Ви можете подумати про використання спільної мережі, яка буде основною роботою адміністратора.

Крім того, ви повинні використовувати FTP і взагалі пропустити CIFS. Eseutil.exe - це ще одна утиліта, яку ви можете кинути туди. (Утиліта Exchange, яку можна використовувати в іншому місці, а також чотири залежні dll.)

Тоді я хотів би побачити ваші результати.


1

Я використовую XCopy з тією ж метою. Те, що я також зробив, додав ще один NIC до цього сервера і розмістив його в окремій підмережі. Потім зробив пряме з'єднання з сервером, з якого я передаю файли. Таким чином, дві машини переміщують скопійовані дані через одну підмережу, і користувачі все ще можуть отримати доступ через другу ніку, яка підключена безпосередньо до локальної мережі.


1

Ви кажете, що джерело та пункт призначення на одному диску, але вони обидва на сервері збірки?

Якщо сервер збірки є місцезнаходженням джерела та пункту призначення, розгляньте можливість переміщення однієї папки або іншої на інший диск, можливо, на інший контролер.

Якщо сервер збірки не є місцем розташування джерела та пункту призначення (краплі збирання не завжди є на сервері, на якому вони вбудовані), розгляньте можливість створення завдання на сервері, де розташовані папки джерела та призначення. Тоді просто віддалено розпочніть це завдання.


1

Мені довелося робити кілька примірників за ці роки. У нас є одна машина Windows Server 2008 R2, яка має єдиний каталог із понад 12М зображеннями (приблизно 400 Гб).

Очевидно, я вважаю за краще, щоб це був не такий великий каталог, АЛЕ:

  • XCOPY обробляє копію великої папки, але виходить з ладу при спробі перейти з великого каталогу.
  • ROBOCOPY обробляє копію без проблем, і це набагато приємніше враження від копіювання, оскільки вона пропонує кращі показники прогресу.
  • XCOPY в невеликих каталогах відбувається швидше.

У всякому разі, я просто думав, що поділюсь із ними своїм досвідом через незвичність мого дійсно великого каталогу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.