Pull to refresh

Windows: удалённое резервное копирование с использованием снапшотов (VShadow)

System administration *
При резервном копировании путём простого копирования файлов возникает вопрос: «как убедиться в целостности данных». Ведь если, например, копировать 50-гиговую базу lotus сервера, то в процессе копирования одной части может измениться другая и целостность будет нарушена. А в некоторых случаях (например с базами данных) может появиться необходимость остановки службы, но нет возможности остановить её на пару часов.

Для подобных задач Windows имеет полезный инструмент. Впервые о подобной технологии я узнал работая с FreeBSD, затем узнал про LVM в Linux, а поискав такое же решение для Windows обнаружил, что оно здесь тоже есть и называется Volume Shadow Copy.

Эта технология позволяет сделать мгновенный слепок файловой системы, который статичен во времени, в то время как оригинальная файловая система продолжает работу в штатном режиме. Для бекапа баз данных таким образом можно останавливать БД (когда это возможно), создавать слепок, запускать БД снова, и после этого спокойно копировать файлы используя созданный слепок.

Я приведу пример автоматического создания слепка для резервного копирования базы Lotus Domino (останова она не требует) и поясню как оно работает. Скрипт можно легко адаптировать под свои нужды.


snapshot.cmd


rem Go to the script's directory
%~d0
cd %~dp0

rem Get options or exit
call snapshot_env.cmd || exit 1

date /t > %snapshot_date%
date /t >> %snapshot_status%

rem Delete the oldest shadow of the specified volume
vshadow -do=%snapshot_drive% > %snapshot_create_volume% && echo Removing old OK >> %snapshot_status% || echo Removing old ERR >> %snapshot_status%
rem Force removing the share if it haven't done itself (it happens sometimes)
net share %snapshot_share% /delete

rem Create a persistent shadow copy
vshadow -p -script=%snapshot_var_script% %snapshot_drive% >> %snapshot_create_volume% && echo Snapshot OK >> %snapshot_status% || echo Snapshot ERR >> %snapshot_status%
call %snapshot_var_script%

rem Expose a child directory from the shadow copy as a share
vshadow -er=%SHADOW_ID_1%,%snapshot_share%,%snapshot_path% && echo Sharing OK >> %snapshot_status% || echo Sharing ERR >> %snapshot_status%

echo --- >> %snapshot_status%


snapshot_env.cmd


set snapshot_drive=e:
set snapshot_path=lotus
set snapshot_share=lotus$
set snapshot_var_script=snapshot_vars.cmd
set snapshot_status=logs\snapshot_status.log
set snapshot_create_volume=logs\snapshot_create_volume.log
set snapshot_date=%snapshot_drive%\%snapshot_path%\snapshot_date.log


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


— Скрипт snapshot.cmd после запуска считывает параметры из файла snapshot_env.cmd
— Создаётся файл %snapshot_date% в директории, которая будет архивироваться (позже объясню зачем)
— Удаляет старые снапшоты, если таковые имелись и расшаренные директории
— Создаёт новый снапшот для диска %snapshot_drive%
— Расшаривает директорию %snapshot_path% с сетевым именем %snapshot_share% (т.е. по сети можно будет обратиться к этой директории как \\server\lotus$). Важный момент — права на директорию будет иметь группа Backup operators, а это значит вам нужно будет создать специального пользователя lotus-backup, добавить его в группу Backup operators и использовать его в скриптах для подключения к папке \\server\lotus$ по сети.
— Начиная с этого момента данные из директории \\server\lotus$ можно спокойно и в любом темпе копировать в надёжное место :)

А теперь отдельно скажу о том, зачем же нужен был файл %snapshot_date%. Этот файл нужен для того, чтобы по сети можно было отличить вновь созданный снапшот от старого, который по той или иной причине не удалился. Это можно сделать проверив дату создания файла %snapshot_date% (у нас это делает nagios).

Требования


— vshadow.exe, необходимый для работы скриптов вы можете найти в Volume Shadow Copy Service SDK который можно скачать по ссылке: www.microsoft.com/downloads/en/details.aspx?FamilyID=0b4f56e4-0ccc-4626-826a-ed2c4c95c871
— Работа всего этого проверялась только на Windows Server 2003

PS: кстати, Windows-клиент Bacula, на сколько я знаю, так же использует технологию «Volume Shadow Copy» в своей работе.
Tags:
Hubs:
Total votes 42: ↑31 and ↓11 +20
Views 12K
Comments Comments 25