Robocopy зеркалирование папки

Looking for a list of robocopy examples and useful commands? Then look no further.

Robocopy has many command line options and it can be overwhelming to know which commands to use. In this guide, I’ll show you the best robocopy commands and examples.

Let’s get started.

Copy Files That Start With

You can copy files that start with a specific character or word. For example, I will copy all files that start with the word “file”.

  robocopy C:\source \\srv-vm2\share file* 

You can see below the command only copied the two files that had “file” in the name, everything else was skipped.

copy specific file name


Windows
/ Программное обеспечение

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

На сайте Microsoft доступна другая утилита RichCopy со схожими функциями.

 ROBOCOPY источник назначение [файл [файл].] [Параметры] 

Источник
– Исходная папка (диск:\путь или \\сервер\общий ресурс\путь).

Назначение
– Конечная папка (диск:\путь или \\сервер\общий ресурс\путь).

Файл
– Копировать файлы (имена и подстановочные знаки: по умолчанию «*.*»).

Robocopy is a great command-line utility that is used to copy, mirror, or move large amounts of data quickly and efficiently from one location to another. The power of Robocopy is that it comes with tons of options/switches that you can use to fine-tune and optimize the copy action.

But all those possible options are also the common problem with Robocopy. You probably don’t use it daily, so which switches (options) do you need to use? How did we copy also the NTFS permissions or skip the empty folders?

In this article

In this article, we are going to take a look at Robocopy with the help of commonly used examples. What are the best practices? And how do you speed up your copy action?

Имеется два диска «D:» и «E:». Задача — создавать backup диска «D:» (зеркало) на диске «E:» через заданные промежутки времени.

Robocopy зеркалирование папки

На помощь нам придет планировщик заданий и утилита robocopy. Находим через поиск Windows 11 (значок лупы на панели задач, либо горячие клавиши «Win+S») планировщик заданий и запускаем его.

Robocopy зеркалирование папки

Robocopy зеркалирование папки

В окне « Создание задачи
», во вкладке « Общие
» задаем « Имя
» задачи, вводим « Описание
» задачи, а в разделе « Параметры безопасности
» указываем пользователя с правами администратора, выбираем пункт « Выполнять для всех пользователей
» и устанавливаем флажок « Выполнять с наивысшими правами
».

:/>  Почему в ноутбуке меняется время и дата

Robocopy зеркалирование папки

Robocopy зеркалирование папки

В окне « Создание триггера
» задаем расписание для запуска задачи бэкапа, для сохранения настроек нажимаем кнопку « ОК
».

Robocopy зеркалирование папки

Robocopy зеркалирование папки

Появится окно « Создание действия
», указываем действие — « Запуск программы
». В разделе « Параметры
» — « Программа и сценарий
» указываем « robocopy
», а в поле « Добавить аргументы
» указываем сценарий копирования данных:

 "D:\data" "E:\backup" /mir /copy:DAT /xo /r:1 /w:1 /log:"C:\log.txt" 

«D:\data» — откуда копируем.

«E:\backup» — куда копируем.

/mir — создаем зеркало дерева папок.

/copy:DAT — копируем флаги (D=данные, A=атрибуты, T=метки времени).

/xo — исключаем более ранние файлы.

/r:1 — число повторов при неудачном копировании.

/w:1 — время между повторами.

/log:«C:\log.txt» — создаем лог-файл.

Для сохранения настроек нажимаем кнопку « ОК
».

Robocopy зеркалирование папки

Созданное действие будет отображаться во вкладке « Действия
».

Robocopy зеркалирование папки

Вкладку « Условия
» оставляем неизменной.

Robocopy зеркалирование папки

Так же и вкладку « Параметры
» оставляем неизменной.

Robocopy зеркалирование папки

Для завершения создания задачи нажимаем кнопку « ОК
» и в окне авторизации указываем пароль от локального администратора.

Robocopy зеркалирование папки

Задача создана. Теперь остается дождаться расписания, когда задача сработает и создаст зеркало диска «D:».

Robocopy зеркалирование папки

При успешном срабатывании задачи свободное место на диске «E:» изменится. Если ничего не произошло, идем в лог-файл и смотрим, где ошибка. 

Robocopy зеркалирование папки

Mirror Source and Destination Directory

This command will mirror the source and destination directory. Whatever changes you make in the source directory will be mirrored in the destination. For example, if you add/remove a folder in the source, the same will occur in the destination.

 robocopy c:\source c:\it\dst /e /mir 

Below is a screenshot before I run the /mir command. You can see the source and destination are different.

mirror command before

After I run the /mir command the destination will be the same.

mirror command after

The output of the /mir command will show you what changes there are between the source and destination.

mirror command output

The above is saying the destination had an extra directory “Marketing” so it was removed. It then was missing two directories “new folder

” and “test” so it added these.

Wrapping Up

When you need to copy large amounts of data, then Robocopy is one of the best tools to use. It comes with a lot of options, as you have seen, to help you with copying data in the most efficient way. When working with large data sets, make sure that you test your commands with the /L
switch before running them on production data.

:/>  Как отключить автозапуск программ в windows

I hope you found this article useful, if you have any questions, just drop a comment below.


1) Простой пример — копирование содержимого каталога C:\A в каталог C:\B (включая файлы, атрибуты и метки времени), рекурсивно включая пустые каталоги (/E):

robocopy C:\A C:\B /E

2) Копировать содержимое каталога C:\A рекурсивно (/E), включая все атрибуты файлов (/COPYALL, эквивалентно /COPY:DATSOU, D=данные, A=аттрибуты, T=метки времени, S=безопасность=списки контроля доступа NTFS, O=владелец, U=аудит), не повторять попытки для заблокированных файлов (/R:0) (по умолчанию задан один миллион повторных попыток копирования), сохранять оригинальные метки времени у каталогов (/DCOPY:T — начиная с версии XP026 или более поздней):

robocopy C:\A C:\B /COPYALL /E /R:0 /DCOPY:T 

3) Создать зеркальную копию каталога C:\A в каталоге B на сетевом ресурсе \\backupserver, удалить из каталога B все отсутствующие в каталоге C:\A файлы (/MIR), использовать журнал возобновления (/Z) на случай потери сетевого соединения:

robocopy C:\A \\backupserver\B /MIR /Z

4) Скопировать файл file1.txt из папки c:\folder1 в папку c:\folder2:

robocopy.exe c:\folder1 c:\folder2 file1.txt

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

robocopy “E:\Documents” “\\NAS\BACKUP\Documents” /maxage:5 /minage:1

6) Переместить все файлы:

robocopy “E:\Documents” “\\NAS\BACKUP\Documents” /move /e

7) Скопировать файлы за исключением скрытых (/xa:h):

robocopy “E:\Documents” “\\NAS\BACKUP\Documents” /e /xa:h

или за исключением read-only (/ia:rs):

robocopy “E:\Documents” “\\NAS\BACKUP\Documents” /ia:rs

При копировании также можно менять атрибуты файлов, при помощи опции A+ (добавить атрибут) or A- (удалить атрибут). Скопировать все файлы и задать им атрибут read-only:

robocopy “E:\Documents” “\\NAS\BACKUP\Documents” /e /A+:r

8) Скопировать все файлы по шаблону (расширению), пустые папки не копировать:

robocopy “E:\Documents” “\\NAS\BACKUP\Documents” *.doc *.ppt /s

9) Скопировать все файлы размером от 1000 до 60000 байт:

robocopy “E:\Documents” “\\NAS\BACKUP\Documents” /e /max:60000 /min:1000

10) Исключить из копирования папку AppData (/XD AppData):

Robocopy “C:\Users\Administrator” “\\NAS\BACKUP\Administrator” /MIR /XA:SH /XD AppData /XJD

11) Создать 32 потока (/MT:32) копирования файлов:

Robocopy “C:\Users\Administrator” \\NAS\BACKUP\Administrator /MIR /XA:SH /XD AppData /XJD /R:5 /W:15 /MT:32

robocopy <source /> /secfix /xo /xn /xc

13) Пример использования в скрипте:

 echo Start backup time: %DATE% %TIME% >> g:\BC\backup_time.txt
robocopy.exe S:\ g:\BC\MK\ /MIR /R:1 /W:1 /NP /TEE /LOG:g:\BC\00_sync.log
echo End backup time: %DATE% %TIME% >> g:\BC\backup_time.txt
NET USE \\server01\IPC$ /USER:login password
NET USE \\fileserver\IPC$ /USER:login password
c:\reskit\robocopy \\fileserver\c$\work \\server01\e$\backup /MIR /SECFIX /TIMFIX /NP /LOG+:D:\logs\robocopy\backup_work.log
NET USE \\server01\IPC$ /DEL
NET USE \\fileserver\IPC$ /DEL 

Полный список команд доступен на странице  Microsoft TechNet — Robocopy

Copy Contents Exclude Empty Subdirectories

 robocopy c:\share c:\it\dst /s 

Here is a screenshot from my computer.

robocopy exclude empty directories

Here is a screenshot showing the comparison between the source and destination folders.

exclude empty directories folder comparison

Why did robocopy only copy the “Windows Defender” folder? Because the other folders are empty, the /s command will exclude subdirectories that are empty.

Copy Files Over the Network with File Properties

If you want to copy the ACL and other file properties use /copyall. To copy just the ACL you can use /copy:DATS.

 robocopy c:\source \\srv-vm2\share /z /e /copyall 

Purge Files and Folders From The Destination Directory

If you have deleted a bunch of files/folders from the source and want to remove them from the destination folder, use the /purge option.

 robocopy c:\source c:\it\dst /e /purge 

The output will show you the folders it removed.

:/>  Настройка UEFI-загрузчика. Самое краткое руководство в мире / Хабр
robocopy purge examples

Copy Files By File Type

If you need to copy specific file types use the command below. In this example, I’m going to only copy files that are a txt file type.

 robocopy C:\source \\srv-vm2\share *.txt 

Below you can see robocopy only copied the file1.txt file to the destination directory.

copy file type

If I wanted to copy all images that are jpg type I would use *.jpg.

Specify Retries On Failed Copies

The /r command specifies the number of retries on failed copies. This is recommended on large file copies and when copying over the network. Network file copies can get interrupted, the /r will auto-retry the copy for any failures.

 robocopy C:\source C:\it\dst /LOG+:c:\it\robolog.txt /MIR /copyall /z /w:1 /r:2  

Copy Files with Specific Size

This will copy files that do not exclude 2000 bytes.

 robocopy C:\source \\srv-vm2\share /S /MAX:2000 

You can also use /min, to specify the minimum file size.

The Basics

Before we deep dive into Robocopy and look into all the options, let’s first start with the basics. The first and most important to know is that you run Robocopy in a test mode with /L
. This will list the result without actually copying or removing any files or folders.

 Robocopy "D:\test files" "F:\lab" /L 

test mode

If you look at the results, you will see which files or folders will be copied, removed, or skipped. When you are new to Robocopy, using the /L parameter
first is really a good idea to check if the results are as expected.


Copying all Files

When you use Robocopy without any switches, it will copy only the files from the given location to the destination. It won’t copy any subfolders from the given directory, only the files without NTFS permissions or owner information. Все, что вам нужно сделать, это указать исходную папку и папку назначения:

 Robocopy "D:\test files" "F:\lab" 

robocopy

Опции Robocopy по умолчанию


Скопировать все файлы и папки

Для копирования всех файлов и папок с помощью Robocopy нам потребуется указать параметр /E
. Это скопирует все файлы и папки из данного каталога. Если вы также хотите скопировать все атрибуты, например разрешения NTFS или атрибуты владельца, то также добавьте /COPYALL
также параметр:

 Robocopy "D:\test files" "F:\lab" /E /COPYALL 

robocopy copy all files and folders

robocopy скопировать все файлы и папки


Переместить файлы

Когда вам нужно переместить файлы из одного места в другое, вы можете использовать /mov
параметр в Robocopy. Это скопирует все файлы , а не .
вложенные папки в место назначения и после завершения удалите файлы из исходного местоположения.

Лично я не большой поклонник использования /mov
или /move
параметры. Потому что, если что-то пойдет не так с действием копирования, у вас больше не будет исходных файлов. Поэтому сначала проверьте результаты с помощью параметра /L.

 Robocopy "D:\testfiles" "c:\temp\testfiles" /mov 

При использовании /mov
сам по себе он не будет копировать атрибуты файла, такие как разрешения NTFS. Так что вы можете использовать /COPYALL
также параметр.


Перемещение файлов и папок

Чтобы переместить также папки, мы можем использовать параметр /move
, который также должен переместить подпапки из каталога. Вам нужно объединить это с /E
параметр, чтобы просмотреть все подпапки, в противном случае перемещается только содержимое основной папки.

 Robocopy "D:\testfiles" "c:\temp\testfiles" /move /e /copyall 

Разница с /mov /e
заключается в том, что это оставит пустые папки в исходном каталоге, где /move /e
также удаляет вложенные папки после их копирования.


Зеркало-робокопия

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

Полезно знать, что если вы добавите или удалите файл в месте назначения
папка, то эта не будет добавлена ​​
к источнику. Это зеркало только от источника до места назначения

Не используйте зеркало Robocopy в качестве решения для резервного копирования. Если файл удален в источнике, он будет автоматически удален и в месте назначения. Так что это не резервное решение!

 # Зеркальные файлы
Robocopy "D:\testfiles\" "c:\temp\testfiles\" /mir 

Robocopy mirror

Робокопировальное зеркало

Если мы посмотрим на результаты, вы увидите строку Варианты
. Это показывает, какие переключатели Robocopy используются. Как видите /E
и /Purge
добавляются автоматически. Это означает, что /MIR
также отразит все подкаталоги и очистит (удалит) все файлы в целевом каталоге, которые больше не существуют в исходном.

Использование команды «Зеркало» по сети

Эта команда одинаково хорошо работает в сети, но для оптимизации скорости и производительности есть несколько дополнительных команд
который может быть очень полезен в сочетании с /mir
команда.

  • /zb
    – Использовать перезапускаемый режим, а при отказе в доступе пытаться использовать резервный режим (теневой режим)
  • /MT:nn
    – Копировать файлы, используя несколько потоков, которые вы бы определили, заменив nn
    заполнитель с количеством потоков. 8
    по умолчанию, и 16
    является разумным числом для проверки в первую очередь. Имейте в виду, что для продолжения работы большего количества потоков потребуется больше ЦП и памяти.
  • /tbd
    – Если вы выполняете передачу через общие сетевые ресурсы, вы можете столкнуться с ошибкой 67, которая означает «невозможно найти сетевое имя», и эта опция попытается повторить эту ошибку.
  • /r:1 /w:3
    – Объединение этих двух команд указывает Robocopy повторить попытку только один раз и подождать 3 секунды между ними. Это значение следует отрегулировать по мере необходимости, возможно, 5-10 повторных попыток и 5 секунд между ними, в противном случае повторные попытки будут повторяться почти бесконечно с интервалом в 30 секунд.
  • /fft
    – Наконец, коммутатор FFT использует синхронизацию файлов FAT вместо NTFS, что может привести к дрейфу примерно в 2 секунды и меньшей точности, но большей отказоустойчивости при передаче файлов. Это также важно при передаче между файловыми системами, такими как NTFS и EFS.
  • /np
    – Это удаляет индикатор индикатора выполнения, так как он может стать неточным из-за многопоточного характера передачи.

Иногда /z
Команда может снизить производительность, вам может потребоваться провести тестирование с и без, чтобы максимизировать производительность и надежность.

 robocopy D:\Articles\SourceDirectory \\server1.fqdn\DestinationShare /mir /zb /mt:16 /tbd /r:1 /w:3 /fft /np 

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

Роботизированные переключатели

Как упоминалось в начале, команда Robocopy содержит множество переключателей, которые вы можете использовать. Я не собираюсь полностью объяснять каждый из них, но ниже вы найдете наиболее часто используемые переключатели, которые вы можете использовать для Robocopy. Вы можете получить всю информацию, набрав robocopy /?


Параметры копирования

Роботизированные переключатели


Параметры выбора файла

Переключатели выбора файла Robocopy


Варианты повтора

Переключатели повторных попыток робокопирования

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


Одиночный файл Robocopy

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

 robocopy d:\testfiles c:\temp\dst "имя-файла-для-копирования.txt" 

robocopy single file

робокопировать один файл


Копировать файлы по типу

В Robocopy мы можем фильтровать, какие файлы копировать, используя подстановочные знаки и имена файлов. Это позволяет нам также фильтровать файлы по типу файла. Например, чтобы скопировать только файлы журналов из заданного каталога, мы можем фильтровать по расширению .log
используя подстановочный знак *
:

 robocopy d:\testfiles c:\temp\dst *.log 

copy by file type

Как вы можете видеть на скриншоте выше, я добавил опцию /s
. Это также скопирует файлы .log из подкаталогов. Он не будет копировать подкаталоги, в которых нет файла .log.

Вы также можете указать несколько типов файлов, просто оставьте пробел между типами файлов:

 robocopy d:\testfiles c:\temp\dst *.log *.txt 


Исключить тип файла

Исключение типов файлов в Robocopy выполняется с помощью /xf
выключатель. Мы можем использовать подстановочные знаки (* и ?), чтобы указать типы файлов, которые мы хотим исключить. Разделяйте несколько типов файлов пробелом между ними.

В приведенном ниже примере копируются все файлы, кроме файлов журнала и txt:

 robocopy d:\testfiles c:\temp\dst /xf *.log *.txt 

robocopy Exclude File Type

Robocopy Exclude File Type

В результатах видно, что 6 файлов были пропущены, а 12 скопированы.


Копировать файлы с фильтром

Помимо типов файлов, мы также можем фильтровать имена файлов или атрибуты файлов с помощью Robocopy. Принцип фильтрации по именам файлов аналогичен фильтрации по типам файлов. Мы можем использовать подстановочные знаки (* и ?) для фильтрации части имен файлов.

Например, чтобы отфильтровать все файлы, имя которых начинается с log:

 robocopy d:\testfiles c:\temp\dst log* 

copy files with filter

Также можно отфильтровать файлы, которые вы хотите скопировать, на основе атрибута. Мы можем использовать /IA
копировать только файлы с определенным атрибутом или /XA
для исключения файлов с определенным атрибутом.

Например, чтобы включить или исключить файлы с пометкой «Только для чтения»:

 # Исключить все файлы, доступные только для чтения
robocopy d:\testfiles c:\temp\dst /XA:R
# Копируем только файлы, доступные только для чтения
robocopy d:\testfiles c:\temp\dst /IA:R 

Вы можете комбинировать все параметры фильтра, если хотите. В приведенном ниже примере копируются все файлы, содержащие имя sep
, как расширение .log
и не помечен как доступный только для чтения.

 robocopy d:\testfiles c:\temp\dst *sep* *.log /XA:R 


Копировать содержимое без пустых каталогов

Копирование пустых папок не всегда желательно. Чтобы исключить пустые папки, мы можем использовать переключатель /s
. Таким образом не будут копироваться пустые папки:

 robocopy d:\testfiles c:\temp\dst /s 


Папка исключения Robocopy

 robocopy d:\testfiles c:\temp\dst /e /xd "папка a" "папка c" 

robocopy exclude folders

robocopy исключить папки


Копия на основе возраста файла

Фильтрация файлов по возрасту также является распространенным методом, используемым в Robocopy. Мы можем использовать переключатели /MINAGE
и /MAXAGE
для фильтрации. /MAXAGE
например, полезно, когда вы хотите скопировать только файлы, которым несколько дней. Возраст можно указать только в днях.

 # Копировать файлы, созданные на прошлой неделе
robocopy d:\testfiles c:\temp\dst /MAXAGE 7 

Или, если вы хотите переместить все файлы старше года, вы можете сделать:

 # Переместить все файлы старше года
#
# ПРИМЕЧАНИЕ. Это УДАЛИТ файлы из источника!
#
robocopy d:\testfiles c:\temp\dst /MINAGE 365 /MOVE /E 

Помимо возраста файла, вы также можете фильтровать файлы по дате последнего обращения к файлу. Для этого используйте переключатели /MINLAD
и /MAXLAD
.


Копировать на основе размера файла

Если вы хотите скопировать все файлы размером более 10 МБ или только файлы размером менее 1 МБ, вы можете использовать переключатель Robocopy /max.
и /min
. Размер файла указывается в байтах.

 # Копировать только файлы больше 10Mb
robocopy d:\testfiles c:\temp\dst /MIN:10000000 

robocopy filter file size


Включить безопасность (разрешения)

При копировании файлов на другой диск в формате NTFS мы также можем скопировать права доступа к файлу с помощью /sec
. Если вы используете /copyall
, то безопасность тоже будет скопирована, /sec
то же, что /copy:dats
( Д
ата, А
атрибуты, Т
временные марки, NTF S
Список контроля доступа)

 # Скопировать файл, включая разрешения NTFS
robocopy d:\testfiles c:\temp\dst /SEC 

Если место назначения не является диском в формате NTFS, разрешения будут потеряны.


Копировать все файлы и информацию о папках

/copyall
переключатель в Robocopy указывает только, какие атрибуты копировать из файлов (все). По умолчанию копируются только данные и атрибуты папок. Так же можно скопировать временные метки папок, для этого нужно будет указать /dcopy:dat
.

Если мы объединим их, то сможем скопировать все файлы и информацию о папках:

 # Скопировать всю информацию о файлах и папках
robocopy d:\testfiles c:\temp\dst /copyall /dcopy:dat 


Копировать в сетевой путь

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

При копировании файлов по сети рекомендуется использовать полные пути UNC вместо подключенных дисков.

Robocopy Network Transfer
 # Скопировать все файлы и папки в общий сетевой ресурс и ограничить пропускную способность на 50%
robocopy d:\testfiles \\la-srv-lab02\temp$\dst /copyall /e /ipg:25 /zb /r:3 /w:1 

Еще один хороший способ передачи данных по сети — запланировать ее в нерабочее время. С помощью Robocopy мы можем указать время между запуском задания. Для этого мы будем использовать /RH
выключатель.

 robocopy d:\testfiles \\la-srv-lab02\temp$\dst /copyall /e /rh:1900-0600 /zb /r:3 /w:1 

robocopy network path

Запланировать задание Robocopy

На скриншоте выше видно, что задание приостановлено до 19:00.


Увеличение скорости копирования с помощью многопоточности

Многопоточность позволяет одновременно копировать больше файлов. По умолчанию установлено значение 8, но вы можете увеличить его до 128. Так что давайте установим его как можно выше, не так ли? Ну, это еще не все. Насколько высоко вы можете установить многопоточность в Robocopy, зависит от исходных и целевых ресурсов. Чем больше у вас дисков (и IOPS), тем больше файлов может одновременно обрабатывать сервер. Но также необходимо учитывать ЦП, память и пропускную способность.

В целом можно сказать, если у вас много мелких файлов, то стоит увеличить многопоточность. Если у вас есть основные большие файлы, может быть лучше уменьшить количество потоков.

Я провел быстрый тест с 2500 файлами, скопировав их с одного SSD диска на другой на том же устройстве:

  • 8 потоков > 0,72 секунды
  • 16 потоков > 0,31 секунды
  • 128 тем > 0,48 секунды

Цифры выше должны дать вам представление. Если вам нужно скопировать большой объем данных, рекомендуется провести несколько тестов, чтобы выяснить, какое количество является оптимальным для вашей среды.

Зеркальный каталог со всеми свойствами файлов

В предыдущем примере не отражены свойства файла исходного каталога (ACL, владелец, метка времени и т. д.). Чтобы отразить и включить свойства файла, используйте эту команду.

 robocopy c:\source c:\it\dst /e /mir /copyall 
robocopy mirror with copyall

После выполнения команды /mir /copyall «метка» будет удалена из папки it\dst\accounting.

folder security properties

Исключить каталог

Чтобы исключить каталог, используйте параметр /XD.

 robocopy C:\source \\srv-vm2\share /XD /e "c:\source\accounting" 

В этом примере я скопирую все, кроме «бухгалтерской папки». Вы можете видеть ниже, что место назначения не включает папку «бухгалтерский учет».

exclude a directory

Проверка копии файла без реальных изменений

Вы можете протестировать копию файла с помощью команды /l. Это отличный способ протестировать команду без внесения каких-либо реальных изменений, она покажет вам, что бы она сделала.

Вот пример.

 robocopy c:\share c:\it\dst /l 

Как вы можете видеть ниже, эта команда скопировала бы один каталог.

robocopy /l command

Я проведу еще один тест и включу параметр /e.

 robocopy c:\share c:\it\dst /e /l 

На этот раз тест показал, что копируется множество файлов и каталогов.

robocopy list only example

Команда /l — отличная команда, помогающая понять, что она могла бы сделать, не внося никаких реальных изменений.

Ключи

/S :: Копировать вложенные папки, кроме пустых.
/E :: Копировать вложенные папки, включая пустые.
/LEV:n :: Копировать только верхние n уровни исходного дерева папок.
/Z :: Копирование файлов с заменой.
/B :: Копирование файлов в режиме архивирования.
/ZB ::используется режим со снятием; если доступ запрещен, используется режим архивации.
/EFSRAW :: Копирование всех зашифрованных файлов в протоколе EFS RAW.
/COPY: флаги предлагает :: что копируется для файлов (по умолчанию /COPY:DAT).
(флаги предлагаются: D=Данные, A=Атрибуты, T=Метки времени).
(S=Безопасность=NTFS ACL, O=Сведения о владельце, U=Сведения аудита).
/DCOPY:T :: Копирование меток времени папки.
/SEC :: Копировать файлы с параметрами безопасности (эквивалентно /COPY:DATS).
/COPYALL :: Копировать все сведения о файле (эквивалентно /COPY:DATSOU).
/NOCOPY :: Не копировать никаких обнаруженных файлов (удобно использовать с параметром /PURGE).
/SECFIX :: Исправлять параметры безопасности для всех файлов, даже непропущенных.
/TIMFIX :: Изменяем атрибуты времени для всех файлов, даже пропущенных.
/PURGE :: Удалять файлы и папки, в которых больше не существует в источнике.
/МИР :: Создать зеркало дерева папок (эквивалентно /E с /PURGE).
/MOV :: Перемещать файлы (удаление из источника после сайта).
/MOVE :: Переместить файлы и папки (удаление из источника после размещения).
/A+:[RASHCNET] :: Добавить заданные атрибуты скопированным файлом.
/A+:[RASHCNET] :: Удалять заданные атрибуты из скопированных файлов.
/CREATE :: Создать только дерево папок и файлы нулевой коллекции.
/FAT :: Создавать файлы только в формате 8.3 FAT.
/256 :: Отключить поддержку длинных путей ( > 256 знаков).
/MON:n :: Наблюдать за звуком; перезапустить после N изменений.
/MOT:m :: Наблюдать за звуком; перезапустить через минуту, если произошли изменения.
/RH:hhmm-hhmm :: Часы запуска — время, когда можно запускать новое начинается.
/PF :: Проверять часы запуска по файлам (не по проходам).
/IPG:n :: Интервал между пакетами (мс) для снижения нагрузки на сеть при низкоскоростных подключениях.
/SL: обнаруживаются автоматические символические ссылки вместо ссылки на целевой объект этой ссылки.

Параметры выбора файлов:

Параметры повторных попыток:

/R:n :: число повторных попыток для неудавшихся копий: по умолчанию — 1 миллион.

/W:n :: Время ожидания между повторными попытками: по умолчанию — 30 секунд.

/REG :: Сохранить /R:n и /W:n в реестре как параметры по умолчанию.

/TBD :: Ждать, пока будут определены имена общих ресурсов (ошибка повторной попытки 67).

Параметры ведения журнала:

/L :: Только список — файлы не копируются, не удаляются, не помечаются метками времени.

/X :: Сообщать обо всех дополнительных файлах, а не только о выбраных.

/V :: Подробный вывод с указанием пропущенных файлов.

/TS :: Включать в вывод метки времени исходных файлов.

/FP :: Включать в вывод полные пути файлов.

/BYTES :: Печатать размеры в байтах.

/NS :: Без размера — не заносить в журнал размер файлов.

/NC :: Без класса — не заносить в журнал классы файлов.

/NFL :: Без списка файлов — не заносить в журнал имена файлов.

/NDL :: Без списка папок — не заносить в журнал имена папок.

/NP :: Без хода процесса — не отображать число скопированных %.

/ETA :: Показывать оценку времени окончания копирования файлов.

/LOG: файл :: Записывать состояние в файл журнала (перезаписывать существующий журнал).

/LOG+: файл :: Записывать состояние в файл журнала (добавлять к существующему журналу).

/UNILOG: файл :: Записывать состояние в файл журнала в формате Юникод (перезаписывать существующий журнал).

/UNILOG+: файл :: Записывать состояние в файл журнала в формате Юникод (добавлять к существующему журналу).

/TEE :: Направлять выходные данные в окно консоли и в файл журнала.

/NJH :: Без заголовка задания.

/NJS :: Без сведений о задании.

/UNICODE :: Cостояние вывода в формате Юникод.

/JOB: имя_задания :: Взять параметры из указанного файла задания.

/SAVE: имя_задания :: Сохранить параметры в указанный файл задания

/QUIT :: Выйти после обработки командной строки (для просмотра параметров).

/NOSD :: Не указывается исходная папка.

/NODD :: Не указывается папка назначения.

/IF :: Включить следующие файлы.

Robocopy является утилитой командной строки, поэтому для удобства пользования Microsoft Technet предоставляет графическую оболочку для неё (GUI front-end), автор которой Дерк Бениш. Оболочка требует наличия . NET Framework 2.0.

File and Folder Security with the Mirror Command

As mentioned above, there is a unique behavior related to security permissions and destination directories. When using the mirror switch, you might find that the file permissions themselves are not changed, only destination folder permissions. This is by design as for performance, and for practical reasons, individual file permissions were not intended to be copied using the mirror command.

What does this look like in practice? Let’s take the example source directory folder structure like so:

  • Folder1
    • File1 – Unique permissions
    • File2
  • Folder2
    Unique permissions

    • File1
    • File2 – Unique permissions
  • Folder1
    • File1
    • File2
  • Folder2
    Unique permissions

    • File1
    • File1
    • File2

Of course, there are plenty of scenarios where you would like the permissions to be copied and kept in sync; those scenarios will be explored in further detail later on in the article.

Copy Contents With Security (ACL Permissions)

If you have modified the permissions on files and folders and want to keep those permissions, you need to use the

/copy:DATS robocopy list only example
option. This does not copy owner information, see example 4 to include the owner.

robocopy /l command

 Here is a screenshot comparing the permissions on one of the folders. On the source, I modified the permissions on the accounting folder. You can see these permissions copied over to the destination folder. 

robocopy c:\share c:\it\dst /e /l

Copy Files With Security Including Owner

To include the owner of a file or folder use the /copy:DATSO command.

 robocopy c:\share c:\it\dst /e /copy:DATSO 

Вот снимок экрана, показывающий, что информация о владельце была скопирована в папку назначения. Без этой команды папка унаследовала бы информацию о владельце.

file owner information

Сохранить вывод в файл журнала

Чтобы записать вывод robocopy в файл журнала, используйте /log:logfile. Это будет перезаписывать файл журнала каждый раз, когда вы запускаете команду.

 robocopy c:\source \\srv-vm2\share /z /e /log:c:\it\logs.txt 

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

robocopy log file example

Журнал робокопии

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

Опции журнала Robocopy

Можно даже определить, что регистрировать, а что нет, например, не регистрировать каталоги. Вы можете найти все варианты здесь
в документации.

Использование лог-файлов действительно рекомендуется, когда вы запускаете Robocopy без присмотра. Это дает вам возможность впоследствии проверить наличие ошибок, даже если консоль закрыта. Также рекомендуется использовать файлы журнала при передаче большого количества данных. Таким образом, вы можете легко проверить наличие проблем с копированием.

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

 robocopy d:\testfiles \\la-srv-lab02\temp$\dst /copyall /e /log:c:\temp\dst.log /zb /r:3 /w:1 

Использование Robocopy /mir на практике

Существует множество различных способов использования команды Robocopy /mir, и определенные способы поведения со временем изменились. Эти изменения в первую очередь связаны с копированием разрешений безопасности файлов, которые стали проще в версии Robocopy для Vista.

Отражение простого каталога в место назначения

Один из самых простых способов воспользоваться командой зеркала — просто отразить два каталога на одном сервере. Мы будем использовать два параметра: команду Robocopy /mir и /v
команда для подробного ведения журнала и вывода. Подробная команда полезна, чтобы увидеть, что делает Robocopy, и убедиться, что файлы, которые мы хотим скопировать, делают то же самое.

 robocopy D:\Articles\SourceDirectory\ D:\Articles\DestinationDirectory /mir /v 
Mirror files from a source directory to a destination directory
Зеркальное отображение файлов из исходного каталога в целевой каталог

В зависимости от ваших потребностей это может сработать. Атрибуты файлов копируются вместе с файлами, но параметры безопасности файлов не копируются. Следующий пример, который вы, возможно, захотите увидеть, — как правильно копировать файлы с неповрежденной защитой?

Зеркалирование каталога с разрешениями

Чтобы выполнить аналогичную операцию с зеркалом, но правильно скопировать права доступа к файлам и папкам, нам нужно использовать /sec
и /secfix
команды. /sec
команда скопирует защиту файла для измененных файлов, в то время как /secfix
Команда обновит безопасность для неизмененных файлов. Комбинируя эти команды с /mir
вы эффективно отразите все файлы, папки и разрешения из исходного каталога в место назначения.

test2.txt security properties
свойства безопасности test2.txt

Здесь мы также собираемся модифицировать test3.txt
в папке назначения с разными разрешениями, чтобы продемонстрировать, как разрешения будут правильно копироваться с использованием /sec
и /secfix
переключатели.

test3.txt security properties
свойства безопасности test3.txt
 robocopy D:\Articles\SourceDirectory\ D:\Articles\DestinationDirectory /mir /sec /secfix /v 
Mirror files from a source directory to a destination directory copying security settings as well
Зеркальное копирование файлов из исходного каталога в целевой каталог с копированием настроек безопасности

Глядя на test2.txt
файл, у которого были изменены исходные разрешения, мы увидим, что он скопирован в папку назначения с правильными разрешениями.

test2.txt security properties
свойства безопасности test2.txt

Если мы проверим test3.txt
у которого были изменены права доступа к целевому каталогу, мы обнаружим, что файл теперь вернулся к тем разрешениям, которые были у исходного каталога.

test3.txt security properties
свойства безопасности test3.txt

Что такого особенного в Robocopy /mir?

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

Чтобы убедиться, что у нас не закончилось место для хранения, идеальной операцией переноса является копирование и очистка. Эта операция гарантирует, что все файлы в исходном каталоге попадут в целевой каталог, и удалит все целевые файлы, которых нет в исходном каталоге. Именно для таких сценариев и предназначен переключатель Robocopy /mir!

Функционально Robocopy /mir эквивалентен /e /purge
варианты в Robocopy с небольшой разницей в поведении. С /e /purge
параметры, параметры безопасности целевых каталогов не перезаписываются. При использовании /mir
параметр, параметры безопасности для целевого каталога перезаписываются.

/mir
наряду с несколькими другими командами разрушают данные при неправильном использовании. Это потенциально может удалить файлы в целевом каталоге, поэтому используйте его с осторожностью!

Копирование файлов по сети

Копирование файлов по сети аналогично локальному копированию. Есть несколько дополнительных команд, которые могут помочь с передачей файлов по сети, я расскажу о них далее. При копировании на удаленное устройство лучше использовать путь UNC вместо сопоставленного диска.

 robocopy c:\source \\srv-vm2\share /z /e 

Приведенная выше команда копирует файлы с моего локального компьютера на другой сервер. Параметр /z копирует файлы в перезапускаемом режиме. Если копирование прерывается, robocopy может продолжить с того места, где оно было прервано.

Включить подробное ведение журнала

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

 robocopy c:\source \\srv-vm2\share /v 

Включите подробное ведение журнала с файлом журнала.

 robocopy c:\source \\srv-vm2\share /v /log:c:\it\logs.txt 

Копировать содержимое, включая пустые подкаталоги

 robocopy c:\share c:\it\dst /e 

Вот скриншот команды с моего компьютера.

robocopy include empty directories

Вот сравнение папок. На этот раз папка назначения выглядит так же, как исходная папка.

empty directory folder comparison

Часто задаваемые вопросы

Чтобы ускорить процесс копирования, лучше всего перенаправить вывод в лог-файлы. Вывод его на консоль замедлит процесс копирования. Также, если у вас есть стабильное и надежное сетевое соединение, вы можете не использовать /z
(режим перезапуска). Увеличьте количество нитей до 16 с помощью /mt:16
, установка слишком высокого значения может привести к задержке.

Копировать всю информацию о файле

Чтобы скопировать все свойства файла, используйте /copyall, это эквивалентно /copy:DATSOU. Я предпочитаю использовать /copyall вместо перечисления каждого типа свойства.

 robocopy c:\share c:\it\dst /e /copyall 
  • Д – Данные
  • А – Атрибуты
  • T – Временные метки
  • S – список управления доступом (ACL) NTFS
  • O – Информация о владельце
  • U – Аудиторская информация

Многопоточное копирование файлов (увеличение скорости копирования)

По умолчанию robocopy использует 8 потоков. Чтобы увеличить количество потоков, используйте команду /mt. В приведенном ниже примере будет использоваться 32 потока.

 robocopy c:\source \\srv-vm2\share /z /e /mt:32 

Вам необходимо протестировать этот параметр и посмотреть, какое количество потоков лучше всего работает в вашей сети и на вашем компьютере.

Копировать файлы старше 14 дней

При этом будут скопированы файлы с временной отметкой не менее 14 дней.

 ROBOCOPY C:\source \\srv-vm2\share /minage:14 

Добавление к существующему файлу журнала

Используйте команду /log+:logfile для добавления существующего файла журнала. Это будет добавляться в файл журнала каждый раз, когда вы запускаете robocopy.

 robocopy c:\source \\srv-vm2\share /z /e /log+:c:\it\logs.txt