Резервное копирование. Бюджетный вариант

Цель статьи

Поделиться опытом построения бюджетной системы резервирования файлов сервера Windows штатными средствами

Начальные условия

  • Терминальный Windows 2008 Server. Сетевое имя master
  • Бекап-сервер на базе FreeBSD 10.3. Сетевое имя bs

Предполагается, что

  • Резервное копирование выполняется один раз в сутки
  • Администратор обладает достадочным уровнем знаний, чтобы установить FreeBSD или любой другой unix с поддержкой zfs на бекап-сервер
  • Администратор может установить и настроить пакет Samba
  • Администратор может ввести бекап-сервер в домен, хотя это и не обязательно
  • На бекап-сервере имеется достадочное количество дискового пространства

Как это работает

  • На master’е по таймеру запускаем wbadmin
  • По окончании на bs по крону создаем снимок раздела с данными за текущее число
  • Удаляем устаревшие снимки
  • Папка со снимками доступна в сети на чтение. Администратор может выполнить восстановление

Резервное копирование

Резервировать будем диски C,J, SystemState. Для этого на master’е создадим файл make_backup.bat и напишем внутри его команду

WBADMIN START BACKUP -backupTarget:\\bs\master -include:c:,j: -allCritical -user:Administrator -password:*********** -vssFull -quiet

Штатным Task Scheduler настроим выполнение команды make_backup.bat в нужные дни и время

Подготовка бекап-сервера

Создание zfs пула

Воспользуемся способностью zfs создавать снимки файловых систем. В нашем случае одни сутки — один снимок с указанием даты. Количество сохраняемых снимков ограничивается лишь дисковым пространством пула бекап-сервера

Из четырех дисков, что есть в наличии создадим zfs пул с именем backup

zpool create backup raidz ada1 ada2 ada3 ada4

В пуле backup создадим новую файловую систему backup и папку master, где будут размещаться резервные копии с сервера master

zfs create backup/backup
cd /backup && mkdir master && chmod 777 master

В результате после выполнения команды ls -la мы должны увидеть две папки

dr-xr-xr-x 4 root wheel 4 Feb 6 2015 .zfs
drwxrwxrwx 7 root wheel 7 May 22 19:57 master

В первой будут хранится снимки в данными, во второй данные последнего резервирования. Именно в этой папке данные будут перезаписываться всякий раз, когда на master’е выполняется wbadmin

Настройка Samba

Даю smb4.conf сервера входящего в домен

workgroup = FIRMA
netbios name = BS
server string = BACKUP SERVER
hosts allow = 192.168.12. 127.
guest account = nobody
log file = /var/log/samba4/log.%m
max log size = 50
security = ads
map to guest = Bad User
password server = *
encrypt passwords = yes
realm = FIRMA.LOCAL
socket options = IPTOS_LOWDELAY TCP_NODELAY SO_KEEPALIVE SO_SNDBUF=262144 SO_RCVBUF=131072
interfaces = net0
local master = no
os level = 33
domain master = no
preferred master = no
dns proxy = yes
client NTLMv2 auth = yes
wins support = no
ldap ssl = no
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind use default domain = yes
template shell = /bin/tcsh
winbind uid = 10000-20000
winbind gid = 10000-20000
winbind enum users = yes
winbind enum groups = yes
winbind cache time = 3600
guest ok = yes
map archive = no

#============================ Share Definitions ==============================

[master]
comment = Backup folder for MASTER only
path = /backup/master
valid users = @"FIRMA\domain admins" @"FIRMA\Backup Operators"
hosts allow = 192.168.12.2
browseable = yes
writeable = yes
create mask = 0660
directory mask = 0770

[master_snapshot]
path = /backup/.zfs/snapshot
valid users = @"FIRMA\domain admins" @"FIRMA\Backup Operators"
browseable = yes
read only = yes

Запускаем samba и смотрим со стороны сервера master. Папки \\bs\master и \\bs\master_snapshot должны быть видны в сетевом окружении и  доступны для чтения. Кроме того папка \\bs\master доступна для записи для групп FIRMA\domain admins и FIRMA\Backup Operators

Снимки

Для создания и удаления снимков использую следующий скрипт, который запускается по крону на бекап-сервере. Снимок созданый 10 дней назад удаляется

#!/bin/sh
ZPOOL='backup'
BACKUP_DATE=`date "+%Y-%m-%d"`
LAST_DATE=`date -v-10d "+%Y-%m-%d"`

zfs snapshot $ZPOOL@$BACKUP_DATE
zfs destroy $ZPOOL@$LAST_DATE > /dev/null 2>&1

Просмотреть уже созданные снимки можно командой

zfs list -t snapshot -o name

или

ls -la /backup/.zfs/snapshot/

drwxr-xr-x 7 root wheel 7 Jul 2 2016 2017-05-14/
drwxr-xr-x 7 root wheel 7 Jul 2 2016 2017-05-15/
drwxr-xr-x 7 root wheel 7 Jul 2 2016 2017-05-16/
drwxr-xr-x 7 root wheel 7 Jul 2 2016 2017-05-17/
drwxr-xr-x 7 root wheel 7 Jul 2 2016 2017-05-18/
drwxr-xr-x 7 root wheel 7 Jul 2 2016 2017-05-19/
drwxr-xr-x 7 root wheel 7 Jul 2 2016 2017-05-20/
drwxr-xr-x 7 root wheel 7 Jul 2 2016 2017-05-21/
drwxr-xr-x 7 root wheel 7 Jul 2 2016 2017-05-22/
drwxr-xr-x 7 root wheel 7 Jul 2 2016 2017-05-23/

Восстановление

Удобнее всего это делать при помощи графического приложения Windows Server Backup. Например нужно восстановить файлы за 14 мая 2017 года. Для этого в мастере восстановления нужно указать сетевую папку \\BS\master_snapshot\2017-05-14\master. Мастер прочитает содержимое резервной копии и предложит варианты восстановления. Далее все тривиально

Если бекапится терминальный сервер и в политиках OU (organization unit) домена указано, что никто кроме владельца (конкретного терминального пользователя) не имеет прав на папки Desktop, Documents, Downloads и т.д., то при желании administrator’а вернуть что-либо из этих папок при помощи Windows Server Backup получим следующую картину

резервное копирование

Пусто! В любой папке профиля пользователя пусто. Но не нужно расстраиваться, выход есть. Каждый диск сервера это отдельный vhd-файл (читай zip-файл) в папке WindowsImageBackup. Открываем его обычным 7-zip’ом и восстанавливаем копированием

резервное копирование

Видно, что в папке Desktop есть документы пользователя

Вывод

  1. В данной схеме затраты на резервное копирование сводятся лишь к покупке бекап-сервера. Вполне может подойти десктопный компьютер с необходимым количеством дисков
  2. Вся программная часть выполняется штатными средствами операционных систем
  3. Схему можно адаптировать для резервирования данных с других серверов по rsync или nfs
  4. В zfs есть возможность использовать компрессию и дедупликацию, что позволит сэкономить дисковое пространство

Александр Черных
системный администратор

Статьи по теме