вторник, 8 февраля 2011 г.

Эволюция ntbackup в wbadmin

Старая истина — «бэкапы не нужны до того времени пока они не понадобятся» актуальна всегда и постоянно. Со времен Windows NT для архивации и восстановления использовалась утилита NTBackup. Проблем с ней не возникало и она верой и правдой служила долгие годы. Настройки были просты и производились как в графическом интерфейсе так и в командной строке. Синтаксис был простой, наприме для того что бы выполнить бэкап System State (состояния системы) достаточно было воспользоваться командой: NTBACKUP backup systemstate /f «D:\Backup\SystemState-backup.bkf»

Время шло. Появился Windows Server 2000 и утилита приобрела возможность работы с VSS. В Windows 2003 она осталась прежней. Но в момент выхода Windows 2008 всех слегка разочаровал тот факт что она исчезла и на замену ей пришел непонятный, малофункциональный и крайне неуклюжий Windows Backup.

— Где же наш NT Backup? Как же без него? — воскликнули все после того как не увидели привычного инструмента.

И были совершенно правы потому что исчезли привычные возможности выбора отдельных папок, исчез любимый System State Backup.

Эволюция.

Первый взгляд на Windows Backup слегка озадачил из за его скудного интерфейса и небольших возможностей. Немного порывшись в документации я выяснил что не все так плохо как кажется — весь «потерянный» функционал переместился в командную строку. Появилась утилита wbadmin.exe и управлять резервным копированием стало гораздо проще.
Она имела долгожданную поддержку powershell что сделало ее незаменимым инструментом системного администратора.

Исчез неповоротливый графический интерфейс и синтаксис команды не вызовет затруднений по причине того что информация предоставляемая по ключу /? более чем достаточна.

— Верните нам графическую оболочку! — кричали одни.
— Нам все нравиться. — сказали их оппоненты.
Микрософт подумал и сообщил что в следующей версии ОС будут учтены желания и первых и вторых.

Что бы не быть голословным приведу несколько типичных примеров использования утилиты wbadmin.

Выполнить резервную копию нескольких папок и состояния системы на диске Z: можно командой

wbadmin start backup –backupTarget:z: -include:D:\Files\Share01,D:\Files\Share02 –systemstate -vsscopy

или выполнить бэкап в сетевую папку только папки D:\Files\Share01 без подкаталогов.

wbadmin start backup –backupTarget: \\backupshare\backup1 -noinheritacl -nonrecurseinclude:D:\Files\Share01

состояние системы, бывший System State, резервируется командой.

wbadmin start systemstatebackup -backupTarget:f:

А восстанавливается так

wbadmin start sysrecovery -version:01/31/2011-09:00 -backupTarget:d:

для того что бы диск не переполнялся полезно подчищать набор имеющихся версий и оставлять три последние.

wbadmin delete systemstatebackup -keepVersions:3

Возможности утилиты позволяют планировать задания. Например, чтобы сохранять важные системные области на диск D: в 10 и 18 часов, пишем:

wbadmin enable backup –allcritical –addtarget:d: -schedule:10:00,18:00

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

wbadmin disable backup

Революция

Но время шло и из недр корпорации Microsoft появился Windows 2008 R2.
В нем наряду со многими изменениями эволюционировала и утилита Windows Backup.

— Что же изменилось? — спросите вы.

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

Устанавливаем компоненты Windows Server Backup и Command-line Tools из Server Backup Features.

dism /online /enable-feature /featurename:WindowsServerBackup
dism /online /enable-feature /featurename:WindowsServerBackupCommandlet

После чего вводим.

dism /online /get-features > D:\TEMP\Result.txt

В полученном файле ищем строки.

Feature Name : WindowsServerBackup
State : Enabled

Feature Name : WindowsServerBackupCommandlet
State : Enabled

Поле «State : Enabled» сообщает о том что компоненты установлены успешно.

Запускаем Powershell.
Для доступа к командлетам управления wbadmin необходимо импортировать модуль

Import-Module ServerManager

После этого ничто не помешает нам перейти к реализации задуманных планов по резервному копированию.

Сценарий №1

Нам необходимо создать резервную копию и включить ее в расписание. Резервируем папку D:\Files\. Папку D:\Files\Deploy необходимо исключить. Так же в набор нужно добавить System State.

# Добавляем снапин
Add-PSSnapin Windows.Serverbackup
# создаем экземпляр политики в переменной $policy
$policy = New-WBPolicy
# включаем в бэкап SystemState
Add-WBSystemState $policy

# Задаем пути и исключения
$filespec1 = New-WBFileSpec -FileSpec «D:\Files\»
$filespec2 = New-WBFileSpec -FileSpec «D:\Files\Deploy» -Exclude
$filespecarray = ($filespec1, $filespec2)

# Подключаем назначенные ранее параметры к политике
Add-WBFileSpec -Policy $policy $filespecarray

# Для сохранения резервной копии указываем том назначения
$volumeBackupLocation = New-WBBackupTarget -VolumePath E:
Add-WBBackupTarget -Policy $policy -Target $volumeBackupLocation

# Создаем расписание. В нашем случае – ежедневно в 21:00
Set-WBSchedule -Policy $policy -Schedule 21:00
Set-WBPolicy -Policy $policy

# выводим на экран детали созданной политики
$policy

Сценарий №2

Необходимо создать резервную копию в сетевую папку.

# Добавляем необходимый снапин
Add-PSSnapin Windows.Serverbackup
$policy = New-WBPolicy
Add-WBSystemState $policy
$filespec1 = New-WBFileSpec -FileSpec «D:\Files\»
Add-WBFileSpec -Policy $policy $filespec1

# для бэкапа с сетевую папку необходимо задать данные пользователя под которым выполняется задание
$cred = Get-Credential

# Укажите папку назначения
$volumeBackupLocation = New-WBBackupTarget -NetworkPath \\SERVER\BACKUP -Credential $cred

Add-WBBackupTarget -Policy $policy -Target $volumeBackupLocation
# Указываем расписание. В данном примере это ежедневно в 3 часа ночи и 22 часа
Set-WBSchedule -Policy $policy -Schedule 03:00,22:00
# финальный шаг – сохранение настроек после которого система создает задание по бэкапу.
Set-WBPolicy -Policy $policy

Небольшой бонус к вышесказанному.

Если вам лень контролировать результаты выполнения задания то можно настроить процедуру анализа. Она приведена ниже.

# Ждем пока не завершиться активное задание
while ((Get-WBJob).State -eq «Running») { }

# получаем результаты работы задания
$ResultJob = Get-WBJob -Previous 1

# анализируем результат
If (!($ResultJob.JobState -eq «Completed»)) {
# задание завершилось неудачно
//код обработки//
} Else {
# задание завершилось удачно
//код обработки//
}

В строку //код обработки// вставьте нужный вам код и наслаждайтесь широчайшими возможностями которые вам предоставляет powershell.

Мариничев Сергей http://itband.ru/2011/02/backup-utilities/

Комментариев нет:

Отправить комментарий