Windows. Robocopy.

Простое зеркалирование каталогов

Пример

robocopy F: \\192.168.1.1\F /MIR /COPYALL /Z /B /J /R:3 /W:0

Зеркалирование диска F: в сетевую директорию \\192.168.1.1\F с сохранением всех прав на файлы и возможностью продолжить копирование при обрыве.

Параметры

/MIR – полное зеркалирование каталогов (эквивалентно ключам /e вместе с /purge). Использование ключа /MIR вместе с ключом /E и указанием директории назначения, перезапишет все настройки безопасности в директории назначения.

/COPYALL – копирует всю информацию о файле (Атрибуты, параметры безопасности и т.д.). Как альтернатива, можно применять флаг /COPY:DT для копирования timestamp, а не всей информации. /COPYALL требует прав администратора

/Z – robocopy продолжит копирование файла при обрыве.

/B – позволяет robocopy избегать ошибки access denied error. В этом режиме robocopy игнорирует все права на файлы, которые могли бы помешать прочитать/записать файл. Этот режим требует прав администратора.

/J – копирование без буфера (файлового кэша, оперативной памяти). Эффективно для больших файлов.

/R:3 – количество попыток скопировать недоступный файл. Значение по умолчанию – миллион, поэтому необходимо его сменить.

/W:0 – секунды между попытками скопировать недоступный файл. Значение по умолчанию – 30 секунд.

Синтаксис

robocopy <source> <dest> [фильтр файлов] [параметры]

Копирование по сети с использованием логина и пароля

Вы не сможете просто так скопировать что то используя Robocopy по сети с дополнительной аутентификацией. Robocopy не умеет передавать учетные данные по сети, однако для этих целей можно использовать net use чтобы подключить IPC$ шару и выполнить копирование уже на нее.

Важно! Будут использоваться UNC пути, поэтому исходная и назначения папки должны быть расшарены по сети.

Копирование через cmd

Подключаем сетевую папку через cmd:

NET USE \\RemoteServerName\IPC$ /u:server\user "password" 

Копируем файлы с помощью robocopy:

robocopy \\Source\ \\RemoteServerName\DestinationDir\ /MIR /COPYALL /Z /B /J /R:3 /W:1

Отключаем присоединенную шару:

NET USE \\RemoteServerName\IPC$ /D

Скрипт для Powershell

Содержит параметры для кастомизации

Умеет отправлять е-мэйл по окончании работ

# IPC$ share options                #
$IPCHost = "host_name" # Host name to create IPC$ share with
$IPCUser = "domain\user" # Authentication
$IPCPwd = "Pa$$w0rd" # for IPC$ share
# Copy TO settings #
$DstHost = "host_name" # Destination Host Name
$DstDir = "root_share\folder\name" # Destination Directory Path
# Copy FROM settings #
$SrcHost = "host_name" # Source Host Name
$SrcDir = "root_share\folder\name" # Source Directory Path
# E-Mail Settings #
$LogPath = "c:\full_path.log" # Full path to log file (c:\temp.name.log)
$EmailTo = "email@domain.com" # Recipient email address
$EmailFrom = "email@domain.com" # Sender email address
$EmailSubj = "subject_here" # Letter Subject
$EmailBody = "body_here" # And body
$EmailSmtpSrv = "server_name" # SMTP server name (FQDN)
# Parameters (robocopy keys) #
$Params = "/XD * /Z /MIR" # Specify needed robocopy.exe parameters here
# Action Block #
NET USE \\$IPCHost\IPC$ /u:$IPCUser $IPCPwd
robocopy.exe \\$SrcHost\$SrcDir\ \\$DstHost\$DstDir\ $Params /LOG:$LogPath
NET USE \\$IPCHost\IPC$ /D
Send-MailMessage -To $EmailTo -From $EmailFrom -Subject $EmailSubj -Body $EmailBody -SmtpServer $EmailSmtpSrv -Attachments $LogPath

Убираем атрибут скрытый с папок и файлов при копировании

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

Чтобы этого не происходило при копировании указываем не копировать атрибуты скрытый и системный:

robocopy F: \\192.168.1.1\F /MIR /COPYALL /Z /B /J /R:3 /W:0 /A-:SH

Ссылки

https://klyavlin.wordpress.com/2012/09/19/robocopy-network-usernamepassword/

https://docs.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy

https://winitpro.ru/index.php/2020/05/13/robocopy-sinxronizaciya-i-rezervnoe-kopirovanie-fajlov/

https://learn.microsoft.com/ru-ru/windows-server/administration/windows-commands/robocopy

Оставьте ответ

Ваш адрес email не будет опубликован.

42 ÷ = 7