UMGUM.COM 

Bacula + Windows "System State" backup ( Резервное копирование "состояния системы" и системных файлов ОС "Microsoft Windows Server" посредством Bacula. )

12 ноября 2018  (обновлено 24 января 2019)

OS: "MS Windows Server 2003/2008/2012/2016".
Application: "Bacula 5.2/7.4", "ntbackup" или "wbadmin".

Задача: наладить выгрузку резервной копии набора системных настроек ("состояния системы") операционной системы "Microsoft Windows Server" посредством "Bacula".

В ОС Linux практически все системные настройки сосредоточены в файлах директории "/etc" - их достаточно, чтобы при необходимости воссоздать конфигурацию операционной системы и её сервисов. С "Microsoft Windows" совсем не так всё просто - её конфигурация разбросана по такому количеству закоулков файловой системы, что нет иного способа её сохранения, кроме как копирование содержимого всех системных директорий (вместе с исполняемыми файлами и библиотеками ресурсов), включая "реестры". При этом нужно учитывать, что сервисы, запущенные в "MS Windows", часто хранят свои конфигурации в своих специфичных местах, и резервная копия состояния несущей операционной системы скорее всего их не затронет. Тем не менее, из соображений общей полезности, наладим выгрузку "состояния системы".


Предварительная настройка операционной системы.

В операционной системе должен быть исправна подсистема "теневого копирования" VSS (Microsoft Volume Snapshot Service, Shadow Copy), позволяющая обращаться к открытым и заблокированным файлам - без этого выгрузка "состояния системы" невозможна.

В системах "MS Windows Server WinNT/2000/2003" резервная копия "состояния системы" снимается посредством отдельно стоящей утилиты "NTBackup" - она поставляется в комплекте и её установка не требуется. В среднем архив резервной копии занимает в файловой системе 500-700MB.

В современных "MS Windows Server 2008/2012/2016" прежний способ убрали, введя для задач резервного копирования целый сервис, в виде отдельного компонента "Windows Server Backup/Система архивации данных") - его нужно установить. Для управления сервисом используется утилита "WBAdmin". Для размещения архива резервной копии необходимо зарезервировать 10-15GB свободного места в файловой системе.

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

Конфигурирование "Bacula".

Дополняем описание задания резервного копирования "состояния системы" следующими блоками конфигурации, в зависимости от типа системы.

Для старых представителей ОС "MS Windows Server WinNT/2000/2003":

# vi /etc/bacula/client.d/example.net.conf

....
FileSet {
....

  Include {
    ....

    # Директория архива "состояния системы"
    File = "C:/bacula-ntbackup"
  }
}
....

Job {
  Name = "example.net"
  Type = Backup
  ....

  # Запуск выгрузки резервной копии "состояния системы" "MS Windows Server WinNT/2000/2003" посредством "NTBackup":
  RunScript {
    RunsWhen = Before
    FailJobOnError = No

    # Зачищаем и воссоздаём место для сохранения архива резервной копии
    Command = "if exist C:\\bacula-ntbackup rmdir /s /q C:\\bacula-ntbackup"
    Command = "mkdir C:\\bacula-ntbackup"

    # Запускаем выгрузку резервной копии "состояния системы"
    # (гарантируя читаемость уведомлений используем английскую кодовую таблицу - 437)
    Command = "if [%l]==[Full] (chcp 437 & ntbackup.exe backup systemstate /J \"Windows State Backup\" /F \"C:\\bacula-ntbackup\\system_state_backup.bkf\" /R:yes /L:f /SNAP:on)"
  }
  #
  RunScript {
    RunsWhen = After
    RunsOnFailure = yes

    # По завершению всех процедур задания высвобождаем ресурсы
    Command = "if exist C:\\bacula-ntbackup rmdir /s /q C:\\bacula-ntbackup"
  }
}

Для нового семейства ОС "MS Windows Server 2008/2012/2016":

# vi /etc/bacula/client.d/example.net.conf

....
FileSet {
....

  Include {
    ....

    # Директория архива "состояния системы"
    File = "C:/bacula-wbadmin"
  }
}
....

Job {
  Name = "example.net"
  Type = Backup
  ....

  # Запуск выгрузки резервной копии "состояния системы" и системных файлов "MS Windows Server 2008/2012/2016" посредством "WBAdmin":
  RunScript {
    RunsWhen = Before
    FailJobOnError = No

    # Зачищаем и воссоздаём место для сохранения архива резервной копии
    Command = "if exist c:\\bacula-wbadmin rmdir /s /q c:\\bacula-wbadmin"
    Command = "mkdir c:\\bacula-wbadmin"

    # Запускаем выгрузку резервной копии "состояния системы"
    # (гарантируя читаемость уведомлений используем кодовую таблицу UTF8 - 65001)
    Command = "if [%l]==[Full] (chcp 65001 & wbadmin start systemstatebackup -quiet -backupTarget:\\\\localhost\\c$\\bacula-wbadmin)"
  }
  #
  RunScript {
    RunsWhen = After
    RunsOnFailure = yes

    # По завершению всех процедур задания высвобождаем ресурсы
    Command = "if exist c:\\bacula-wbadmin rmdir /s /q c:\\bacula-wbadmin"
  }
}

Проверяем корректность конфигурации и применяем таковую:

# bacula-dir -c /etc/bacula/bacula-dir.conf -t
# /etc/init.d/bacula-dir reload


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )