Зачем Robocopy если есть Veeam
Veeam отлично бэкапит виртуальные машины целиком. Но есть задача попроще: нужно каждую ночь копировать файловые шары (бухгалтерия, документы, проекты) на отдельный диск или NAS.
Покупать отдельное ПО для этого — лишнее. Robocopy встроен в Windows Server и справляется отлично.
Что умеет Robocopy
- Копирует только изменённые файлы (delta-sync)
- Сохраняет NTFS-права и атрибуты
- Ведёт подробный лог каждой операции
- Работает через планировщик задач без вмешательства
- Сохраняет историю удалённых файлов в отдельную папку
Базовый скрипт
$Source = "\\SRV-FILE\Share"
$Destination = "D:\Backup\Share"
$LogFile = "D:\Backup\Logs\robocopy_$(Get-Date -Format 'yyyy-MM-dd').log"
robocopy $Source $Destination `
/MIR `
/COPYALL `
/R:3 `
/W:10 `
/LOG:$LogFile `
/NP `
/TEE
Ключи:
/MIR— зеркало: копирует новые, обновляет изменённые, удаляет то чего нет в источнике/COPYALL— копирует всё включая права NTFS, владельца, аудит/R:3— 3 попытки при ошибке/W:10— 10 секунд между попытками/LOG— пишет лог в файл/TEE— дублирует вывод в консоль
Бэкап с историей удалённых файлов
/MIR удаляет файлы которых нет в источнике. Если сотрудник случайно удалил документ — он пропадёт и из бэкапа.
Решение — сохранять удалённые файлы отдельно:
$Source = "\\SRV-FILE\Share"
$Destination = "D:\Backup\Share"
$Archive = "D:\Backup\Deleted\$(Get-Date -Format 'yyyy-MM-dd')"
$LogFile = "D:\Backup\Logs\robocopy_$(Get-Date -Format 'yyyy-MM-dd').log"
# Сначала архивируем то что будет удалено
robocopy $Destination $Archive `
/E /COPYALL /R:1 /W:5 `
/XO `
/LOG+:$LogFile
# Потом синхронизируем
robocopy $Source $Destination `
/MIR /COPYALL /R:3 /W:10 `
/LOG+:$LogFile /NP
Теперь папка Deleted\2026-05-15 содержит все файлы которые были удалены за этот день.
Автоматизация через планировщик
Сохраняем скрипт как backup.ps1 и добавляем задание:
$Action = New-ScheduledTaskAction -Execute 'powershell.exe' `
-Argument '-NonInteractive -File D:\Scripts\backup.ps1'
$Trigger = New-ScheduledTaskTrigger -Daily -At '02:00AM'
$Settings = New-ScheduledTaskSettingsSet -RunOnlyIfNetworkAvailable
Register-ScheduledTask `
-TaskName 'FileServer Backup' `
-Action $Action `
-Trigger $Trigger `
-Settings $Settings `
-RunLevel Highest `
-User 'SYSTEM'
Каждую ночь в 02:00 бэкап запускается автоматически.
Уведомление об ошибках на почту
Robocopy возвращает код завершения. 0 и 1 — успех, 8 и выше — ошибки:
# ... (запуск robocopy) ...
if ($LASTEXITCODE -ge 8) {
Send-MailMessage `
-To 'admin@company.ru' `
-From 'backup@company.ru' `
-Subject "ОШИБКА бэкапа $(Get-Date -Format 'dd.MM.yyyy')" `
-Body "Robocopy завершился с кодом $LASTEXITCODE. Проверьте лог: $LogFile" `
-SmtpServer 'mail.company.ru'
}
Итог
Этот подход работает у меня на нескольких объектах уже несколько лет. Никакого стороннего ПО, никаких лицензий. Файловый сервер на 500 ГБ синхронизируется за 5–10 минут — копируются только изменения.
Для бэкапа виртуальных машин использую Veeam — это отдельная тема для следующей статьи.
Если нужно настроить бэкап под ваши задачи — обращайтесь.