Решения на основе сценариев 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