Меню Рубрики

Robocopy windows 2003 server

Использование Robocopy для синхронизации и резервного копирования файлов, примеры

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 в различных внешних скриптах и утилитах).

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

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

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

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

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

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

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

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

Использование 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

  • \\testnode1\C$\source\ — исходный каталог, откуда копируются файлы
  • \\testnode2\C$\dest\ — каталог назначения, куда скопируются файлы
  • *.txt – фильтр файлов. Синхронизируются только .txt файл и директории.
  • /MIR – полное зеркалирование данных в source и dest директориях. Файлы, удаленные из source директории или не присутствующие в ней, также будут удалены из dest. Если вы хотите, чтобы удаленные из source файлы оставались в dest, то поменяйте параметр /MIR на /E
  • /COPYALL – копирует всю информацию о файле (Атрибуты, параметры безопасности и т.д.). Как альтернатива, можно применять флаг /COPY:DT для копирования timestamp, а не всей информации. /COPALL требует прав администратора
  • /Z – robocopy продолжит копирование файла при обрыве. Полезно при копировании больших файлов (неплохая альтернатива копированию файлов по BITS)
  • /B – позволяет robocopy избегать ошибки access denied error. В этом режиме robocopy игнорирует все права на файлы, которые могли бы помешать прочитать/записать файл. Этот режим требует прав администратора либо участие в группе Операторы архива
  • /J – Копирование без буфера (файлового кэша, оперативной памяти). Эффективно для больших файлов.
  • /R:3 – количество попыток скопировать недоступный файл. Значение по умолчанию – миллион, поэтому необходимо его сменить.
  • /W:1 – секунды между попытками скопировать недоступный файл. Значение по умолчанию – 30 секунд.
  • /REG – сохранить текущие значения ключей /R и /W в реестр как стандартные, для будущих вызовов robocopy.
  • /TEE – разделение вывода работы команды и в лог файл, и в консоль. При фоновом вызове robocopy (например, из планировщика задача) этот параметр можно убрать, оставив только /LOG
  • /LOG – путь к файлу лога

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

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

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

  • set date_=%date:/=-% — эта строчка присваивает значение переменной date_ в формате DD.MM.YYYY
  • /maxage:1 — Максимальный возраст файла. Исключает файлы старше N дней или даты. Дата указывается в формате YYMMDD, например, /maxage:20200421
  • /E – копирует подпапки, без ограничения уровня вложенности. Для контроля уровня вложенности директорий можно использовать параметр /lev, например, /lev:3

Инкрементальность осуществляется за счёт параметра /maxage:1 — файлы старше суток копироваться не будут. Для первого, “базового” копирования, можно выполнить этот скрипт без параметра /maxage.

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
  • Если вы используете ключ /MOVE с ключом /E, то вы перенесете все файлы, директории (включая файлы внутри них) и пустые директории. Файлы и директории удалятся из исходной папки. /MOVE с /S даст такой же результат, но пустые директории не перенесутся и будут удалены.
  • Если вы используете ключ /MOV с ключом /E, то вы перенесете все файлы, включая те, которые находятся в директориях и поддиректориях, также скопируются все директории (включая пустые), но они не будут удалены из исходного каталога, в отличие от файлов. Используя /MOV с /S, вы получите такой же результат, но пустые директории не будут скопированы.

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

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

  • Исходный путь — \\testnode1\C$\source
  • Целевая директория- \\testnode2\C$\source

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

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

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

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

Перейдите на вкладку 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 на нужный вам путь.

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

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

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

Отслеживание изменений в каталогах с помощью 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 в PowerShell можно использовать командлет Copy-Item, который хоть и менее функционален, но работает с объектной моделью PowerShell, что может быть важно, если вы часто используете PowerShell или используете цепочки автоматизации с другими языками программирования.

Источник

Ответы на вопросы по работе с Robocopy

Решения на основе сценариев Windows Robocopy — одна из моих любимых утилит, входящих в комплект Microsoft Windows Server 2003 Resource Kit. В новой версии этого инструмента — Robocopy XP010 появился ряд дополнительных возможностей, которых очень не хватало предыдущим версиям.

Решения на основе сценариев Windows

Robocopy — одна из моих любимых утилит, входящих в комплект Microsoft Windows Server 2003 Resource Kit. В новой версии этого инструмента — Robocopy XP010 появился ряд дополнительных возможностей, которых очень не хватало предыдущим версиям. На основе вопросов, которые задавали мне читатели, я составил список ответов на наиболее типичные из них. Этот документ можно использовать в качестве дополнительной инструкции по использованию Robocopy. Давайте начнем с вопроса, касающегося процедуры переноса данных на сетевые устройства хранения данных Network Attached Storage (NAS).

Вопрос: Я переношу значительный объем данных из системы на базе Windows 2000 Server в среду с использованием NAS. Я использую Robocopy с переключателями, которые прежде применялись для переноса с одной системы Windows на другую. Я заметил, что время копирования практически не уменьшается при проведении последующих инкрементных копирований. Что я делаю неправильно?

Ответ: Обычно после того, как будет выполнено начальное копирование с использованием Robocopy, наблюдается снижение общего времени копирования, поскольку копируются только изменения, произошедшие со времени предыдущего копирования. Объем данных, подлежащих копированию, включает вновь измененные или удаленные файлы и папки и сильно зависит от окружения.

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

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

Если вашей задачей является копирование с систем Windows на устройства сетевого хранения (NAS), придется выяснить у поставщика вашего устройства NAS, поддерживает ли это устройство временные стандарты NTFS-файлов. Ключ Robocopy /FFT особенно полезен, если имеется устройство NAS, которое не поддерживает 100-наносекундную точность при определении времени создания файла в NTFS, а использует только двухсекундную точность определения времени создания файла, характерную для FAT. Округление времени создания NTFS-файла может привести к копированию файлов, которые не изменялись. Robocopy распознает эти файлы как новые либо как старые, но измененные и запускает операцию копирования.

Переключатель /FFT заставляет Robocopy использовать точность определения времени, применяемую в FAT, т. е. утилита использует двухсекундный стандарт для сравнения файлов. Пока файлы имеют одинаковые временные отметки внутри двухсекундного интервала, Robocopy считает их идентичными и не копирует. Этот переключатель значительно снизит время копирования и сократит случаи копирования файлов, которые в действительности не изменялись.

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

Ответ: В Robocopy XP010 появилась возможность вести постоянный мониторинг источника на предмет внесенных изменений. Функцией мониторинга можно управлять при помощи переключателей /MON:n и /MOT:m. Переключатель /MON:n задает минимальное количество изменений, которые должны произойти, прежде чем Robocopy запустится снова. Ключ /MOT:m задает минимальное время в минутах, которое должно пройти до следующего запуска Robocopy. Более подробную информацию об использовании функции мониторинга можно найти в файле помощи Robocopy.doc на носителе с Resource kit.

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

Если планируется использовать функцию мониторинга периодически, нужно иметь в виду одно обстоятельство. Если вы запускаете Robocopy с функцией Monitor из сценария, Robocopy останется запущенной и после завершения работы сценария. Чтобы решить эту проблему, я воспользовался планировщиком задач (Task Scheduler) для запуска Robocopy в режиме мониторинга. Ниже приведен пример командной строки, которую я использовал при работе с Task Scheduler.

C: obocopy.exe»SourceServer SourceShare»»DestServer DestShare»
/COPY:DAT /E /NP
/FFT /NS /NDL /MON:1 /MOT:1
/IPG:5 /PURGE/R:1 /W:1
/LOG+:C:RoboLog.txt

Убедитесь, что команда набрана в одну строку.

Если вы имеете дело с медленными каналами и получаете от Robocopy сообщения об ошибках копирования, попробуйте воспользоваться появившимся в новой версии переключателем, позволяющим регулировать интервал между пакетами Inter-Packet Gap (/IPG:n). Если использовать этот ключ со значением, равным 5, при работе на медленных линиях, то это значительно уменьшит количество ошибок копирования, связанных с временными задержками в сети. Подробная информация о ключе /IPG содержится в файле помощи Robocopy.doc.

Вопрос: Мы переносим несколько сотен совместно используемых файловых ресурсов на другой сервер. Есть опасения, что Robocopy может пропустить какой-нибудь из ресурсов на сервере-источнике и не создать его на сервере-приемнике. Как убедиться в соответствии между сервером-источником и сервером-приемником?

Ответ: Сценарий TestShareCorrespondence.bat приведенный в листинге 1, задействует утилиту Rmtshare для сравнения совместно используемых файловых ресурсов на источнике и приемнике. Rmtshare в действительности является утилитой из состава Microsoft Windows NT 4.0 Resource Kit, которая больше не поставляется в составе наборов системных утилит. Тем не менее утилита прекрасно работает и еще доступна на FTP-сайте Microsoft по адресу: ftp://ftp.microsoft.com/bussys/winnt/winnt-public/reskit/nt40/i386/rmtshare.exe.

Я тестировал сценарий TextShareCorrespondence.bat, как и другие сценарии, приведенные в этой статье, на системах с Windows XP Service Pack 1 (SP1) и Windows 2000 Server SP3. Чтобы воспользоваться сценариями в своем окружении, скопируйте входной и выходной файлы и укажите место расположения утилиты, как поясняется в заголовке сценария.

Вопрос: У нас возникали проблемы, когда пользователи создавали структуры папок, суммарная длина пути к которым превышала 256-символьное ограничение, обусловленное свойствами приложений Windows. При выполнении недавней миграции Robocopy выводила много ошибок, связанных с превышением допустимой длины пути. Когда я попытался запустить Robocopy XP010, система перестала выдавать сообщения о таких ошибках. Каким образом Robocopy XP010 работает с длинными путями к файлам?

Ответ: По умолчанию Robocopy XP010 может копировать имена файлов и папок, длина пути к которым превышает 256-символьный предел. Теоретически такое имя может состоять из 32 000 символов, при этом ошибки в журнале работы утилиты отображаться не будут. Если вы хотите, чтобы Robocopy выводила сообщения о подобных ошибках для того, чтобы вы могли видеть, где могут возникнуть проблемы, воспользуйтесь переключателем /256. Этот ключ приводит к тому, что Robocopy генерирует знакомые вам сообщения об ошибках. При этом необходимо помнить, что некоторые пользовательские приложения не могут работать с длиной пути, превышающей 256 символов. При этом длинные имена пути могут успешно пройти проверку на копирование.

Если вы планируете воспользоваться утилитой Diruse из состава набора утилит для сравнения каталогов или какой-нибудь другой утилитой для проверки успешности копирования, следует помнить, что эти инструменты также могут иметь ограничения, связанные с длиной пути. Это, в свою очередь, может привести к различным результатам при подсчете размеров каталогов на приемнике и источнике. Допустим, у вас имеется совместно используемый ресурс с именем FileServer1ShareA, который содержит только один файл. Этот файл с размером 10 Mбайт имеет имя LongFile.txt. Он расположен в структуре с глубоким вложением, а длина пути к этому файлу составляет 253 символа. Допустим, при использовании Robocopy для копирования этого файла на другой сервер добавляется еще один дополнительный уровень в путь: FileServer2ShareBOldShareA. Не задумываясь, вы тем самым увеличили длину пути на 10 символов. Robocopy успешно скопирует файл (если вы не используете ключ /256 для вывода сообщения об ошибке).

Если затем вы воспользуетесь утилитой Diruse для сравнения результатов, она не обнаружит файл размером 10 Mбайт с именем LongFile.txt на новом ресурсе, поскольку длина пути к нему превышает 256-символьный предел. Результатом этого сравнения будет отсутствие на новом месте одного файла размером 10 Мбайт.

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

Вопрос: Я проверяю некоторые большие журнальные файлы Robocopy на наличие сообщений об ошибках. Однако значительный объем журнала сильно затрудняет работу. На какие события в журнале я должен обращать особое внимание? Какие события вызывают подобные ошибки?

Ответ: Секция результатов работы программы находится в конце журнального файла Robocopy, здесь отображается информация об ошибках. Кроме того, я обычно запускаю поиск по словам Exceeded (превышение) и ERROR в содержимом журнала. Это укажет места, где имели место ошибки копирования. Основной причиной подобных ошибок Robocopy является отсутствие необходимых прав доступа на приемнике и источнике. Если вы копируете настройки безопасности и права на структуры файлов, убедитесь, что учетная запись, от имени которой производится копирование, имеет права Full control на сервере-приемнике.

Вопрос: Нам необходимо произвести перенос нескольких сотен совместно используемых файловых ресурсов с одного сервера на другой. Можем ли мы задействовать единый сценарий для запуска Robocopy на всех ресурсах без написания индивидуальных сценариев Robocopy для каждого из ресурсов?

Ответ: Рассмотрим несколько вариантов. Если понятие сервера идентично в терминах понятию диска и имеет ту же букву в обозначении и сходное содержимое диска, вы можете копировать корень каждого из дисков вместо копирования отдельных ресурсов. Но в этом случае файлы журналов будут организованы по дискам, а не по разделяемым ресурсам.

В качестве альтернативы можно воспользоваться сценарием, который берет входное имя совместно используемого ресурса из списка и запускает Robocopy отдельно для каждого такого ресурса. Сценарий RoboCopyMigration.bat, приведенный в листинге 2, изменяет заголовок окна командной строки так, что вы можете видеть, откуда в данный момент ведется копирование. RoboCopyMigration.bat создает файл журнала с именем, состоящим из комбинации имени разделяемого ресурса и временной отметки начала копирования. Заметьте, что в сценарии используется новый ключ Robocopy /TEE, пересылающий вывод команды как в файл журнала, так и на консоль.

Вопрос: Я не вполне доверяю журнальным файлам утилит копирования. Мне бы хотелось убедиться в том, что содержимое источника и приемника после окончания операции копирования полностью идентичны. Каким образом проще всего это сделать?

Ответ: Я рекомендую воспользоваться независимыми утилитами, осуществляющими проверку операции копирования. Имеется ряд графических утилит, выполняющих подобную функцию сравнения, например TreeSize (http://www.jam-software.com/freeware). Если вы предпочитаете пользоваться сценариями, можно посоветовать утилиту Diruse из комплекта Resource Kit. Я обычно проверяю количество файлов и суммарный объем данных в папках источника и приемника. Если эти числа совпадают, я уверен в успехе операции копирования. Сценарий MigrationCompare.bat, приведенный в листинге 3, создает выходной файл, в котором приводится количество скопированных файлов и суммарный размер файлов данных для каждого из скопированных совместно используемых ресурсов на источнике и приемнике.

Итак, мы рассмотрели несколько новых возможностей версии Robocopy XP010. Руководствуясь описанными сценариями, стратегиями и технологиями, вы сможете подготовиться к выполнению любых задач по переносу данных объемом от нескольких сотен мегабайтов до нескольких терабайтов.

Дик Льюис — старший системный инженер компании CKT Consulting в Калифорнии. Имеет сертификаты MCSE и MCT, специализируется на системах управления масштаба предприятия. dlewis@winnetmag.com

Поделитесь материалом с коллегами и друзьями

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

  • Roblox for windows 7
  • Rndis windows xp sp2
  • Rndis ethernet gadget windows 7
  • Rndis driver windows xp штрих
  • Rndis driver windows xp xiaomi