Главная Кейсы Блог Связаться
Все статьи
2026-05-15 ⏱ 6 мин
BackupWindows ServerRobocopyPowerShell

Robocopy: инкрементальный бэкап файлового сервера без стороннего ПО

Встроенный инструмент Windows который заменяет платные решения для бэкапа файловых шар. Копирует только изменения, сохраняет права NTFS, ведёт лог.

Зачем Robocopy если есть Veeam

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

Покупать отдельное ПО для этого — лишнее. Robocopy встроен в Windows Server и справляется отлично.

Что умеет Robocopy

  • Копирует только изменённые файлы (delta-sync)
  • Сохраняет NTFS-права и атрибуты
  • Ведёт подробный лог каждой операции
  • Работает через планировщик задач без вмешательства
  • Сохраняет историю удалённых файлов в отдельную папку

Базовый скрипт

powershell
$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 удаляет файлы которых нет в источнике. Если сотрудник случайно удалил документ — он пропадёт и из бэкапа.

Решение — сохранять удалённые файлы отдельно:

powershell
$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 и добавляем задание:

powershell
$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 и выше — ошибки:

powershell
# ... (запуск 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 — это отдельная тема для следующей статьи.

Если нужно настроить бэкап под ваши задачи — обращайтесь.