Windows

Защита данных всегда была критически важной для профессионалов, работающих с Windows. Обычно эта задача решается регулярным выполнением задания резервного копирования, записывающего данные на пленку или диск. Имеющие значительный бюджет крупные ИТ-отделы могут позволить себе приобрести полнофункциональные продукты сторонних поставщиков. Остальным приходится довольствоваться бесплатными средствами резервного копирования, которые предоставляет Microsoft.

Бесплатный инструмент от Microsoft назывался NTBackup, но он уже в прошлом. В Windows Server 2008 появился новый набор средств резервного копирования, и я расскажу вам, насколько просты они в работе. Даже если у вас есть средства резервного копирования сторонних разработчиков, всегда полезно знать, как быстро и без лишних усилий сделать резервную копию штатными средствами. Имейте в виду, что новая утилита не умеет работать с резервными копиями, созданными средствами NTBackup.

Кратко об утилите архивирования

Сначала надо установить утилиту резервного копирования, потому что по умолчанию она не устанавливается. Откройте в диспетчере сервера (Server Manager) Мастер добавления компонентов (Add Features Wizard) и добавьте компонент «Возможности системы архивации данных Windows Server» (Windows Server Backup Features) (рис. 1). Нам нужен подкомпонент, позволяющий использовать команды командной строки, что позволяет использовать Windows PowerShell. Для установки этого подкомпонента можно также использовать средства командной строки так: C:\ servermanagercmd –install backup-features.

*

Рис. 1 Использование мастера добавления компонентов для установки системы архивации данных Windows Server и средств командной строки.

Далее следует указать место, где будут храниться резервные копии. Файлы можно хранить на общем сетевом томе, на локальном томе или выделенном диске. Нельзя копировать данные на пленку, но ввиду широко распространения недорогих подключаемых USB-устройств сейчас это уже не выглядит как серьезный недостаток. Однако есть ряд обстоятельств, которые надо учесть.

Резервное копирование Windows создает существенную дополнительную нагрузку ввиду необходимости создания дополнительных индексов, каталогов и других вспомогательных файлов. Это уже не простое создание ZIP-файла. Не надо рассчитывать, что резервная копия файла общим объемом 100 Кб займет столько же места на диске — ее размер будет существенно больше.

При копировании на сетевую папку надо внимательно отнестись к уровню доступа к файлам, чтобы обеспечить целостность и защиту резервных копий. Также надо иметь в виду, что при копировании в общую сетевую папку, предыдущая резервная копия перезаписывается. Самое простое решение — создавать подпапку для каждой резервной копии. Та же история с размещением резервных копий на локальном томе.

Одно из преимуществ использования сетевой папки или тома состоит в том, что утилита архивации Windows создаст файл с расширением .vhd, содержащий все копируемые файлы. При определении места хранения резервных копий утилита архивации Windows создаст папку верхнего уровня по имени WindowsImageBackup. В этой папке создаются подпапки для каждого компьютера. Версии резервных копий различаются по времени; вот пример имени папки:«Backup 2009-12-14 172606».В этой папке хранятся архивы и VHD- файл. Этот VHD- файл можно подключить в Windows 7 или Windows Server 2008 R2. В зависимости от вида резервной копии и требований по архивации этот файл можно переместить на диск долгосрочного хранения или на DVD-диск.

Самый простой и быстрый вариант — выделенный подключенный диск. Он может внутренним или внешним с интерфейсом USB или FireWire. Microsoft рекомендует, чтобы на диске было в 2,5 раз больше свободного пространства, чем необходимо для создания архива всех архивируемых данных. Диск надо отформатировать и скрыть от обычных инструментальных средств управления — он должен быть доступен только в панели Управление дисками (Disk Management). Поддерживаются диски объемом до 2 Тб.

Создание задания резервного копирования

Утилита архивирования Windows задумана как универсальный инструмент защиты сервера. Можно создать регулярное задание архивирования файлов и состояния системы или обеспечить возможность восстановления целого сервера «с нуля». Microsoft предполагает, что для этой цели создается одно задание. Я предполагаю, что вы используете возможности утилиты архивирования Windows из-за ограниченного бюджета и хотите получить от нее максимально возможную защиту при существующих ограничениях.

Установив утилиту архивирования Windows, в Диспетчере сервера разверните узел «Хранилище» (Storage) и выберите «Архивирование сервера Windows» (Windows Server Backup). В панели Действие (Action), выберите «Задание архивирования» (Backup Schedule) — откроется Мастер архивации по расписанию (Backup Schedule Wizard). На первой странице мастера щелкните Далее (Next).

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

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

На четвертой странице определите, где хранить резервные копии. Microsoft рекомендует использовать выделенный жесткий диск. Имейте в виду, что диск будет переформатирован и недоступен для каких-либо других операций. Можно также использовать локальный или сетевой том. Внимательно ознакомьтесь с предупреждениями и информацией об ограничениях — наверняка вы увидите предупреждение, что выбранный диск будет переформатирован.

Если все диски не видны, щелкните кнопку «Все доступные диски» (Show All Available Disks), чтобы обновить список. Утилита выдаст предупреждение, если вы выберете новый диск. Задав диск, переходят к проверке параметров архивирования. Если что-то не так, используйте кнопку Назад (Previous), чтобы вернуться и устранить ошибку. Если все правильно, должно открыться окно сводки. На следующий день проверьте результаты выполнения задания в узле утилиты архивирования Windows на предмет сообщений об ошибках.

Вы можете также использовать утилиту архивирования Windows для одноразового создания резервной копии. Выберите вариант «Однократная архивация» (Backup Once) в панели Действие (Actions). Вы можете использовать те же параметры, что и у существующего задания, или задать совершенно другие. Если выбрать второй вариант, мастер перезапустится, предоставив возможность ввести новые параметры. Например, скопировать файлы на сетевой том. Помните, что любые существующие резервные копии в той же папке будут перезаписаны. Резервное копирование начинается немедленно. Если же это отдельное задание резервного копирования, которое нужно выполнять часто, рекомендуем создать сценарий командной строки или Windows PowerShell. Я расскажу об этой процедуре позже.

Восстановление данных

Для отслеживания версий утилита архивирования Windows использует метки времени. При выборе команды Восстановление (Recover) запускается мастер, инструкции которого практически самоочевидны. Выберите резервную копию. Мастер восстановления предоставит список всех доступных резервных копий . Выберите нужный архив. В зависимости от типа резервного копирования может быт только один вариант.

Далее указывают данные, которые надо восстановить. Если выбрать «Файлы и папки» (Files and Folders), потребуется указать нужные файлы. К сожалению, выбор файлов из нескольких каталогов практически невозможен. Восстановить все файлы или выбранные файлы одного каталога намного проще. Не забывайте об этом, создавая задание резервного копирования.

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

Использование WBADMIN.EXE

Если установить средства архивирования из командной строки, у вас появляются еще несколько вариантов. Откройте окно командной строки и ознакомьтесь со справкой WBADMIN.EXE. Эту утилиту можно использовать для создания запланированного задания архивирования, но я все-таки думаю, что для выполнения этой задачи графический интерфейс намного удобнее. WBADMIN.EXE полезнее для создания одноразовых заданий резервного копирования. Выполните следующую команду, чтобы увидеть информацию о синтаксисе:

C:\> wbadmin start backup /?

Здесь недостаточно места для рассказа о всех вариантах, но я покажу, как можно использовать эту утилиту для периодического копирования файлов на сетевой том:

@echo off
::Demo-Backup.bat
::demonstration script using WBADMIN.EXE on a Windows Server 2008 R2 Server

rem backup share UNC
set backupshare=\\mycompany-dc01\backup

rem files and folders to include
set include=c:\scripts,c:\files

rem define date time variables for building the folder name
set m=%date:~4,2%
set d=%date:~7,2%
set y=%date:~10,4%
set h=%time:~0,2%
set min=%time:~3,2%
set sec=%time:~6,2%

rem defining a new folder like \\mycompany-dc01\backup\RESEARCHDC\12152009_132532
set newfolder=%backupshare%\%computername%\%m%%d%%y%_%h%%min%%sec%
echo Creating %newfolder%

mkdir %newfolder%

rem run the backup
echo Backing up %include% to %newfolder%
wbadmin start backup -backuptarget:%newfolder% -include:%include% -quiet

rem Clear variables
set backupshare=
set include=
set m=
set d=
set y=
set h=
set min=
set sec=
set newfolder=

Я не хочу перезаписывать существующие резервные копии, поэтому я создаю новую папку с именем компьютера, а имя файла содержит штамп времени. В данном пакетном файле есть весь код, необходимый для решения задачи. Основная функция сценария вызывает WBADMIN.EXE для создания резервной копии в заданном месте. При модификации этого сценария не забывайте поглядывать в справку по синтаксису команды. В этом сценарии мне нравится возможность создавать собственное задание, используя планировщик задач. Мастер архивации позволяет создать только одно задание, а используя WBADMIN.EXE, а могу создать их сколько угодно.Я могу также использовать этот инструмент для создания резервных копий состояния системы.

Чтобы узнать, какие задания резервного копирования были выполнены, выполните команду: C:\> wbadmin get versions.

Особое внимание надо обращать на идентификатор версии, так как он необходим для восстановления файлов средствами WBADMIN (впрочем это же можно делать средствами мастера восстановления).

Резервное копирование средствами Windows PowerShell

Другой способ задействовать командную строку состоит в использовании командлетов PowerShell утилиты архивирования Windows. Чтобы получить к ним доступ, надо загрузить оснастку архивирования Windows:

PS C:\> add-pssnapin Windows.ServerBackup

Чтобы увидеть список доступных командлетов, выполните команду:

PS C:\> get-command -pssnapin windows.serverbackup

К сожалению, создание задания резервного копирования — многошаговый процесс. Хотя нужные команды можно вводить в окно последовательно вручную, я предпочитаю писать сценарии. Вот PowerShell-версия моего исходного пакетного файла:

#requires -version 2.0
#requires -pssnapin Windows.ServerBackup

#Demo-WBBackup.ps1

$policy = New-WBPolicy
$files=new-WBFileSpec c:\scripts,c:\files
Add-wbFileSpec -policy $policy -filespec $files
$backdir=("\\mycompany-dc01\backup\{0}\{1:MMddyyyy_hhmmss}" -f $env:computername,(get-date))

write-host "Creating $backdir" -foregroundcolor Green
mkdir $backdir | out-null

$backupLocation = New-WBBackupTarget -network $backdir

Add-WBBackupTarget -Policy $policy -Target $backupLocation

write-host "Backing up $files to $backdir" -foregroundcolor Green
$policy
Start-WBBackup -Policy $policy

Идеология командлетов Windows PowerShell основана на создании и выполнении политик. Политика содержит включаемые или исключаемые файлы или тома, место, куда надо копировать файлы, а также несколько других параметров. Можно также создавать задания восстановления состояния системы и восстановления целого сервера «с нуля». В своем примере я просто копирую несколько каталогов. Для резервного копирования задействуется командлет Start-WBBackup.

При более близком изучении списка командлетов утилиты архивирования Windows заметен один явный пробел: нет никаких командлетов для восстановления данных. Я полагаю, что эту операцию не нужно автоматизировать, хотя это и можно сделать с помощью WBADMIN.EXE. Возможно такие командлеты будут добавлены позже, а пока для восстановления файлов можно пользоваться мастером восстановления или WBADMIN.EXE.

Теперь ваша очередь

Я уверен, что в процессе самостоятельной работы с описанными средствами вы поймете, что помимо перечисленных утилита архивирования Windows предоставляет много других возможностей. Также вам придется оценить, как они вписываются в вашу общую стратегию резервного копирования и планы обеспечения непрерывности бизнес-операций. В определенном смысле возможности бесплатной утилиты архивирования Windows весьма ограничены, но поддержка создания сценариев и использование VHD-файлов предлагают массу интересных способов преодоления ограничений. Надо просто быть чуть более изобретательным.

Ну, и как с любым другим ПО для резервного копирования, не забывайте проверять процесс восстановления в непроизводственной среде. Вам наверняка не понравится постигать азы в процессе реального восстановления рухнувшей после аварии среды да еще со взбешенным боссом за спиной. Предварительная тренировка позволит выйти из сложной ситуации победителем.

Linux

Автоматизация процесса резервного копирования

Нашей следующей задачей является написание скриптов, выполняющих операции, необходимые для резервного копирования. Целью работы данных скриптов будет создание полной резервной копии баз данных, находящихся на серверах server1 и server2. На каждом из серверов в рассматриваемом примере установлена СУБД MySQL. Соответственно для экспорта нескольких таблиц в виде SQL-скрипта мы будем использовать утилиту mysqldump, работающую в командной строке.

Скрипт dbbackup.sh для сервера 1
   #!/bin/sh
   # переходим в каталог backup_agent, в котором хранятся файлы данных.
   cd /home/backup_agent

   # экспортируем таблицы баз данных с помощью утилиты mysqldump
   mysqldump -u sitedb -pG0oDP@sswrd --add-drop-table sitedb --
   tables tbl_ccode tbl_machine tbl_session tbl_stats > userdb.sql

   # архивируем и сжимаем файлы tar czf userdb.tgz userdb.sql

На сервере 2 мы разместим аналогичный скрипт, осуществляющий резервное копирование уникальных таблиц установленной на нем БД. Для каждого из скриптов необходимо задать признак исполняемого файла, выполнив команду:

[server1]:$ chmod +x dbbackup.sh

Разместив копии файла dbbackup.sh на серверах 1 и 2, мы возвращаемся на сервер внешнего хранилища, где создаем скрипт, выполняющий их перед запуском процесса удаленного копирования сжатых архивов (.tgz).

Скрипт backup_remote_servers.sh для размещения на сервере внешнего хранилища
   #!/bin/sh
   # используем ssh для удаленного выполнения скрипта dbbackup.sh на сервере 1
   /usr/bin/ssh backup_agent@server1.com "/home/backup_agent/dbbackup.sh"

   # используем scp для безопасного копирования созданного архивного файла userdb.tgz 
   # с сервера 1.  Обратите внимание на использование команды date
    для формирования временной отметки 
   # при размещении файла на сервере внешнего хранилища. 
   /usr/bin/scp backup_agent@server1.com:/home/backup_agent/userdb.tgz /
   home/backups/userdb-$(date +%Y%m%d-%H%M%S).tgz

   # выполняем скрипт dbbackup.sh на сервере 2 
   /usr/bin/ssh backup_agent@server2.com 
   "/home/backup_agent/dbbackup.sh"
	
   # используем scp для копирования transdb.tgz на сервер внешнего хранилища. 
   /usr/bin/scp backup_agent@server2.com:/home/backup_agent/transdb.tgz /
   home/backups/transdb-$(date +%Y%m%d-%H%M%S).tgz

Скрипт backup_remote_servers.sh использует ssh для удаленного выполнения скриптов на серверах. Поскольку доступ, организованный нами, не требует ввода пароля, программа ssh может удаленно выполнять команды на серверах 1 и 2 с сервера внешнего хранилища. Благодаря keychain процесс аутентификации происходит полностью автоматически.

Планирование задач

Наша следующая и последняя задача заключается в планировании выполнения скрипта backup_remote_servers.sh на сервере внешнего хранилища. Для этого мы добавим в конфигурационный файл планировщика cron две новые записи, согласно которым скрипт резервного копирования будет запускаться дважды в день – в 3:34 и в 20:34. Чтобы добавить записи, запустите на сервере внешнего хранилища программу crontab с параметром -e.

[offsite]:$ crontab -e

Программа crontab запустит используемый по умолчанию текстовый редактор, указанный в переменных среды VISUAL или EDITOR. Теперь введите две новые записи, после чего сохраните и закройте файл.

Записи crontab на сервере внешнего хранилища
   34 3 * * * /home/backups/remote_db_backup.sh 
   34 20 * * * /home/backups/remote_db_backup.sh

Запись файла crontab состоит из двух основных частей: спецификации времени выполнения и команды, подлежащей выполнению. Спецификация времени выполнения включает следующие поля:

Формат записи crontab
   +---- минута 
   | +----- час 
   | | +------ день 
   | | | +------ месяц 
   | | | | +---- день недели 
   | | | | | +-- команда, подлежащая выполнению 
   | | | | | | 
  34 3 * * * /home/backups/remote_db_backup.sh
Верификация резервных копий

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

Возможно, стоит создать задачу планировщика cron, которая по меньшей мере раз в месяц напоминала бы вам о необходимости проверки резервных копий. Кроме того, неплохо было бы менять ключевую пару по истечении определенного периода; напомнить вам об этом может также задача планировщика cron.