Windows: синхронизация файлов и папок по сети или резервное копирование

Итак, у нас есть задача: синхронизировать некоторый набор папок с лежащими в них файлами. Причем задача стоит именно так:
— Синхронизация должна поддерживать передачу файлов по сети — т.е., например, с одного компьютера на другой;
— Синхронизация должна уметь копировать только новые файлы, не передавая заново уже существующие;

Из своей практики я могу предложить 2 пути: ROBOCOPY и XCOPY.

Путь первый — ROBOCOPY

Данная утилита идет из коробки в Windows 7 и Server 2008. На более старых ОС ее может не оказаться (например, на XP и Server 2003 из коробки ее точно нет). В таком случае можно скачать и установить Windows Server 2003 Resource Kit Tools: вот отсюда. В этот тулкит, кроме всего прочего, входит наш инструмент.

Итак, вот пример использования данной утилиты:

robocopy D:\исходная_папка \\192.168.0.1\целевая_папка /E /Z /COPY:TDASO /DCOPY:T /M /R:2 /W:5

В данном примере:
Мы копируем папку «исходная папка», находящуюся на локальном диске D:
Мы копируем эту папку на компьютер \\192.168.0.1 в папку «целевая папка»
/E : Мы копируем все подпапки и файлы
/Z : Включаем поддержку докачки (на случай обрыва связи)
/COPY:TDASO : Копируем все атрибуты и ACL прав доступа NTFS (но не копируем атрибуты аудита)
/DCOPY:T : Копируем время создания папок
/M : Копируем только файлы с установленным атрибутом «A — Архивный» и сбрасываем этот атрибут, что позволяет нам копировать только измененные файлы.
/R : Количество повторных попыток копирования файла в случае, если копирование не удалось. Причем «не удалось» срабатывает и в том случае, если доступ к файлу закрыт. По-умолчанию = 1 миллионы, т.е. бесконечно, потому копирование благополучно встанет на первом же файле, к которому не будет доступа.
/W : Задержка в секундах между попытками копирования. По-умолчанию = 30 секундам.

Заметка. Очень рекомендую задавать вручную параметры /R и /W, иначе при автоматической синхронизации она попросту зависнет, встретив на своем пути ошибку доступа.

Много больше опций Вы можете почерпнуть из хелпа:
robocopy /?

Чем эта утилита хороша по сравнению с XCOPY:

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

Для того, чтобы зеркалировать папки (т.е. удалять в папке назначения все файлы, которые более не существуют в папке-источнике) — нужно добавить ключ «/PURGE»:

robocopy D:\исходная_папка \\192.168.0.1\целевая_папка /E /Z /COPY:TDASO /DCOPY:T /M /PURGE

А вот несколько примеров запуска этой утилиты:

Скопировать файлы, измененные за последние 5 дней (исключая сегодня):

robocopy D:\исходная_папка \\192.168.0.1\целевая_папка /maxage:5 /minage:1

Переместить все файлы (не копировать):

robocopy D:\исходная_папка \\192.168.0.1\целевая_папка /move /e

Копировать только указанные файлы по шаблону:

robocopy D:\исходная_папка \\192.168.0.1\целевая_папка *.xls *.doc *.txt /e

Путь второй — XCOPY

Данная утилита более старая, чем ROBOCOPY, и имеет меньше возможностей. Так, она не поддерживает пути с длинной имени более 256 символов (как это не умело делать FAT) и она не умеет делать зеркалирование. Более того, у нее отмечаются проблемы с копированием прав доступа ACL NTFS, как минимум — при копировании файлов на Samba-сервер.

Вот пример ее запуска:

xcopy "d:\исходная_папка" \\192.168.0.1\целевая_папка /D /E /C /I /H /R /K /Y /F /O

Здесь мы:

  • Копируем все файлы из директории «исходная папка», находящейся на диске «D:»
  • Копируем все файлы на компьютер \\192.168.0.1 в папку «целевая папка»
  • /D : Копируем только измененные файлы (по дате изменения)
  • /E : Копируем подкаталоги, включая пустые
  • /C : Игнорируем ошибки, если они возникли во время копирования, и продолжаем копирование
  • /I : Целевой объект — это папка
  • /H : Копировать скрытые и системные файлы
  • /R : Перезаписываем файлы, предназначенные только для чтения
  • /K : Копируем атрибуты, такие, как «только для чтения», «архивный», «системный», «скрытый»
  • /Y : Не спрашивать подтверждение на перезапись файлов
  • /F : Вывод полных имен исходных и целевых файлов (иначе — только имена файлов, без папок)
  • /O : Если установлен — копировать так-же ACL NTFS атрибуты доступа

По моему личному опыту ROBOCOPY лучше справляется со своей работой, в особенности, если Вы копируете файлы файловой помойки, куда лазят несколько сотен людей — бардака там бывает достаточно и длинна файловых имен с путем нередко больше 256 символов.

автор: Денис «Reagent» Ходус
Источник.

Один комментарий к “Windows: синхронизация файлов и папок по сети или резервное копирование

  1. List

    70 лет стаж 5.5 года. Статья полезная, но автор её писал больше для себя, чем для нас.. Кстати из своего опыта и нескольких предупреждений от пк — robocopy требует осторожности… List

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

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