Назад | Перейти на главную страницу

Самый быстрый способ копирования файлов

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

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

Только с точки зрения производительности, xcopy или Робокопия даст вам аналогичные результаты. Я провел несколько тестов на 64-битной Windows Vista с пакетом обновления 2 (SP2), чтобы провести некоторые сравнения. Все копии были выполнены между внутренним диском Sata II со скоростью вращения 7200 об / мин и внешним диском 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 (только с точки зрения производительности). Также вариант Robocopy /NP (Нет прогресса) сэкономит вам 0 времени. Однако это не означает, что вы не можете получить выгоду от использования чего-то другого, кроме xcopy. Robocopy - отличный пример (от Википедия):

Robocopy отличается возможностями, выходящими за рамки встроенной копии Windows и
команды xcopy, включая следующие:

  • Возможность выдерживать перебои в работе сети и возобновлять копирование с того места, где оно было ранее остановлено (неполные файлы помечаются меткой даты, соответствующей 01.01.1980, и содержат запись восстановления, чтобы Robocopy знал, с чего продолжить).
  • Возможность правильно копировать атрибуты, информацию о владельце, альтернативные потоки данных, информацию аудита и временные метки по умолчанию без необходимости использования множества часто забытых параметров командной строки.
  • Возможность правильно копировать списки ACL NTFS (когда / COPYALL предоставлен) и утверждать «право на резервное копирование» Windows NT (/ B), чтобы администратор мог копировать весь каталог, включая файлы, недоступные для чтения администратору.
  • Сохранение по умолчанию с программируемым числом автоматических повторных попыток, если файл не может быть открыт.
  • «Зеркальный» режим, который поддерживает синхронизацию деревьев, при необходимости удаляя файлы из места назначения, которых больше нет в источнике.
  • Возможность копирования большого количества файлов, что в противном случае привело бы к сбою встроенной утилиты XCOPY.
  • Индикатор выполнения в командной строке, который постоянно обновляется.
  • Возможность копировать длинные имена файлов и папок, превышающие 256 символов - до теоретических 32 000 символов - без ошибок.

Обычно я использую:

robocopy source dest /E /MIR

или какой-то другой вариант параметров - возможно /NFL /NDL /NS /NC /NP чтобы соответствовать "тихому"

Фактически, исключив Сеть, вы действительно ограничили свое тестирование. Возможно, вы захотите рассмотреть возможность использования общего сетевого ресурса, что является большой частью работы администратора.

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

Тогда я бы хотел увидеть ваши результаты.

Я использую XCopy для той же цели. Я также добавил к этому серверу еще одну сетевую карту и поместил ее в отдельную подсеть. Затем установил прямое соединение с сервером, с которого я передаю файлы. Таким образом, 2 машины перемещают скопированные данные через одну подсеть, и пользователи по-прежнему могут получить доступ через второй ник, который подключен непосредственно к локальной сети.

Вы говорите, что источник и место назначения находятся на одном диске, но находятся ли они на сервере сборки?

Если сервер сборки является местом расположения источника и назначения, подумайте о перемещении одной или другой папки на другой диск, возможно, на другой контроллер.

Если сервер сборки не является местом расположения источника и назначения (отбросы сборки не всегда находятся на сервере, на котором они построены), рассмотрите возможность создания задачи на сервере, где находятся исходная и конечная папки. Тогда просто начните эту задачу удаленно.

За эти годы мне пришлось сделать несколько копий. У нас есть одна машина с Windows Server 2008 R2 с одним каталогом с более чем 12 мегабайтами изображений внутри (примерно 400 ГБ).

Очевидно, я бы предпочел не такой большой каталог, НО:

  • XCOPY обрабатывает копию большой папки, но дает сбой при попытке перейти из большого каталога.
  • ROBOCOPY обрабатывает копию без проблем и дает гораздо больше удовольствия при копировании, так как предлагает лучшие индикаторы выполнения.
  • XCOPY для небольших каталогов работает быстрее.

В любом случае, я просто подумал, что поделюсь с ними своим опытом из-за необычной природы моего действительно большого каталога.