Многопоточное копирование файлов по сети

Обновлено: 30.06.2024

Когда вам нужно скопировать файлы на другой диск, вы обычно также используете обычный процесс выбора, копирования и вставки. Хотя этот процесс работает отлично, скорость становится узким местом, когда попытка передачи большого количества файлов может занять очень много времени. В этой статье мы поговорим о том, как использовать многопоточность Robocopy в Windows 10. Начнем!

Что ж, в качестве альтернативы многие технически подкованные пользователи используют Robocopy (надежное копирование файлов). Это инструмент командной строки, встроенный в Windows 10, который предоставляет больше возможностей для более быстрого перемещения данных в другое место.

Одна особенность, которая делает Robocopy таким особенным (и в основном упускаемым из виду), - это многопоточная функция, которая дает вам разрешение на одновременное копирование нескольких файлов. Вместо одного файла за раз с помощью функции копирования, встроенной в проводник.

В этом руководстве вы, ребята, научитесь использовать функцию многопоточного копирования в Robocopy. Чтобы ускорить процесс передачи файлов и папок на другой диск в Windows 10.

Как использовать многопоточность Robocopy в Windows 10

Если вы собираетесь скопировать большой набор файлов и папок на другой диск, вам нужно использовать эти шаги для многопоточной функции Robocopy для сверхбыстрого копирования данных.

Робокопия C: источник папка путь D: место назначения папка путь / S / E / Z / ZB / R: 5 / W: 5 / TBD / NP / V / MT: 32

Робокопия C: Users admin Documents D: Users admin Documents / S / E / Z / ZB / R: 5 / W: 5 / TBD / NP / V / MT: 32

Что ж, в приведенной выше команде убедитесь, что вы изменили пути источника и назначения с вашей конфигурацией.

Разбор команд Robocopy - многопоточность Robocopy

Robocopy на самом деле имеет множество функций и в команде, показанной в этом руководстве. Мы используем следующие переключатели, чтобы сделать копирование надежным и быстрым.

  • / S - Копируйте подкаталоги, но не пустые.
  • / E - Скопируйте подкаталоги, в которых также есть пустые.
  • / Z - Фактически копируйте файлы в перезапускаемом режиме.
  • / ZB - Использует перезапускаемый режим, если в доступе отказано, используйте режим резервного копирования.
  • / R: 5 - Фактически повторите попытку 5 раз (вы также можете указать другое число, фактически по умолчанию 1 миллион).
  • / Вт: 5 - Подождите 5 секунд, прежде чем повторить попытку (вы также можете указать другое число, по умолчанию 30 секунд).
  • / TBD - Подождите, пока не будут определены имена общих ресурсов (ошибка повтора 67).
  • / NP - Нет прогресса - не отображать процент скопированных.
  • / V - Создавать подробный вывод, показывая также пропущенные файлы.
  • / MT: 32 - Делайте многопоточные копии вместе с n потоками (по умолчанию 8).

Далее | Многопоточный Robocopy

Что ж, самый важный переключатель, позволяющий сосредоточиться на приведенной выше команде, - это / Т. Это переключатель, который включает Robocopy для копирования файлов в многопоточном режиме. Если вы не укажете номер рядом с / Т переключатель, тогда номер по умолчанию будет8. По сути, это означает, что Robocopy также попытается скопировать восемь файлов одновременно. Но Robocopy поддерживает 1 к128 потоки.

В этой команде мы используем 32однако вы можете установить более высокое значение. Единственное предостережение: чем больше число, тем больше будет использовано системных ресурсов и пропускной способности. Если у вас очень старый процессор, использование большого числа будет влиять на производительность, поэтому обязательно проверьте перед выполнением команды вместе с большим количеством потоков.

Когда вы, ребята, выполнили эти шаги, вы заметите, что копирование файлов и папок теперь займет значительно меньше времени.

Вы не ограничены копированием файлов и папок на внешний или внутренний диск, это также работает для переноса файлов по сети.

Заключение

Хорошо, это все, ребята! Я надеюсь, что вам понравилась эта статья о Robocopy Multithreaded, и она также окажется для вас полезной. Поделитесь с нами своим мнением. Также, если у вас есть дополнительные вопросы и проблемы, связанные с этой статьей. Тогда дайте нам знать в разделе комментариев ниже. Мы скоро к тебе вернемся.

И так к делу. Все буду проделывать на Windows 7 но действия совместимы на 100% и с такими операционными системами акак 2003, Vista, 8, 2008R2 (Только под Windows 2003 нужно установить Resource Kit Tools).

Архивация и Восстановление

1. Заходим в панель управления и находим там Архивация и Восстановление, запускаем и видим следующие

image

Выбираем в левом углу «Создать образ системы» после чего видим следующие

image

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

image

Нажимаем кнопку «Архивировать» после того как образ создаться, создаем диск восстановления системы

image

Таким способом довольно простым сделали backup системы и всех установленных программ с их настройками на системном диске. После чего в будующем можно спокойно вставить загрузочный диск который мы создали и восстановить систему. Также вы можете настроить систему архивации, на автоматический режим на свое усмотрение. Далее я расскажу как делать backup информации на других дисках и отдельных папок с помощью стандартной утилиты которая входит в поставку приведенных в посте операционных систем, которая называется robocopy .

Robocopy.exe — Многопоточное копирование

Robocopy разработана для отказоустойчивого копирования каталогов и деревьев каталогов. Она обладает возможностью копирования всех (или выборочных) NTFS атрибутов и свойств, имеет дополнительный код для перезапуска при применении с сетевым соединением в случае его разрывов.

Итак, к делу. Cоздаем текстовый файл и пишем в нем следующие:

Что происходит а происходит вот что мы копируем зеркально файлы и каталоги с диска D из папки MyProject на диск E в папку Backup\MyProject которая находиться на внешнем USB диске. Файлы копируются те которые были изменены не происходит постоянная перезапись файлов. Также получаем Log файл где описано подробно что было скопировано а что нет и какие были ошибки.

Сохраняем файл и переименовываем его в любое понятное для вас название но заместо расширения .txt ставим .bat либо .cmd кому как угодно.

Далее идем в панель управления — администрирование — запускаем планировщик задач и создаем новую задачу даем ей имя, устанавливаем в триггерах время интервал запуска задачи в действиях указываем запуск нашего файла хххххх.bat или хххххх.cmd Теперь у нас происходит автоматический backup данных по нашему расписанию. Спим спокойно и не переживаем.

P.S Возможно многим покажется данная статья баяном, но я так не считаю данный метод меня уже не раз спасал от утери информации и восстановления системы. Да и людям другим помогало кто спрашивал у меня совета как это сделать. Написал данную статью дабы также объективно иметь возможность комментирование посты других участников и писать новые статьи по возможности которые будут помогать людям.

Копирование файлов – процесс необходимый абсолютно всем пользователям компьютеров. На первый взгляд, это простое дело, скопировать файл, однако если идет речь о больших объемах, то стандартные решения Microsoft не совсем удобны. Но никто не задумывается о том, что есть другие программы сторонних разработчиков, которые справляются с копированием намного лучше, чем стандартный софт Windows .

После этих слов, естественно, вам захочется заполучить новый файловый менеджер, что бы копировать большие файлы (например, фильмы) с большей скоростью, чем раньше. Однако об этом позаботилась компания Microsoft . У них уже давно есть программа RichCopy, которая поражает своей скоростью копирования. Эта программа существует уже давно, просто Microsoft не анонсировала её, т.е. нужно было внести некоторые корректировки. Теперь RichCopy доступен всем!

Долгое время программа RichCopy использовалась только внутри самой компании Microsoft . Это был хороший инструмент для копирования файлов, однако теперь программа стала доступна всем пользователям Windows . Этот бесплатный софт разработан для того, чтобы помочь вам ускорить процесс копирования файлов, как на локальном компьютере, так и при переносе файлов с удаленного сервера. Но на этом преимущества софта не заканчиваются, есть ещё ряд функции, благодаря которым программу нельзя сравнивать с конкурентами.

Главное окно программы не большое, но с помощью нескольких кнопок вы можете настроить все, что вам необходимо. Там вы увидите настройки программы, окно источника копирования и окно с папкой, в которую вы копируете свои файлы. Также там есть кнопки старта процесса и отмены, вы можете вставить/вырезать/скопировать текст и сбросить данные журнала – все это панель дополнительных кнопок.

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

Ещё один значительный плюс программы RichCopy в том, что вы можете создать задания и выполнять их по времени, либо выставить приоритет по некоторым атрибутам (безопасность, размер файлов, формат).

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

Вы можете настроить размер файлов кеша для копирования и поиска. Лимит для копирования – 4 mb , а для поиска – 10 gb . При наших тестах этих лимитов оказалось достаточно, они даже преувеличены, и RichCopy не грузила систему.

RichCopy должен использовать каждый пользователь Windows , при использовании вы сами поймете почему. А продвинутые пользователи найдут для себя много других интересных и полезных функции, которые не описаны в статье.

date

25.11.2020

directory

Windows 10, Утилиты

comments

комментариев 8

Robocopy – это консольная утилита Windows для копирования файлов, которую можно использовать для синхронизации/репликации файлов и каталогов, и в сценариях резервного копирования. Robocopy (Robust File Copy) доступна начиная с Windows NT 4.0 Resource Kit, но по умолчанию эта функция появилась только в Windows Vista и Windows Server 2008. Robocopy заменяет Xcopy и copy, как более функциональная.

Основные возможности Robocopy

Кроме обычного копирования файлов и папок из папки источника в каталог назначения, в Robocopy есть множество очень полезных функций:

  • Устойчивость к обрывам сети (robocopy может продолжить копирования после восстановления сетевого доступа);
  • Корректное копирование файлов с их атрибутами и NTFS правами доступа;
  • Копирование с сохранением исходной временной метки;
  • Возможность копирования файлов и директорий, запрещенных для доступа даже администратору, с помощью ключа /B (ключ позволяет игнорировать проверку прав доступа, ключ доступен только для участников группы Администраторы или Операторы архива);
  • Возможность задать количество попыток копирования файла, если файл недоступен;
  • Режим полного зеркалирования директорий;
  • Пропуск уже существующих файлов (с одинаковым размером или временной меткой timestamp);
  • Индикатор прогресса копирования;
  • Корректная работа с длинными путями (более 260 символов);
  • Эффективные алгоритмы и многопоточность позволяют выполнять копирование файлов намного быстрее, чем обычное копирование средствами Windows;

Официальной графической версии robocopy (c GUI) от Microsoft нет. Существуют пользовательские версии, но их поддержка прекращена. Список неофициальных GUI для robocopy (это сторонние программы):

Синтаксис и параметры robocopy

Синтаксис robocopy состоит из двух обязательных параметров (исходный и целевой каталог) и двух необязательных (фильтр файлов и параметры):

robocopy <source> <dest> [фильтр файлов] [параметры]

Поддерживаются как локальные пути, так и UNC, например, \\server\directory

Полный синтаксис утилиты robocopy (все параметры и их описания) доступны по команде:

использование утилиты robocopy в windows для копирование и синхронизации файлов и каталогов

Исполняемы файл robocopy.exe находится в каталоге C:\Windows\System32.

Поскольку ключей в robocopy много, мы будем рассматривать их на практике, в готовых командах. Мы не будем рассматривать самые простые примеры использования robocopy, т.к. обычно они не вызывают вопросов. Ниже представлены готовые к применению более сложные команды robocopy, которые можно использовать в реальных сценариях.

Для тестирование различных команд robocopy без выполнения операций (копирования, перемещения или удаления) с файлами используется параметр /L . Данный параметр вернет список файлов и папок, которые будут скопированы вашей командой.

Использование robocopy для зеркалирования каталогов

Вы можете зеркалировать (синхронизировать) содержимое двух каталог с помощью следующей команды robocopy (под зеркалированием понимается копирование файлов из целевой папки с удалением файлов в целевом каталоге, если они удалены в источнике).

robocopy \\testnode1\C$\source\ \\testnode2\c$\dest\ *.txt /MIR /COPYALL /Z /B /J /R:3 /W:1 /REG /TEE /LOG+:%appdata%\robocopy.log

Обратите внимание на ключ /Z даже если вы копируете небольшие файлы по устойчивому каналу. Он не несёт дополнительных расходов при использовании, но в случае обрыва, вы сможете продолжить копирование просто повторно запустив скрипт.

При копировании больших файлов (более 2 Гб) с некоторых iSCSI/SAN томов, процесс robocopy может существенно использовать оперативную память сервера. Проблем обычно связано с тем, что для данного LUN в настройках RAID используется write-through кэширование вместо write-back.

Инкрементальное копирование с помощью robocopy

Сам по себе robocopy не может полностью обеспечить инкрементальное резервное копирование каталога (копирование новых и измененных файлов), для этого мы будем использовать небольшой bat скрипт:

Заметка. Если файловые системы source или dest не являются NTFS, используйте ключ /FFT , так как на других файловых системах (включая эмулированные NTFS) может возникнуть ошибка, из-за которой robocopy будет видеть старые файлы как измененные, из-за отличий в метке времени.

Robocopy: перемещение файлов

С помощью ключа /mov или /move вы можете переместить файлы (а точнее удалить успешно скопированные файлы из исходной директории):

robocopy C:\source\ F:\dest\ /MOVE /E /COPYALL /Z /B /J /R:3 /W:1 /REG /TEE /LOG+:%appdata%\robocopy.log

  • /MOVE – удалить файлы и директории из исходной папки, после того как они были скопированы. Имейте в виду, что этот ключ нужно использовать вместе с /E или /S, в противном случае вы перенесете только файлы, но не директории. Если вы хотите перенести только файлы, используйте ключ /MOV
Примечание. Поведение robocopy при использовании ключей /MOVE и /MOV не интуитивно.
  • Если вы используете ключ /MOVE с ключом /E, то вы перенесете все файлы, директории (включая файлы внутри них) и пустые директории. Файлы и директории удалятся из исходной папки. /MOVE с /S даст такой же результат, но пустые директории не перенесутся и будут удалены.
  • Если вы используете ключ /MOV с ключом /E, то вы перенесете все файлы, включая те, которые находятся в директориях и поддиректориях, также скопируются все директории (включая пустые), но они не будут удалены из исходного каталога, в отличие от файлов. Используя /MOV с /S, вы получите такой же результат, но пустые директории не будут скопированы.

Пример использование robocopy в планировщике задач

Для примера возьмём задачу: нам необходимо с помощью robocopy регулярно синхронизировать содержимое сетевой папки между двумя серверами с ведением логов.

Запустите командную строку с правами администратора и введите: compmgmt.msc

Перейдите в System Tools -> Task Scheduler Library. Создайте новое задание планировщика (Create task).

создать задание планировшика robocopy

Укажите имя задания, и выберите пользователя из-под которого будет выполняться задание. Пользователь должен иметь доступ на чтению и запись в обоих каталогах (при копировании по сети между серверами домена можно использовать аккаунт System, в этом случае нужно предоставить на целевой каталог права RW для объекта computer сервера-источника) .

Выберите опцию Run whether user is logged on or not, для того чтобы задание выполнялось в фоновом режиме. Также отметьте Run with highest privileges. Эта опция сработает если аккаунт из-под которого выполняется задание, будет иметь права администратора.

задание зеркалирования robocopy

Перейдите на вкладку Triggers и создайте новый триггер.

Выберите параметр On a schedule (по расписанию), выберите время начала и отметьте Repeat task every, указав интервал выполнения. В моём случае это 5 минут – каждые 5 минут, начиная с часа дня 22 апреля (обязательно измените эту дату на ту, которая нужна вам), директории будут синхронизированы. В for a duration of поставьте Indefinitely (бесконечно)

расписание запуска

Перейдите во вкладку Actions и нажмите New…

Выберите Start a program, и укажите путь к .bat скрипту.

Содержание robocopy-mirror.bat:

Помимо журнала выполнения задания планировщика, robocopy будет писать собственный лог файл копирования в C:\robocopy.log. Если аккаунт из-под которого будет выполняться скрипт не имеет прав администратора, смените C:\robocopy.log на нужный вам путь.

запуск команды robocopy через планировшик

Остальные настройки заполнять не надо. После нажатия на кнопку ОК, вас попросит ввести пароль от учетной записи, которую вы выбрали для запуска задания.

события запуска задания планировщика

Если вы всё настроили правильно, директории должны начать синхронизироваться.

Если у вас возникли проблемы с выполнением скрипта, то обязательно проверьте вкладку History вашей задачи

журнал запуска планировщика robocopy

Отслеживание изменений в каталогах с помощью robocopy

В robocopy есть встроенный механизм отслеживания изменений в исходном каталоге (и их последующего копирования) и встроенный планировщик – параметры /mon и /mot .

  • /mon:N – проверяет исходную директорию на предмет изменений каждую 1 минуту, и если изменений в директории больше чем N, то будет произведено копирование в целевую директорию. Если задан параметр /mot:Y, то изменения будут проверяться каждые Y минут.
  • /mot:N – проверяет исходную директорию на предмет изменений каждые N минут. Минимальное значение N = 1, в минутах. Если параметр /mon не задан, то будет считаться что /mon:1

.bat скрипт для зеркалирования с отслеживанием изменений с интервалом в 1 минуту. Этот скрипт нужно запускать из-под аккаунта с правами администратора.

Плюсы:

  • Не нужно создавать задание в планировщике задач
  • Подходит для непостоянного выполнения. Например, в течение нескольких часов, в таком случае запустить скрипт руками через CMD проще, чем создавать задание в планировщике

Минусы:

  • Чтобы запустить .bat скрипт в фоновом режиме, нужно либо использовать VBS скрипт, либо стороннее ПО, например, NirCmd.
  • Минимальный интервал поиска изменений и копирования – 1 минута. Для меньшего интервала нужно использовать PowerShell или bat скрипт.

Коды возврата (ошибки) robocopy

Ниже приведены стандартные коды возврата robocopy, которые можно использовать для обработки различных ошибок, которые возвращает утилита после выполнения действия копирования (кот возврата эта битовая маска).

HexDecimalMeaning if set
0x000No errors occurred, and no copying was done. The source and destination directory trees are completely synchronized.
0x011One or more files were copied successfully (that is, new files have arrived).
0x022Some Extra files or directories were detected. No files were copied Examine the output log for details.
0x044Some Mismatched files or directories were detected. Examine the output log. Housekeeping might be required.
0x088Some files or directories could not be copied (copy errors occurred and the retry limit was exceeded). Check these errors further.
0x1016Serious error. Robocopy did not copy any files. Either a usage error or an error due to insufficient access privileges on the source or destination directories.
Коды возврата могут комбинироваться:
0x033(2+1) Some files were copied. Additional files were present. No failure was encountered.
0x055(4+1) Some files were copied. Some files were mismatched. No failure was encountered.
0x066(4+2) Additional files and mismatched files exist. No files were copied and no failures were encountered. This means that the files already exist in the destination directory
0x077(4+1+2) Files were copied, a file mismatch was present, and additional files were present.

Любое значение больше 7 говорит о том, что при копировании через robocopy возникла ошибка. Вы можете обрабатывать эти ошибки в bat файле:

if %ERRORLEVEL% EQU 16 echo ***FATAL ERROR*** & goto end
if %ERRORLEVEL% EQU 15 echo OKCOPY + FAIL + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 14 echo FAIL + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 13 echo OKCOPY + FAIL + MISMATCHES & goto end
if %ERRORLEVEL% EQU 12 echo FAIL + MISMATCHES& goto end
if %ERRORLEVEL% EQU 11 echo OKCOPY + FAIL + XTRA & goto end
if %ERRORLEVEL% EQU 10 echo FAIL + XTRA & goto end
if %ERRORLEVEL% EQU 9 echo OKCOPY + FAIL & goto end
if %ERRORLEVEL% EQU 8 echo FAIL & goto end
if %ERRORLEVEL% EQU 7 echo OKCOPY + MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 6 echo MISMATCHES + XTRA & goto end
if %ERRORLEVEL% EQU 5 echo OKCOPY + MISMATCHES & goto end
if %ERRORLEVEL% EQU 4 echo MISMATCHES & goto end
if %ERRORLEVEL% EQU 3 echo OKCOPY + XTRA & goto end
if %ERRORLEVEL% EQU 2 echo XTRA & goto end
if %ERRORLEVEL% EQU 1 echo OKCOPY & goto end
if %ERRORLEVEL% EQU 0 echo No Change & goto end
:end

Утилита robocopy имеет огромный функционал и позволяет гибко настроить операции копирования. Как альтернативу robocopy в PowerShell можно использовать командлет Copy-Item, который хоть и менее функционален, но работает с объектной моделью PowerShell, что может быть важно, если вы часто используете PowerShell или используете цепочки автоматизации с другими языками программирования.

Быстрое копирование файлов с сервера на сервер в фоновом режиме. Rsync и scp.

Для быстрого копирования файлов напрямую с одного сервера на другой существуют множество утилит. Рассмотрим самые популярные из них.

Статья не для опытных администраторов. А для программистов и начинающих администраторов, которые сталкиваются с задачами по администрированию.

Для быстрого копирования файлов напрямую с одного сервера на другой существуют множество утилит. Рассмотрим самые популярные из них.

Статья не для опытных администраторов. А для программистов и начинающих администраторов, которые сталкиваются с задачами по администрированию.

Сразу покажу финальную команду, которую я использую для быстрого копированя большого числа файлов:

Ну а ниже, ее модификации.

1) Простое копирование файлов с сервера на сервер

Эта команда копирует файлы с одного сервера на другой, в ответ на эту команду вы получите предложение указать пароль для пользователя root

В интерактивном режиме будет предложено ввести пароль для пользователя user

Rsync

1) На оба сервера устанавливаем rsync

Эта команда копирует файлы с одного сервера на другой, в ответ на эту команду вы получите предложение указать пароль для пользователя root

В интерактивном режиме будет предложено ввести пароль для пользователя user

2) Ускоряем скорость копирования

Для обычных ситуаций эти команды вам подойдут. Но вот для ситуаций когда необходимо скопировать несколько сотен гигабайт данных, да еще возможно множества мелких файлов, этого может не хватить.

Сегодня утром я запустил копирование изображений с одного сервера на другой. Командой scp -r спустя 5 часов я подошел и увидел что скопировано 4Gb (а впереди еще 200 GB)

Эта ситуация совсем не подоходит.

Обе утилиты позволяют добавлять компрессию.

-z опция для rsync

-C опция для scp

По умолчанию в обеих утилитах компрессия выключена, потому как она несет в себе накладные расходы на процессорные ресурсы. А пропускная способность сети является ограничивающим фактором чаще всего.

Поэтому модифицируем команды:

Для scp есть еще одна опция, которая ускоряет копирование файлов.

Rsync

На данный момент я запустил rsync и за 10 минут работы скопировано уже 12Gb

3) Фоновый режим

Ну и последняя модицикация, а что если у вас оборвется интернет соединение с консолью в самый неподходящий момент?

В случае с rsync в принципе ничего страшного потому как он умеет копировать только различия между файлами. Но с scp — это провал.

Поэтому можно запустить скрипты в фоновом режиме, закрыть консоль, и пойти отдыхать.

Надо сделать так, но этого не достаточно, интерактивного режима от консоли при этом запущено не будет, а как же указать пароль?

Читайте также: