Robocopy

**Robocopy**  (оно же  *Robust File Copy* ) — былинный виндузятный копировщик файлов, возведённый в абсолют. Единственный известный науке инструмент от Microsoft, который невозбранно используется суровыми бородатыми сисадминами, работает из консоли, делает то, для чего предназначен, и, что самое удивительное, делает это хорошо. За свою прямолинейность, ультимативность и интерфейс, понятный лишь прошедшим инициацию, нежно любим в узких кругах и вызывает священный ужас у эникейщиков и прочих мимокрокодилов, случайно набредших на это чудо инженерной мысли. И да, вопреки ожиданиям ньюфагов, никакого отношения к полу-человеку, полу-машине, но стопроцентному копу он не имеет. Хотя...

## История эпического происхождения

Задолго до твоего рождения, анон, когда серверы были большими, а интернеты медленными, в недрах корпорации Мелкомягких трудился безымянный сумрачный гений по имени Кевин Аллен. В те дремучие времена (шла вторая половина 90-х) единственными инструментами для копирования терабайт порно... то есть,  *критически важных бизнес-данных* ... были дохлые, как прошлогодний снег, команды `copy` и `xcopy`. Первая не умела в директории, а вторая, хоть и подавала надежды, падала замертво от любого чиха, будь то временная потеря сетевого соединения, заблокированный файлик с  *курсовой.docx*  или просто плохое настроение у Ктулху.

Любой сисадмин того времени, запустивший копирование здоровенной папки на ночь, утром рисковал обнаружить вместо бодрого рапорта о завершении лишь жалкую надпись  *File not found*  или  *Access denied* , после которой процесс покорно складывал лапки. Боль, ненависть и литры пролитого кофе стали тем самым топливом, которое и породило Robocopy. Изначально этот вундерваффе был частью эксклюзивного набора для избранных —  *Windows NT 4.0 Resource Kit*  — эдакого сборника заклинаний и артефактов для настоящих шаманов, не боящихся командной строки.

Пройдя обкатку в самых тёмных и пыльных серверных планеты, где он перемалывал петабайты информации, не обращая внимания на битые сектора, падающие сети и криворуких юзеров, Robocopy доказал свою профпригодность. И лишь спустя декаду, с выходом Windows Vista (да, той самой) и Windows Server 2008, этот титан мысли был признан официально и включён в стандартную поставку операционной системы, навсегда изменив ландшафт копирования файлов в экосистеме Windows.

## Я бы купил вашу копию за доллар!

Открыв справку по Robocopy (`robocopy /?`), неподготовленный юзер испытывает шок, трепет и непроизвольную дефекацию. Стена текста, состоящая из сотен загадочных ключей и параметров, больше напоминает код запуска межконтинентальной баллистической ракеты, нежели инструкцию к утилите копирования. Но именно в этой, на первый взгляд, шизофренической сложности и кроется его мощь. Robocopy — это не просто  *скопировать отсюда и вставить туда* . Это философия. Это искусство.

В отличие от своих примитивных предков, Robocopy оперирует не отдельными файлами, а целыми директориями. Указывать ему что-то вроде `C:\someshit\*.*` бессмысленно и карается руганью в консоль. Только хардкор, только пути к папкам. Зато внутри этих папок можно творить настоящую магию.

> robocopy "D:\Архив Ценных Данных" "E:\Надежный Бэкап" /E /ZB /COPYALL /R:1 /W:1 /MT:32 /LOG:backup.log /TEE /NP

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

- */E*  — Копировать всё, включая пустые поддиректории. Потому что настоящий параноик бэкапит даже пустоту.

- */ZB*  — Легендарный ключ. Сначала он пытается скопировать файл в  *restartable mode*  (/Z), что позволяет возобновить передачу после обрыва. Если же натыкается на суровую надпись  *Доступ запрещен* , он не падает в обморок, а переключается в  *backup mode*  (/B) и, нацепив воображаемый плащ администратора, пытается выдрать файл, наплевав на некоторые ACL.

- */COPYALL*  — Копировать  **ВСЁ** . Не только жалкое содержимое файла, но и его атрибуты, временные метки, NTFS-права, владельца и даже аудиторскую информацию. Идеально для миграции серверов, когда нужно, чтобы на новом месте всё было  *тютелька в тютельку* .

- */R:1 /W:1*  — Количество повторных попыток (Retry) и время ожидания (Wait). По умолчанию Robocopy готов долбиться в закрытый файл миллион (!) раз с 30-секундным интервалом. Это почти год. За это время успеет смениться три поколения системных администраторов. Поэтому любой вменяемый человек снижает эти параметры до адекватных, чтобы не ждать до тепловой смерти Вселенной.

- */MT:32*  — Врубить многопоточность. Вместо того чтобы уныло таскать файлы по одному, Robocopy запускает указанное число потоков (до 128) и начинает копировать параллельно, утилизируя сетевой канал и дисковую подсистему на полную. Скорость копирования при этом возрастает в разы, вызывая у админа скупую слезу счастья.

- */LOG:backup.log /TEE /NP*  — Святая троица логирования. Первая команда пишет подробный отчёт о своих действиях в файл. Вторая (/TEE) дублирует вывод в консоль, чтобы можно было в реальном времени любоваться бегущими строчками. А третья (/NP) отключает надоедливый процентный индикатор для каждого файла, который только засирает лог.

Но это, анон, лишь вершина айсберга. Есть ключи для фильтрации по имени, размеру, возрасту файла. Есть возможность исключать определённые файлы или директории (прощайте, `Thumbs.db` и `$RECYCLE.BIN`!). Есть ключи для работы с разницей во времени FAT и NTFS. А есть и особо опасные, способные принести как неоценимую пользу, так и тотальный экстерминатус.

### Его Величество /MIR

Ключ `/MIR` (mirror) — это  *magnum opus*  всего Robocopy. Он делает ровно то, что обещает: создаёт на месте назначения  **зеркало**  источника. Звучит безобидно, не так ли? Но дьявол, как всегда, в деталях.

> /MIR эквивалентен комбинации /E и /PURGE. Если /E просто копирует всё, то /PURGE  **удаляет**  из папки-получателя всё, чего нет в источнике.

Допустим, ты, мой юный падаван, решил сделать бэкап папки `D:\Фоточки_с_отдыха` на диск `E:\`. Ты запускаешь `robocopy D:\... E:\... /MIR`. Отлично, все фото на месте. На следующий день ты случайно удаляешь из исходной папки фотку с пьяным котом. А вечером снова запускаешь тот же скрипт для  *обновления бэкапа* . Robocopy смотрит на источник, видит, что фотки с котом там больше нет, смотрит на приёмник, видит её там и... безжалостно стирает. Всё. Котик канул в Лету. Навсегда.

Этот ключ — мощнейший инструмент для синхронизации, но в руках обезьяны он превращается в шредер. Архивачи хранят тысячи историй о том, как кто-то, перепутав источник и назначение, одной командой с `/MIR` стирал свежий бэкап пустой папкой. Одно неверное движение — и ты уже не системный администратор, а просто безработный.

## Практическая магия

Хватит теории, давай к практике. Вот тебе несколько готовых рецептов, которые можно копипастить в `cmd.exe`, меняя лишь пути.

**Простой, но надежный бэкап папки с документами на флешку:**

> robocopy "C:\Users\Anon\Documents" "E:\Backup\Documents" /E /Z /R:2 /W:5

Здесь мы просто копируем все из папки  *Documents*  на флешку `E:`, включая пустые каталоги (`/E`), с возможностью восстановления (`/Z`) и с двумя попытками перекопировать сбойный файл через 5 секунд. Просто и со вкусом.

**Жестокая и беспощадная синхронизация рабочего проекта между двумя машинами:**

> robocopy "\\Work-PC\D\ProjectX" "C:\MyProjects\ProjectX" /MIR /ZB /R:5 /W:5 /MT:8 /LOG:sync.log /TEE

А вот это уже серьезно. Мы  *зеркалим*  (`/MIR`) папку с рабочего компа на свой. Используем `/ZB`, чтобы попытаться скопировать в режиме возобновления, а если не выйдет (файл заблокирован), то попробовать в режиме бэкапа (он умеет обходить некоторые блокировки). Включаем 8 потоков (`/MT:8`), чтобы было быстрее. И, самое главное, пишем лог (`/LOG`) всего происходящего, а заодно выводим его и на экран (`/TEE`), чтобы в реальном времени наблюдать за актом творения и разрушения.

**Генеральная репетиция удаления половины интернета:**

> robocopy "C:\source" "D:\destination" /MIR /L

Запусти эту команду. Ничего не бойся. Ключ `/L` (List only) заставит Robocopy лишь  *показать* , что он  *собирается*  сделать. Ты увидишь список файлов, которые будут скопированы, изменены и, самое главное, —  **УДАЛЕНЫ** . Посмотри на этот список. Подумай. Еще раз подумай. И только потом убирай `/L` и нажимай Enter.

## Заключение

Иногда у Microsoft получаются действительно хорошие, годные вещи. Да, он стар. Да, он выглядит как привет из прошлого века. Но он работает. Работает предсказуемо, надёжно и эффективно, как швейцарский нож или автомат Калашникова. Это инструмент не для всех. Он не пытается заигрывать с пользователем красивыми анимациями и дружелюбными подсказками. Он требует к себе уважения и понимания того, что ты делаешь. Но если ты потратишь немного времени на изучение его повадок, он станет твоим верным и незаменимым помощником в цифровых джунглях. А если нет — что ж, всегда есть Проводник с его вечными "Подсчёт времени..." и падениями на полпути. Выбор за тобой, анон.

## См. также

- Сисадмин

- Rsync — идейный брат-близнец из мира UNIX.

- TeraCopy — популярная сторонняя альтернатива с GUI, для тех, кто не осилил.

## Ссылки

- Официальная документация на сайте Microsoft. Читай, прежде чем что-то сломать.

- Robocopy на SS64 — сборник ключей с человеческими объяснениями.