Бесплатные средства автоматизированного backup

На данный момент существует два типа бэкапа виртуальных машин:

  1. Откат к предыдущему состоянию памяти ВМ (технология снимков - snapshot);
  2. Бэкап файлов ВМ (что подразумевает само понятие BackUp);

Технология снимков ВМ не является как таковым Бэкапом, так как сохраняет состояние файла nvram машины (состояние операционной системы, процессы в ней на момент снимка).

Единственный вариант автоматизированного бэкапа, который можно стандартно использовать в vSphere без использования vCenter – это разработки третьих производителей, например: ghettoVCB (рассмотрена далее).

ghettoVCB установка и настройка

Ниже выложено руководство по установке скриптов, а также приведены конфигурационные файлы для бэкапа как локально, так и на удаленном сервере с использованием хранилища сетевой файловой системы (NFS). В обоих вариантах нам необходимы программа использования SSH, например Putty (http://www.putty.org), а также сам скрипт (доступен для скачивания здесь. Для начала, выкладываем файл ghettoVCB.tar.gz на DataStore, после чего заходим в Putty, подключаемся к серверу ESX, вводим логин и пароль узла ESX (для этого должен быть включен сервис Remote Tech Support в меню configurations – Security Profile) и проделываем следующие действия:

~# cd vmfs/volumes/<имя datastore>
vmfs/volumes/<имя datastore> # сp ghettoVCB.tar.gz / 
vmfs/volumes/<имя datastore> # cd /
~# tar -zxvf ghettoVCB.tar.gz
ghettoVCB/
ghettoVCB/ghettoVCB.conf
ghettoVCB/ghettoVCB.sh
ghettoVCB/ghettoVCB-vm_backup_configuration_template
~# cd ghettoVCB
ghettoVCB # vi vmlist


Откроется файл (пока еще не созданный) со списком тех машин, которые нужно забэкапить. Для ввода и редактирования информации жмем “a”, чтобы применить настройки Esc. Чтобы выйти с сохранениями :wq чтобы без :q! Вводим названия машин, по одной на строке, сохраняем список Esc, :wq. Далее создаем файл log – ~# touch log. Далее следует прописать настройке в файле ghettoVCB.conf. ~#vi ghettoVCB.conf мы увидим следующее:

ghettoVCB#vi ghettoVCB.conf
VM_BACKUP_VOLUME=/vmfs/volumes/dlgCore-NFS-bigboi.VM-Backups/WILLIAM_BACKUPS
DISK_BACKUP_FORMAT=thin
VM_BACKUP_ROTATION_COUNT=3
POWER_VM_DOWN_BEFORE_BACKUP=0
ENABLE_HARD_POWER_OFF=0
ITER_TO_WAIT_SHUTDOWN=3
POWER_DOWN_TIMEOUT=5
ENABLE_COMPRESSION=0
ADAPTER_FORMAT=buslogic
VM_SNAPSHOT_MEMORY=0
VM_SNAPSHOT_QUIESCE=0
ENABLE_NON_PERSISTENT_NFS=0
UNMOUNT_NFS=0
NFS_SERVER=172.30.0.195
NFS_MOUNT=/nfsshare
NFS_LOCAL_NAME=nfs_storage_backup
NFS_VM_BACKUP_DIR=mybackups
SNAPSHOT_TIMEOUT=15
EMAIL_LOG=0
EMAIL_DEBUG=0
EMAIL_SERVER=auroa.primp-industries.com
EMAIL_SERVER_PORT=25
EMAIL_TO=auroa@primp-industries.com
EMAIL_FROM=root@ghettoVCB


По порядку:

VM_BACKUP_VOLUME
Параметр, определяющий директорию создания бэкапов. В моем случае, я указал: /vmfs/volumes/Datastore1/backup;

DISK_BACKUP_FORMAT
Определяет формат забэкапленного диска, возможны варианты: zeroedthick, eagerzeroedthick, thin, 2gbsparse;

VM_BACKUP_ROTATION_COUNT
Определяет количество бэкапов на одну машину (каждый последующий будет удаляться скриптом) Если, например, скрипт (рассказывается ниже) будет бэкапить машины каждый час, то при указании числа 24, мы получим бэкапы каждый час на протяжении одного дня.

POWER_VM_DOWN_BEFORE_BACKUP
Определяет, будет ли машина выключаться перед бэкапом (enabled=1 disabled=0) (скрипт поддерживает бэкап при включенной машине)

ENABLE_HARD_POWER_OFF
Отключение дисков на время бэкапа (enabled=1 disabled=0)

ITER_TO_WAIT_SHUTDOWN
При включенном предыдущем параметре, определяет количество времени (1 единица=60 секунд), прежде чем скрипт выполнит принудительное отключение диска

POWER_DOWN_TIMEOUT
При включенном параметре POWER_VM_DOWN_BEFORE_BACKUP, определяет количество времени (1 единица=60 секунд), прежде чем скрипт выполнит жесткое выключение (без использования ShutDown Guest)

ENABLE_COMPRESSION
Параметр, при включении которого забэкапленные файлы будут помещаться в архив (enabled=1 disabled=0) (это тестовый параметр для данной версии скрипта, рекомендуется не менять значение по умолчанию 0)

ADAPTER_FORMAT
Формат диска машины (возможны: buslogic lsilogic)

VM_SNAPSHOT_MEMORY=0
VM_SNAPSHOT_QUIESCE=0
Параметры, отвечающие за снимки памяти, и если первый параметр “1”, то будет ли переведена машина на этот период в режим ожидания.

ENABLE_NON_PERSISTENT_NFS=0 
UNMOUNT_NFS=0 
NFS_SERVER=172.30.0.195
NFS_MOUNT=/nfsshare
NFS_LOCAL_NAME=nfs_storage_backup
NFS_VM_BACKUP_DIR=mybackups


Все эти параметры нужны, если мы планируем создать директорию с бэкапами на удаленном сервере. Этими параметрами мы настраиваем доступ к NFS хранилищу (его местонахождение, директория на локально сервере и т.д.) Если создаем директорию бэкапа на том же DataStore, проигнорируем эти параметры

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

EMAIL_LOG=0 
EMAIL_DEBUG=0 
EMAIL_SERVER=auroa.primp-industries.com 
EMAIL_SERVER_PORT=25
EMAIL_TO=auroa@primp-industries.com
EMAIL_FROM=root@ghettoVCB


Следующие параметры будут отсылать логи на мэйл, при учете того, что в самом скрипте изначально прописаны данные smtp, pop и другие настройки. Данные параметры являются экспериментальными и не будут работать без дополнительных настроек. При желании отсылки логов на свой мэйл, требуется ознакомиться с основами perl и досконально изучить данную статью: http://www.waldrondigital.com/2010/05/11/ghettovcb-e-mail-rotate-logs-batch-file-for-vmware/

Далее приводятся два вида настройки этих параметров без особых углублений (1 – локально, 2 – через сервер NFS)

Локальный бэкап

ghettoVCB# vi ghettoVCB.conf
VM_BACKUP_VOLUME=/vmfs/volumes/Datastore1/backup
DISK_BACKUP_FORMAT=thin
VM_BACKUP_ROTATION_COUNT=10
POWER_VM_DOWN_BEFORE_BACKUP=0
ENABLE_HARD_POWER_OFF=0
ITER_TO_WAIT_SHUTDOWN=3
POWER_DOWN_TIMEOUT=5
ENABLE_COMPRESSION=0
ADAPTER_FORMAT=lsilogic
VM_SNAPSHOT_MEMORY=0
VM_SNAPSHOT_QUIESCE=0
ENABLE_NON_PERSISTENT_NFS=0
UNMOUNT_NFS=0
NFS_SERVER=172.30.0.195
NFS_MOUNT=/nfsshare
NFS_LOCAL_NAME=nfs_storage_backup
NFS_VM_BACKUP_DIR=mybackups
SNAPSHOT_TIMEOUT=5
EMAIL_LOG=0
EMAIL_DEBUG=0
EMAIL_SERVER=auroa.primp-industries.com
EMAIL_SERVER_PORT=25
EMAIL_TO=auroa@primp-industries.com
EMAIL_FROM=root@ghettoVCB


Бекап на NFS

ghettoVCB# vi ghettoVCB.conf
VM_BACKUP_VOLUME=/vmfs/volumes/NFS
DISK_BACKUP_FORMAT=thin
VM_BACKUP_ROTATION_COUNT=10
POWER_VM_DOWN_BEFORE_BACKUP=0
ENABLE_HARD_POWER_OFF=0
ITER_TO_WAIT_SHUTDOWN=3
POWER_DOWN_TIMEOUT=5
ENABLE_COMPRESSION=0
ADAPTER_FORMAT=lsilogic
VM_SNAPSHOT_MEMORY=0
VM_SNAPSHOT_QUIESCE=0
ENABLE_NON_PERSISTENT_NFS=1
UNMOUNT_NFS=1
NFS_SERVER=192.168.0.5
NFS_MOUNT=/nfs
NFS_LOCAL_NAME=nfs 
NFS_VM_BACKUP_DIR=Backup
SNAPSHOT_TIMEOUT=5
EMAIL_LOG=0
EMAIL_DEBUG=0
EMAIL_SERVER=auroa.primp-industries.com
EMAIL_SERVER_PORT=25
EMAIL_TO=auroa@primp-industries.com
EMAIL_FROM=root@ghettoVCB


Чтобы проверить данный скрипт можем запустить его разово. Для этого ознакомимся с параметрами запуска скрипта:

-a Бэкапит все машины
-f Использование списка ВМ
-c Конфигурация директории бэкапа
-g Использование файла конфигурации
-l Использование файла логов
-d Описание логов [info|debug|dryrun] (изначально: info)

Запустим, например, всё это со следующими параметрами:

/ghettoVCB # ./ghettoVCB.sh -f ./vmlist -g ./ghettoVCB.conf -l ./log

В логах, при правильно настроенном файле конфигурации мы увидим примерно следующее:

2011-02-21 15:08:20 -- info: ============================== ghettoVCB LOG START ==============================

2011-02-21 15:08:20 -- info: CONFIG - USING GLOBAL GHETTOVCB CONFIGURATION FILE = ./ghettoVCB.conf
2011-02-21 15:08:20 -- info: CONFIG - GHETTOVCB_PID = 69601
2011-02-21 15:08:20 -- info: CONFIG - VM_BACKUP_VOLUME = /vmfs/volumes/NFS1/
2011-02-21 15:08:20 -- info: CONFIG - VM_BACKUP_ROTATION_COUNT = 3
2011-02-21 15:08:20 -- info: CONFIG - VM_BACKUP_DIR_NAMING_CONVENTION = 2011-02-21_15-08-19
2011-02-21 15:08:20 -- info: CONFIG - DISK_BACKUP_FORMAT = thin
2011-02-21 15:08:20 -- info: CONFIG - ADAPTER_FORMAT = lsilogic
2011-02-21 15:08:20 -- info: CONFIG - POWER_VM_DOWN_BEFORE_BACKUP = 0
2011-02-21 15:08:20 -- info: CONFIG - ENABLE_HARD_POWER_OFF = 0
2011-02-21 15:08:20 -- info: CONFIG - ITER_TO_WAIT_SHUTDOWN = 3
2011-02-21 15:08:20 -- info: CONFIG - POWER_DOWN_TIMEOUT = 5
2011-02-21 15:08:20 -- info: CONFIG - SNAPSHOT_TIMEOUT = 1
2011-02-21 15:08:20 -- info: CONFIG - LOG_LEVEL = info
2011-02-21 15:08:20 -- info: CONFIG - BACKUP_LOG_OUTPUT = ./log
2011-02-21 15:08:20 -- info: CONFIG - VM_SNAPSHOT_MEMORY = 0
2011-02-21 15:08:20 -- info: CONFIG - VM_SNAPSHOT_QUIESCE = 0
2011-02-21 15:08:20 -- info: CONFIG - VMDK_FILES_TO_BACKUP = all
2011-02-21 15:08:20 -- info: CONFIG - EMAIL_LOG = 0
2011-02-21 15:08:20 -- info:

2011-02-21 15:08:21 -- info: Initiate backup for Testing
2011-02-21 15:08:21 -- info: Creating Snapshot "ghettoVCB-snapshot-2011-02-21" for Testing
Destination disk format: VMFS thin-provisioned
Cloning disk '/vmfs/volumes/datastore1/Testing/Testing.vmdk'...
Clone: 100% done.

2011-02-21 15:08:37 -- info: Removing snapshot from Testing ...
2011-02-21 15:08:38 -- info: Backup Duration: 17 Seconds
2011-02-21 15:08:38 -- info: Successfully completed backup for Testing!

2011-02-21 15:08:38 -- info: ###### Final status: All VMs backed up OK! ######

2011-02-21 15:08:38 -- info: ============================== ghettoVCB LOG END ================================


Основные типы ошибок:

  1. ВМ, которые нужно бэкапить, НЕ ДОЛЖНЫ содержать снапшотов;
  2. Неверный путь к хранилищам;
  3. При включенном NFS режиме, неверная настройка записи данных на NFS;


После всего этого необходимо настроить режим создания бэкапов по времени. Для этого необходимо воспользоваться параметрами CronTab. Для этого проделываем следующее:

~# cd /var/spool/cron/crontabs/
var/spool/cron/crontabs/ # vi root (или другое имя администратора esx)


Откроется повременной запуск скриптов. На новой строчке впишем следующее:

15 2 * * 1-5  /ghettoVCB/ghettoVCB.sh -f /ghettoVCB/vmlist -g /ghettoVCB/ghettoVCB.conf -l /ghettoVCB/log


Файл crontab состоит из строк, содержащих шесть полей. Поля разделяются пробелами или символами табуляции. Первые пять полей - целочисленные шаблоны, задающие:
минуты (0-59),
час ы (0-23),
день месяца (1-31),
месяц года (1-12),
день недели (0-6, причем 0=воскресенье).
Шестое поле в строке файла crontab - строка, выполняемая командным интерпретатором в указанные моменты времени. Символ % (процент) в этом поле, если он не замаскирован \ (обратной косой), преобразуется в символ новой строки.
Только первая строка (до символа % или до конца строки) поля команды выполняется командным интерпретатором. Другие строки передаются команде как стандартный входной поток. Любая строка, начинающаяся символом #, считается комментарием и игнорируется. Файл не должен содержать пустых строк.
Например, если мы хотим, чтобы бэкапы происходили, каждый день по будням в 2 часа 15 минут, наша строка должна выглядеть следующим образом:

15 2 * * 1-5 /ghettoVCB/ghettoVCB.sh -f /ghettoVCB/vmlist -g /ghettoVCB/ghettoVCB.conf -l /ghettoVCB/log


Рекомендуется проверить настройки времени на узле ESX, настроить синхронизацию с ntp сервером.
Скрипт был протестирован в нашей лаборатории. Во время тестирования были выполнены бэкапы остановленных и работающих машин на datastore и в папку NFS. Официально скрипт не поддерживается компанией Vmware и может использоваться только на свой страх и риск. Для продуктивных сред с критически важными приложениями мы не рекомендуем его использовать и рассмотреть вариант использования Data Recovery + vCenter server.

Data Recovery

Также существует и встроенная функция бэкапа, созданная самой компанией VMware. Это плагин под названием VMware Data Recovery, который встраивается в VSphere Client и может выполнять различные функции. Это достаточно удобный из бесплатных способов вид бэкапа, но данная функция в полной степени будет функционировать только с программой Vcenter.
Ниже приводим таблицу, сравнивающую возможности скрипта и VMware Data Recovery:

Режимы, поддерживаемые Data Recovery (с установленным VCenter) Ghetto VCB Data Recovery (без установленного VCenter)
Бэкап данных + +
Создание снимков + +
Бэкап по времени + -
Удаленное сохранение машин + +
Отправка логов по e-mail + +
Откат машин к предыдущему состоянию Вручную +
Централизованная консоль управления1 - +
Поддержка производителя - +
Полная совместимость с продуктами VMware - +
Режим дедупликации2 - -
Инкрементное резервное копирование - +
Настраиваемые параметры для нескольких экземпляров VCenter в режиме LinkedMde - -
Восстановление отдельных данных - +
Служба теневых машин (VSS)3 - -
Управление политиками - +
Совмещение со службами vMotion, HA, DRS - -
Поддержка форматов хранения данных (Локальное, NFS, Share, iSCSI, Fibre Channel, NAS) Локальное,NFS Локальное, NFS, Share, iSCSI, Fibre Channel, NAS


1 – DataRecovery Plugin встраивается также, как Vapp, в которой существует своя собственная консоль, для поддержки данного плагина;
2 – данный режим позволяет создавать на датасторе лишь различия между забэкапленной ВМ и рабочей, что позволяет сократить место на бэкап в 1.5-2 раза;
3 – поддержка функции теневых томов, для избежания простоев во время создания бэкапа;

Data Recovery без использования VCenter будет работать напрямую только с одним ESX-хостом и не позволит создавать автоматизированный бэкап (по расписанию) без использования VCenter.

Автор: Александр Прилепский

Возможно, Вам будет также интересна следующая информация:

technical-info/configuration/backup-wo-vcenter.txt · Последние изменения: 2012/02/16 12:44 — VMware vSphere and View blogger