Robocopy: рекомендации по работе с этой полезной утилитой для Windows
Как человек, выросший на старой DOS-команде «копировать», я часто прибегаю к копированию, когда мне нужно скопировать только несколько файлов. Однако в состав Windows входит еще одна утилита копирования файлов под названием Robocopy. Robocopy намного превосходит старую команду копирования и хорошо подходит для выполнения больших или сложных операций копирования файлов.
Однако какой бы полезной ни была Robocopy, ее использование может быть немного сложным. Вход в Robocopy /? Команда показывает десятки переключателей командной строки. Если вы не используете Robocopy на регулярной основе, иногда может быть сложно определить, какие переключатели лучше всего подходят для выполнения поставленной задачи. В таком случае я хотел воспользоваться возможностью, чтобы объяснить переключатели, которые я обычно использую чаще всего. Имейте в виду, что это ни в коем случае не предназначено для всестороннего обсуждения доступных переключателей командной строки, а скорее для обсуждения некоторых из них, которые я считаю наиболее полезными.
Копирование атрибутов файла
Утилита Robocopy включает переключатель /COPY, который позволяет вам точно указать, какие части файла вы хотите скопировать. Это дает вам способ убедиться, что скопированные данные сохраняют исходную отметку даты и времени, разрешения безопасности и тому подобное.
При использовании переключателя /COPY необходимо указать один или несколько флагов, указывающих Robocopy, что копировать. Эти флаги:
Д – Данные
А - Атрибуты
T – временные метки
S — безопасность ACL-списка NTFS
О - владелец
U - информация аудита
Хорошая вещь в том, что вам доступно так много флагов, заключается в том, что это позволяет очень детально контролировать процесс копирования. Недостатком, однако, является то, что использование такого количества различных флагов может быть утомительным. К счастью, есть несколько доступных ярлыков.
Если вы хотите сохранить наиболее часто используемые компоненты (данные, атрибуты, отметку времени и безопасность), вы можете использовать переключатель /SEC. Он делает то же самое, что и при использовании /COPY:DATS.
Если вы похожи на меня и хотите сохранить все различные атрибуты файла, то вместо этого вы можете использовать переключатель /COPYALL. Это эквивалентно использованию /COPY:DATSOU
Подкаталоги
Если вы собираетесь копировать группу файлов, есть большая вероятность, что вам также потребуется скопировать любые подкаталоги, которые могут присутствовать. Вы можете указать Robocopy скопировать эти подкаталоги, включив параметр /S. Однако вместо этого я рекомендую использовать ключ /E.
Разница между этими двумя переключателями заключается в том, что если вы используете переключатель /S, то Robocopy будет копировать только подкаталоги, содержащие данные, но проигнорирует любые пустые подкаталоги. Хотя в некоторых ситуациях это может быть хорошо, моя философия всегда заключалась в том, что даже если подкаталог пуст, есть причина, по которой он существует. Возможно, приложение время от времени обращается к этому подкаталогу, чтобы узнать, существует ли конкретный файл. Использование ключа /E вместо ключа /S гарантирует, что результирующая копия будет иметь структуру каталогов, полностью имитирующую структуру исходных данных.
Предотвращение ошибок
Неприятно начинать большую операцию копирования, а затем вернуться через несколько часов и обнаружить, что операция по какой-то причине не удалась и что вам нужно начать ее заново. К счастью, Robocopy предоставляет некоторые инструменты для избежания таких неприятных ситуаций.
Первый из этих вариантов называется Restartable Mode. Режим перезапуска можно включить с помощью переключателя /Z, и он хорошо подходит для ситуаций, когда вам нужно копировать большие файлы по потенциально ненадежной сети. Если передача файла не удалась, перезапускаемый режим позволяет возобновить передачу с точки сбоя, вместо того, чтобы требовать ее перезапуска с самого начала.
Второй вариант — использовать резервный режим. Режим резервного копирования можно включить с помощью переключателя /B, и он полезен для устранения ошибок, связанных с разрешениями. Если вы копируете данные пользователя, есть вероятность, что у вас может не быть разрешения на доступ ко всем файлам пользователя. Обычно это приводит к сбою процесса копирования файла.
Режим резервного копирования решает эту проблему, рассматривая процесс копирования файла как операцию резервного копирования, по существу игнорируя любые проблемы, связанные с разрешениями. Однако, чтобы использовать режим резервного копирования, вы должны использовать Robocopy из административной командной строки и иметь права на резервное копирование.
Параметры режима перезапуска и режима резервного копирования являются взаимоисключающими, что означает, что вы можете использовать один или другой, но не оба. Тем не менее, есть способ получить лучшее из обоих миров. Вместо использования переключателя /Z или переключателя /B используйте вместо него /ZB. Это говорит Robocopy использовать режим перезапуска, но переключаться в режим резервного копирования, если возникают проблемы с разрешениями.
Говоря о предотвращении ошибок, я хочу быстро упомянуть переключатели /TIMEFIX и /SECFIX. Эти переключатели указывают Robocopy исправлять ошибки времени и ошибки безопасности в файлах. Robocopy может исправить эти ошибки даже в пропущенных файлах.
Производительность
И последнее, о чем я хотел бы упомянуть, это то, что Robocopy включает в себя переключатель, который вы можете использовать для уменьшения времени, необходимого для завершения процесса копирования. Переключатель называется /MT и используется для указания количества потоков, используемых процессом копирования. По умолчанию Robocopy распределяет процесс копирования по восьми потокам, но вы можете увеличить количество потоков до 128.
Очевидно, что увеличение количества потоков поможет не во всех ситуациях. Например, если устройство хранения работает с максимальной пропускной способностью ввода-вывода, то использование дополнительных потоков не приведет к повышению производительности. Однако в некоторых случаях может помочь использование дополнительных потоков.
Robocopy: множество применений
Хотя легко представить Robocopy как инструмент для копирования файлов из точки А в точку Б, его также можно использовать для миграции. Robocopy может, например, отслеживать изменения в источнике, а затем реплицировать эти изменения в место назначения. Хотя, по общему признанию, есть некоторые сторонние инструменты, которые действительно выводят процесс копирования на новый уровень, Robocopy — отличный выбор, если вы хотите придерживаться собственных инструментов.