Robocopy: утилита копирования файлов Windows¶
Robocopy (от англ. Robust File Copy — «надёжное копирование файлов») — консольная утилита командной строки для Windows, предназначенная для синхронизации, резервного копирования и зеркалирования файлов и каталогов. Отличается повышенной устойчивостью к сбоям сети и ошибкам ввода-вывода, поддерживает многопоточность и возобновление прерванных операций. Входит в состав операционных систем семейства Windows NT (начиная с Windows Vista и Windows Server 2008) как стандартный компонент, а также распространяется в составе Windows Resource Kit для более ранних версий.
¶История
Robocopy была создана в 1997 году как внутренний инструмент для нужд подразделения Microsoft, занимавшегося разработкой операционных систем. Автором утилиты является Кевин Аллен (Kevin Allen). Первоначально программа использовалась для управления крупными файловыми серверами и миграции данных. В 2003 году Robocopy была включена в состав Windows Server 2003 Resource Kit, что сделало её доступной для системных администраторов. Начиная с Windows Vista, утилита стала поставляться вместе с операционной системой, заменив собой устаревшую команду copy и частично функциональность xcopy. В последующих версиях Windows, включая Windows 10 и Windows 11, Robocopy остаётся штатным инструментом и продолжает развиваться, хотя значительных изменений в её синтаксисе не происходило.
¶Основные возможности
Robocopy предоставляет широкий набор опций, позволяющих гибко настраивать процесс копирования. Ключевые возможности включают:
- Многопоточное копирование (параметр
/MT): ускоряет перенос большого количества мелких файлов за счёт использования нескольких потоков одновременно. - Зеркалирование каталогов (параметр
/MIR): полная синхронизация исходного и целевого каталогов, включая удаление лишних файлов в целевом расположении. - Копирование атрибутов и метаданных: сохраняет временные метки, атрибуты файлов, списки управления доступом (ACL), альтернативные потоки данных (ADS) и информацию о владельце.
- Возобновление копирования: при обрыве связи или ошибке утилита может продолжить работу с места прерывания, не начиная заново.
- Фильтрация файлов: включение или исключение файлов по маске, размеру, дате изменения и другим критериям.
- Режим очистки (параметр
/PURGE): удаление файлов в целевом каталоге, которых нет в исходном. - Журналирование: ведение подробного лога операций, включая запись в файл журнала.
¶Синтаксис и параметры
Базовый синтаксис команды выглядит следующим образом:
`` robocopy <источник> <назначение> [<файлы>] [<параметры>] ``
Источник и назначение — пути к каталогам. Параметр <файлы> позволяет указать конкретные файлы или маски (например, *.docx). Основные параметры группируются по функциональному назначению:
| Группа | Примеры параметров | Назначение |
|---|---|---|
| Режимы копирования | /S, /E, /MIR, /PURGE | Копирование подкаталогов, зеркалирование, очистка |
| Фильтры | /XF, /XD, /MAXAGE, /MINAGE, /MAXSIZE, /MINSIZE | Исключение/включение файлов и папок по атрибутам |
| Атрибуты | /COPY, /DCOPY, /SEC, /DATS | Копирование метаданных, ACL, временных меток |
| Потоки и производительность | /MT, /R, /W, /NP | Число потоков, число повторов, задержка, отключение индикатора |
| Журнал | /LOG, /LOG+, /TEE, /V | Запись лога в файл, подробный вывод |
Например, команда для полного зеркалирования каталога D:\data в сетевую папку \\server\backup с удалением лишних файлов и многопоточностью выглядит так:
`` robocopy D:\data \\server\backup /MIR /MT:16 /LOG:backup.log ``
¶Коды возврата
Важной особенностью Robocopy является система кодов возврата, которая позволяет автоматизировать её использование в скриптах. Код 0 означает, что файлы были скопированы успешно без ошибок. Коды 1–7 являются битовой маской, где каждое значение соответствует определённому событию: 1 — файлы скопированы, 2 — лишние файлы удалены, 4 — обнаружены несоответствия, 8 — ошибки копирования. Код 8 и выше сигнализирует о сбоях, требующих внимания администратора. Для проверки результата в пакетных файлах часто используется конструкция if %errorlevel% geq 8 exit /b 1.
¶Применение
Robocopy широко используется в следующих сценариях:
- Резервное копирование: создание регулярных резервных копий данных на внешние носители или сетевые хранилища.
- Миграция данных: перенос пользовательских профилей, файловых серверов и баз данных между машинами.
- Синхронизация каталогов: поддержание актуального состояния файлов на нескольких серверах или рабочих станциях.
- Автоматизация задач: встраивание в скрипты PowerShell и пакетные файлы для выполнения плановых операций через Планировщик заданий Windows.
- Восстановление после сбоев: копирование данных с повреждённых дисков, так как утилита способна пропускать проблемные файлы и продолжать работу.
В отличие от стандартной команды copy, Robocopy корректно обрабатывает длинные пути (более 260 символов) при использовании параметра /LFSM или при поддержке длинных путей в системе, а также умеет работать с файлами, открытыми другими приложениями, в ограниченном режиме.
¶Ограничения и альтернативы
Robocopy работает только в среде Windows и не имеет встроенной поддержки шифрования или сжатия данных. Для копирования файлов с одного сервера на другой с сохранением разрешений требуется запуск от имени администратора. В средах Linux и macOS аналогичную функциональность предоставляют утилиты rsync и cp с соответствующими опциями. В Windows PowerShell для схожих задач может использоваться командлет Copy-Item, однако он уступает Robocopy в производительности и надёжности при работе с большими объёмами данных.
¶Интересные факты
- Robocopy поддерживает параметр
/B, который позволяет копировать файлы в режиме резервного копирования, обходя ограничения прав доступа. - Утилита имеет режим
/L(list only), который показывает, какие файлы были бы скопированы, без фактического выполнения операции, что удобно для предварительной проверки. - В Windows 10 и 11 Robocopy используется самой системой для переноса пользовательских данных при обновлении до новой версии операционной системы.