Создание резервных копий ВМ подручными средствами

Проблема создания резервных копий виртуальных машин забесплатно давно меня волновала.
Вернее, не просто создания резервных копий, но регулярного создания резервных копий и проверки целостности.
До появления ESX3m5 Update4 можно было делать резервные копии достаточно просто — с помощью скриптов на Powershell или RCLI. Но всему хорошему рано или поздно приходит конец — и компания VMware решила, что раз ESXi — бесплатное решение, то и функционал публичного API (используемый вышеперечисленными инструментами) будет доступен только в режиме чтения. То есть, посмотреть информацию с хоста можно, изменить — нельзя.
«Мыши плакали, кололись, но продолжали есть кактус»…
Я рассмотрел несколько бесплатных решений: Trilead VM Explorer и Veeam FastSCP Free. Везде были свои минусы:
— Trilead — это законченное средство для бэкапа одной ВМ. Т.е. вы нажали «Backup VM» и все — бэкап пошел создаваться. Но, скорость работы не превышала 5Мб/сек, кроме того, сделать бэкап нескольких ВМ или настроить регулярный бэкап в бесплатной версии нельзя. Ну и можно забыть про оповещения;
— Veeam — решение более интересное. 🙂 Там присутствует возможность настраивать задания по копированию, загвоздка лишь в том, что копируется весь каталог с ВМ. А ведь там лежат файлы, которые недоступны для чтения, — своп и жесткий диск. Соответственно, проблемы с перенаправлением свопа и создания снимков ложатся целиком на плечи системного администратора. Правда, был и плюс — наличие оповещения. В общем, тоже не айс.
И тут Михаил Михеев показал, как пользоваться гуглом и подкинул ссылку на достаточно адекватное и бесплатное средство. Данное средство позволяет делать бэкапы не только с ESX, но и с бесплатных серверов ESXi.
Я его попробовал и хочу прорекламировать вам. 🙂

1) Разрешаем доступ к нашему серверу по SSH. Вот инструкция для ESXi;
2) Скачиваем клиент для подключения по ssh, например, PuTTy;
3) Скачиваем скрипт ghettoVCB.sh и помещаем по пути «/vmfs/volumes/datastore». Ни в коем случае не редактируем его под Windows;
4) Разрешаем его запуск — «chmod +x /vmfs/volumes/datastore/ghettoVCB.sh;
5) Пытаемся запустить скрипт. Если при запуске выдается сообщение «Cannot be found», скорее всего, скрипт немного кривой. Выполняем команду «vi ghettoVCB.sh» — если скрипт содержит символы «^M», его нужно немного исправить. Для выхода из VI нажимаем сначала «Esc», затем «:q» и «Enter». После этого в командной строке выполняем «sed ‘s/.$//g’ ghettoVCB.sh > ghettoVCBFixed.sh». Теперь просмотрим файл ghettoVCBFixed.sh — «vi ghettoVCBFixed.sh». Если наборы символов «^M» пропали, делаем новый скрипт запускаемым (пункт2) и пытаемся запустить. «Правильный» скрипт после запуска должен сругаться — что у вас не указан файл со списком ВМ;
6) Через графический интерфейс удаляем старый скрипт и переименовываем новый: ghettoVCBFixed.sh -> ghettoVCB.sh;
7) Редактируем скрипт — «vi /vmfs/volumes/datastore/ghettoVCB.sh» и нажимаем «Insert». Давайте изучим доступные параметры:
— VM_BACKUP_VOLUME=/vmfs/volumes/backup (Резервное NFS-хранилище)
— ENABLE_2GB_SPARSE=0 (Измените на 1, если вы хотите дробить VMDK кусками по 2GB)
— VM_BACKUP_ROTATION_COUNT=3 (Сколько бэкапов будет храниться для виртуальной машины)
— VM_BACKUP_DIR_NAMING_CONVENTION (как будет формироваться название. По умолчанию вполне адекватно)
— POWER_VM_DOWN_BEFORE_BACKUP=0 (При значении — 0 вы получаете «живой» бэкап без остановки ВМ)
— ENABLE_HARD_POWER_OFF=0 (Соответственно, выключение ВМ не через vmware tools, а физически)
— ITER_TO_WAIT_SHUTDOWN=4 (тайм-аут для физического выключения ВМ)
8) Сохраняем наш скрипт. Для этого нажимаем «Esc», затем «:wq» и «Enter»;
9) Создаем файл со списком машин — «vi /vmfs/volumes/datastore/vmbackup». В данном файле набираем список ВМ точно так же, как они называются в vClient. Например, так:
vm1
vm2
DC1
ExchSrv
В вашем файле будут содержаться названия четырех ВМ. Сохраняем файл (пункт6);
10) Давайте посмотрим текущее время на вашем ESXi. Для этого выполним команду «date»:
Mon Aug 3 08:28:52 UTC 2009. Текущее время на рабочей станции — 14:28.
Мой сервер синхронизируется с NTP-сервером предприятия, кроме того, сейчас на локальных станциях настроено летнее время, поэтому разница во времени сервера и локальной станции — 6 часов. Запомним эту цифру;
11) Отредактируем файл заданий планировщика CRON. Для этого выполним команду «vi /var/spool/cron/crontabs/root». Добавим новую строку (новое задание) вида:
«00 19 * * 7 /vmfs/volumes/datastore/ghettoVCB.sh /vmfs/volumes/datastore/vmbackup»
Это означает, что в 19:00 каждое воскресенье мы выполняем команду «/vmfs/volumes/datastore/ghettoVCB.sh /vmfs/volumes/datastore/vmbackup». А так как у нас смещение зимой +5 часов, а летом +6, то задание будет выполняться либо в 0:00, либо в 1:00 в понедельник;
12) Перезапустим демона-планировщика 🙂
Для этого выполним следущие команды:
«kill `ps ax | grep cron | awk ‘{print $1}’`». Обратите внимание, что ` и ‘ — разные знаки!
«crond»
13) Лог ghettobackup.log, который лежит на NFS-сервере, затем можно отправить по почте, чтобы ознакомиться с результатами;
Вот и все, дерзайте 🙂
P.S. Огромное спасибо мистеру новичку за бесценную помощь в настройке CRON под ESXi.

Запись опубликована в рубрике VMware, vSphere с метками . Добавьте в закладки постоянную ссылку.

92 комментария: Создание резервных копий ВМ подручными средствами

  1. Анатолий говорит:

    Здравствуйте!
    Что-нибудь удалось придумать по поводу того, что бэкапится только первый (системный) диск виртуальных машин?

  2. A.Vakhitov говорит:

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

  3. Анатолий говорит:

    Если не трудно, можете ссылку дать?

  4. Максим говорит:

    A.Vakhitov, можно ли вообще делать резервные копии не только дисков но и памяти, чтобы система восстанавливалась более корректно? Или для этого все таки придется выключать ВМ перед бэкапом.

  5. A.Vakhitov говорит:

    Известные мне средства резервного копирования копируют только данные с ЖД. Чтобы скопировать состояние памяти, необходимо делать паузу (suspend) ВМ, затем копировать состояние памяти, и поднимать ее из suspend.
    Единственный вариант передачи состояния памяти при включенной машине — Fault Tolerance.

  6. A.Vakhitov говорит:

    Поправлюсь — отчуждаемый вариант передачи содержимого ОЗУ. Есть еще и vMotion, но он нам не подходит. 🙂

  7. Анатолий говорит:

    A.Vakhitov

    Спасибо. Сейчас бэкапит все диски.

  8. Андрей Вахитов говорит:

    Кстати, в новой версии заявлено, что теперь бэкапит не только SCSI, но и IDE диски. Возможно, у вас затык был в этом?

  9. Анварыч говорит:

    У меня на данный момент работает скрипт бэкапа на Win2k8 машине с использованием PowerShell, отчеты о бэкапе шлются на почту. С выходом PS2 перейду на background job’ы и на этом и останусь. Кстати Vmware DR просто выморозил своей сыростью, мучался с ним месяц.

  10. A.Vakhitov говорит:

    Значит, у вас пиратский, лицензионный, оценочный ESXi. Бесплатный ESXi не поддерживает работу с публичным API, который реализован через командлеты Powershell. Вернее, работу он поддерживает, но при попытке создать снапшот выдаст ошибку.
    Тем данный скрипт и хорош, что он работает на всех версиях ESXi, при этом не требуя ничего для работы.

  11. новичок говорит:

    Хочу поделиться. Пробовал по ftp бэкапить с ESXi хоста на ESXi хост (ESXi 4.0), скорость варьируется в пределах 20-30 MB/s. В принципе такая же примерно скорость при бэкапе по ftp на не ESXi хост (в моем случае ftp на freebsd 6.2). При этом отдельной сети для бэкапа не делал, так что есть вероятность, что скорость может быть выше. Для ESXi 3.5 скорость достигала 40 MB/s.

  12. A.Vakhitov говорит:

    Круто. Как обеспечивал ротацию бэкапов?

  13. новичок говорит:

    Имею 2 ESXi хоста — esxi01, esxi02. Процесс бэкапа естесственно запускается кроном. Ежедневные (пн-сб) бэкапы машин хостов делаю друг на друга, т.е. esxi01 -> esxi02, esxi02 -> esxi01. Еженедельные (вс.) на отдельный сервер бэкапов. т.е. максимально последний бэкап самих машин у меня недельной давности. Кроме того внутри самих машин делаю бэкапы данных на сервер бэкапов, эти данные тоже ежедневно, кроме того, кроном резервирую также их еженедельно. Итого получается двойное резервирование — самих ВМ, и данных в этих ВМ.

  14. Андрей Вахитов говорит:

    Прикольная схема. Поделишься тонкостями настройки? Можно по мылу или аське.

  15. sergei4 говорит:

    Подскажите в чем проблема. Делаю копию и архивирую с помощью скрипта на ESX3.5 переношу на дургой ESX4 там пытаюсь распаковать. получаю ошибку tar: invalid tar magic.

  16. Андрей Вахитов говорит:

    Не знаю, возможны проблемы с различными версиями архиваторов.
    Без архивации нормально переносится?

  17. kvad говорит:

    Здравствуйте. Обьясните, пжлста, как настроить бекап по фтп на другой сервер ( напр. ФриБСД) — чтото в самом скрипте не нашел, вроде только на НФС ??? В комментах «новичок» пишет про бекапирование по фтп…

    P.S. Версия ESXi 4.0

  18. A.Vakhitov говорит:

    Посмотрите тут (http://www.simple-tech.info/default.aspx).
    Кстати, vSphere Essentials стоит уже 500$. При этих (в принципе небольших) тратах вам не будет нужды так извращаться со скриптами на ESXi.
    Вполне можно будет настраивать бэкапы через PowerCLI или RCLI.

  19. Posix86749 говорит:

    Привет.
    Нужна помощь. Причем в самом начале:
    пытаюсь скопировать скрипты на ESXi4 и нифига не выходит 🙁
    pscp c:\backup_test root@192.168.31.9:/vmfs/volumes

    пишет в ответ:
    ash: /sbin/sftp-server: Permission denied
    unable to initialise SFTP: could not connetct
    че за ерунда?

  20. A.Vakhitov говорит:

    SSH разрешен?

  21. Posix86749 говорит:

    Да, по ssh (через putty) могу подцепиться к консоли ESXi.
    Разрешал, как написано в статье, на которую Вы ссылались в 1-ом пункте

  22. A.Vakhitov говорит:

    «pscp c:\backup_test root@192.168.31.9:/vmfs/volumes»
    А само хранилище вы указывали? Например, «/vmfs/volumes/datastore1».
    Попробуйте поставить Veeam FastSCP. С его помощью удается скопировать данные скрипты?

  23. Posix86749 говорит:

    хранилище пробовал указать:
    “pscp c:\backup_test root@192.168.31.9:/vmfs/volumes/DS1-250”

    ответ тот же.
    А закопировать данные скрипты в storge можно и через vSphere Client и через FastSCP, но ведь проблема в том что сккрипты должны лежать в
    /VMFS/volumes …
    Или это не обязательное условие?

  24. A.Vakhitov говорит:

    У меня скрипты лежали на датасторе.

  25. Posix86749 говорит:

    спасибо, будем играться) и еще вопрос сразу. Эти скрипты когда делают бэкап они файлы сжимают? или переливают как есть?

  26. A.Vakhitov говорит:

    Зависит от настроек в скрипте. Можно и так, и так сделать.

  27. Рустам говорит:

    Добрый день!
    В последней версии GhettoVCB появилась возможность отправлять логи по почте

    # Email log 1=yes, 0=no
    EMAIL_LOG=1

    # Email SMTP server
    EMAIL_SERVER=10.0.10.202

    # Email SMTP server port
    EMAIL_SERVER_PORT=25

    # Email FROM
    EMAIL_FROM=support@mydomen.ru

    # Email RCPT
    EMAIL_TO=support@mydomen.ru

    указываю вышеприведенные параметры, но логи отсылать отказывается, хотя /tmp/ файл для отправки собирает..

    Не подскажете в чём косяк?

  28. Андрей Вахитов говорит:

    Сложно сказать, так как я в скрипте разочаровался и ушел на Veeam Backup 4 🙂
    Почтовый сервер принимает неавторизованные SMTP-сессии?

  29. Рустам говорит:

    косяк нашел:
    Only supported if you are running vSphere 4.1 and this feature is experimental. The reason this is listed as experimental is it may not be compatible with all email servers as the script utlizes nc (netcat) utility to communicate to an email server.

    т.е.на ESXi не заработает, т.к.нет на нём команды NC.

    Спасибо за быстрый ответ, видимо тоже прийдется переходить на условно-платный продукт 🙁

  30. Витя говорит:

    Андрей
    Расскажите почему разочаровались в скрипте?

  31. A.Vakhitov говорит:

    Во-первых, потому что нашел средства на нормальный продукт — Veeam Backup and Replication 5.0.
    Во-вторых, потому что новая версия скрипта работает через vMA. Из плюсов — ничего не надо ломать в консоли ESXi. Из минусов — требуется платная версия vSphere Essentials.
    Соответственно, в бесплатном сегменте чем дальше, тем больше начинает рулить KVM либо Hyper-V. Тут еще ограничение по использованию памяти в ESXi5 Free.

  32. Витя говорит:

    У кого при распаковке появляется ошибка
    tar: invalid tar magic.
    можно распаковать вот так:
    tar -zxvf ~/filename.gz

  33. Андрей Вахитов говорит:

    Спасибо
    Я так понимаю, это в том варианте скрипта, который архивирует резервную копию?

  34. Витя говорит:

    Да, в этом варианте. При разворачивании бэкапа.

  35. Anyser говорит:

    Добрый день! Настроил по инструкции, но при запуске скрипта появляется ошибка:
    Datastore not found.

    2012-09-30 12:06:39 -- info: Snapshot found for Windows R2, backup will not take place

    Бекапы хочу складывать в папку Backup диска под названием в vSphere 4ffc1d91-7072de03-8fda-c860002a8330. В ghettoVCB.sh отредактировал путь вроде верно:
    VM_BACKUP_VOLUME = /vmfs/volumes/4ffc1d91-7072de03-8fda-c860002a8330/Backup
    Вот полный лог в режиме отладки:
    2012-09-30 12:13:54 -- info: ============================== ghettoVCB LOG START ==============================

    2012-09-30 12:13:54 -- debug: Succesfully acquired lock directory - /tmp/ghettoVCB.lock

    2012-09-30 12:13:54 -- debug: HOST VERSION: VMware ESXi 5.0.0 build-441354
    2012-09-30 12:13:54 -- debug: HOST LEVEL: VMware ESXi 5.0.0 GA
    2012-09-30 12:13:54 -- debug: HOSTNAME: grml

    2012-09-30 12:13:54 -- info: CONFIG - VERSION = 2011_11_19_1
    2012-09-30 12:13:54 -- info: CONFIG - GHETTOVCB_PID = 444667
    2012-09-30 12:13:54 -- info: CONFIG - VM_BACKUP_VOLUME = /vmfs/volumes/4ffc1d91-7072de03-8fda-c860002a8330/Backup
    2012-09-30 12:13:54 -- info: CONFIG - VM_BACKUP_ROTATION_COUNT = 3
    2012-09-30 12:13:54 -- info: CONFIG - VM_BACKUP_DIR_NAMING_CONVENTION = 2012-09-30_12-13-54
    2012-09-30 12:13:54 -- info: CONFIG - DISK_BACKUP_FORMAT = thin
    2012-09-30 12:13:54 -- info: CONFIG - POWER_VM_DOWN_BEFORE_BACKUP = 0
    2012-09-30 12:13:54 -- info: CONFIG - ENABLE_HARD_POWER_OFF = 0
    2012-09-30 12:13:54 -- info: CONFIG - ITER_TO_WAIT_SHUTDOWN = 3
    2012-09-30 12:13:54 -- info: CONFIG - POWER_DOWN_TIMEOUT = 5
    2012-09-30 12:13:54 -- info: CONFIG - SNAPSHOT_TIMEOUT = 15
    2012-09-30 12:13:54 -- info: CONFIG - LOG_LEVEL = debug
    2012-09-30 12:13:54 -- info: CONFIG - BACKUP_LOG_OUTPUT = /tmp/ghettoVCB-2012-09-30_12-13-54.log
    2012-09-30 12:13:54 -- info: CONFIG - VM_SNAPSHOT_MEMORY = 0
    2012-09-30 12:13:54 -- info: CONFIG - VM_SNAPSHOT_QUIESCE = 0
    2012-09-30 12:13:54 -- info: CONFIG - VMDK_FILES_TO_BACKUP = all
    2012-09-30 12:13:54 -- info: CONFIG - EMAIL_LOG = 0
    2012-09-30 12:13:54 -- info:
    Datastore not found.

    Datastore not found.

    Datastore not found.

    2012-09-30 12:13:56 -- debug: Storage Information before backup:
    2012-09-30 12:13:56 -- debug: SRC_DATASTORE: 500Gb
    2012-09-30 12:13:56 -- debug: SRC_DATASTORE_CAPACITY: 460.8 GB
    2012-09-30 12:13:56 -- debug: SRC_DATASTORE_FREE: 192.6 GB
    2012-09-30 12:13:56 -- debug: SRC_DATASTORE_BLOCKSIZE: 1
    2012-09-30 12:13:56 -- debug: SRC_DATASTORE_MAX_FILE_SIZE: 256 GB
    2012-09-30 12:13:56 -- debug:
    2012-09-30 12:13:56 -- debug: DST_DATASTORE: 4ffc1d91-7072de03-8fda-c860002a8330
    2012-09-30 12:13:56 -- debug: DST_DATASTORE_CAPACITY: 0.0 GB
    2012-09-30 12:13:56 -- debug: DST_DATASTORE_FREE: 0.0 GB
    2012-09-30 12:13:56 -- debug: DST_DATASTORE_BLOCKSIZE: NA
    2012-09-30 12:13:56 -- debug: DST_DATASTORE_MAX_FILE_SIZE: NA
    2012-09-30 12:13:56 -- debug:
    2012-09-30 12:13:56 -- info: Snapshot found for FREENAS 8.2, backup will not take place

    Datastore not found.

    Datastore not found.

    Datastore not found.

    2012-09-30 12:13:58 -- debug: Storage Information before backup:
    2012-09-30 12:13:58 -- debug: SRC_DATASTORE: 120gb
    2012-09-30 12:13:58 -- debug: SRC_DATASTORE_CAPACITY: 106.8 GB
    2012-09-30 12:13:58 -- debug: SRC_DATASTORE_FREE: 27.7 GB
    2012-09-30 12:13:58 -- debug: SRC_DATASTORE_BLOCKSIZE: 1
    2012-09-30 12:13:58 -- debug: SRC_DATASTORE_MAX_FILE_SIZE: 256 GB
    2012-09-30 12:13:58 -- debug:
    2012-09-30 12:13:58 -- debug: DST_DATASTORE: 4ffc1d91-7072de03-8fda-c860002a8330
    2012-09-30 12:13:58 -- debug: DST_DATASTORE_CAPACITY: 0.0 GB
    2012-09-30 12:13:58 -- debug: DST_DATASTORE_FREE: 0.0 GB
    2012-09-30 12:13:58 -- debug: DST_DATASTORE_BLOCKSIZE: NA
    2012-09-30 12:13:58 -- debug: DST_DATASTORE_MAX_FILE_SIZE: NA
    2012-09-30 12:13:58 -- debug:
    2012-09-30 12:13:58 -- info: Snapshot found for Windows R2, backup will not take place

    2012-09-30 12:13:58 -- info: ###### Final status: ERROR: All VMs failed! ######

    2012-09-30 12:13:58 -- debug: Succesfully removed lock directory - /tmp/ghettoVCB.lock

    2012-09-30 12:13:58 -- info: ============================== ghettoVCB LOG END ================================

    Не могу понять по какой причине размер выходного диска для бекапа видится нулевым:

    2012-09-30 12:13:56 -- debug: DST_DATASTORE_CAPACITY: 0.0 GB

    У кого-нибудь есть идеи в чем заключается проблема? Заранее благодарен!

  36. A.Vakhitov говорит:

    Добрый день.
    Во-первых, попробуйте указать то имя Datastore, которое указано у вас в vClient. Возможно, клиент не работает с ID’ом хранилища.
    Во-вторых, скрипт не поддерживает бэкап виртуальной машины с снапшотом.
    «Snapshot found for Windows R2, backup will not take place». Сначала необходимо удалить снапшоты.

  37. Alexey_C говорит:

    Вопрос по кластеру.
    Как поведёт себя скрипт, если у меня три хоста ESXi Standard объединены в кластер (стоит vCenter)?

    Предполагаю, что либо каждый хост будет видеть машины, работающие на других хостах, либо не будет.
    Если не будет, то будут проблемы. Машины ведь периодически «гуляют» между хостами.

    Есть VMa, в которой зарегистриорваны и хосты и vCenter, как это поможет?

  38. A.Vakhitov говорит:

    Скрипт первой версии (для ESXi free) устанавливается в консоль каждого ESXi, поэтому видеть ВМ с других хостов он не будет.
    Но там есть опция «-a» (если не ошибаюсь), которая говорит бэкапить все ВМ с хоста.
    Кроме того, у скрипта есть вторая версия (использующая платный ESXi как у вас), которую вроде бы можно поставить на vMA. Возможно, там этой проблемы нет — я со второй версией не сталкивался.

  39. Alekzandr говорит:

    И не ужели ни кто не столкнулся с тем, что ваши изменения в файле var/spool/cron/crontabs/root удаляются при перезагрузке?
    вот решение: http://www.jules.fm/Logbook/files/add_cron_job_vmware.html

  40. Андрей Вахитов говорит:

    Александр, спасибо.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *