Хочу поделиться с вами опытом о том, что у меня отняло море времени — о бэкапах виртуальных машин и обычных компьютеров. Как сделать дешево и красиво.

Пожалуй, начну с того, что если вы хотите бэкапы на VMWare, то готовьтесь платить. Бесплатный VMWare — это бесплатно до тех, пока речь не идет о миграциях, бэкапах и тому подобное. На этом месте можно начать бесконечный холивар, но без моего участия. Мои повествования будут только о Hyper-V на Windows Server 2012R2. Хотя часть статьи можно применить и к VMWare, но, вероятно, будут подводные камни.

Бэкапить на Hyper-V мы можем бесплатно, а точнее, теми средствами Windows, за которые мы уже заплатили, приобретая лицензии Windows Server. Для удобства работы с нашими бэкапами (к тому же за это мы тоже заплатили) будем использовать WDS и дедупликацию (может и групповые политики).

1. Бэкап изнутри виртуальных машин


1.1. Бэкап сегодняшнего дня


Насколько мы знаем, любой Windows умеет делать бэкап. Причем, любые настройки бэкапа Windows через интерфейс сводятся, в конечном счете, к фоновому использованию утилиты wbadmin. А что, собственно, умеет wbadmin? А умеет она делать как бэкап образа с системным разделом, так и бэкап отдельных папок. В данной части статьи нас интересует только бэкап образ (системного раздела). Остальное — это специфичные данные виртуальных машин и бэкапить нужно отдельно. Отсюда вывод: Не храните на системном разделе виртуальных машин (и на обычных компьютерах тоже) никакой ценной информации и баз данных, отдельных приложений. MS SQL Server / MS Exchange / «Сервер приложений 1С» и другое ставим только на не системные разделы или на отдельные диски.

Итак, что же нужно, чтобы бэкап отработал? А нужна всего лишь одна команда:

wbadmin.exe start backup -backupTarget:\\СерверБэкапа\ПапкаДляБэкапаВнутреннего -allCritical -quiet

На самом деле, для этой команды нужны особые права, но о них позже. Сейчас важно понять одну вещь. Данная команда делает не просто бэкап. Она делает инкрементальный бэкап. Причем, для серверных и настольных (клиентских) Windows бэкапы формируются разные. И разница заключается в том, что для серверных ОС у нас получатся снимки каждого бэкапа, а вот для настольных — снимок останется всегда только последний. Спросите, а что это за такой инкрементальный бэкап? А «инкрементальный» он остается, потому что бэкапим мы не весь образ, а только изменившуюся часть со времени последнего бэкапа (а значит и меньше трафика и быстрее создается бэкап).

Те, кто сталкивался с аналогичной ситуацией заметят, что бэкап всегда будет «инкрементальный» (полный). Так как бэкап происходит в нашем случае на сетевой диск. То есть для серверной Windows снимки остаются тоже только последние.

Позже, выявил, что нет никакой разницы в работе wbadmin на серверной и клиентской ОС. Разве, что разница есть в интерфейсе. wbadmin производит инкрементальный бэкап (кроме первого бэкапа), если указан жесткий диск в ключе -backupTarget (команда использует ключ по умолчанию -vssСopy). Или производит полный бэкап, если добавить ключ -vssFull.

1.2. Бэкап с историей предыдущих снимков


На данный момент, мы сделали бэкап образов виртуальных машин. Но это же у нас бэкап снимков только сегодняшнего дня. Завтра он будет совершенно другой… Но что будет, если бэкапить бэкапы? Да и ещё по-настоящему инкрементально. Так и поступим.

wbadmin.exe start backup -backupTarget:e: -allCritical -include:d: -quiet
#где диск D - бэкапы на сегодня, а диск E - бэкапы с историей

Но мне было этого недостаточно и я сделал так:

(
echo select vdisk file="\\СерверБэкапа2\ПапкаДляБэкапа2\ИмяБэкапаДляЭтогоСервера2.vhdx"
echo attach vdisk
) | diskpart

Скрипт подключает виртуальный диск из сети. После бэкапа подобный же скрипт отключает диск. ОС помнит, что у диска определена буква E. Но не дай бог подсунуть чужой диск с той же буквой E, бэкап отработает уже по полной (не инкрементально и на чужой диск). Имейте это в виду и используйте, букву, ближе к концу алфавита (X, Y, Z)…

Замечу сразу, если бэкап сегодняшний будет производиться параллельно с бэкапом с историей, то получим в итоге бэкап, который невозможно поднять.

Чтобы достать бэкап предыдущих дней можно воспользоваться интерфейсом (GUI) сервера, на котором производятся бэкапы с историей. Более того, все запуски команды wbadmin в консоли Windows знает и помнит. Служба восстановления даст возможность вам выбрать нужный архив в бэкапах с историей.

2. Бэкап файлов vhdx виртуальных машин


Производится легко и непринужденно:

wbadmin start backup -backupTarget:$BackupPath -hyperv:$VMList -Quiet

Но с некоторыми особенностями. Эта команда должна выполняться в PowerShell и с предварительным получением списка виртуальных машин в переменную. За подробным примером обращаемся в Google.

Бэкап виртуальных машин в Windows Server 2012 R2 идет с помощью моментальных снимков Hyper-V. Также замечу, что происходят приостановка работы виртуальных машин, если на них ядро Linux или отсутствуют Hyper-V драйвера. Я лично отказался бэкапить виртуальные машины таким способом. Причина в том, что на Windows Server 2012 (не R2) требовалось останавливать виртуальные машины до бекапа. Да и сейчас на Windows Server 2012 R2 приостановки Linux меня не устраивают, когда есть первый неплохой способ бэкапа. (в комментариях к данной статье есть замечание). После очередного обновления в Windows Server 2012 R2 бэкап любых виртуальных машин проходит без приостановок. ОС Linux также можно бэкапить «изнутри» с помощь Dump (CentOS, Ubuntu), но это отдельная тема с puppet'ами и другим ПО в моем случае.

3. Восстановление бэкапа и WDS


А теперь, по-моему мнению, самая полезная часть этой статьи про бэкапы.

WDS — это Windows Deployment Services (службы развертывания Windows) и часть функционала Windows Server 2012R2. Раньше эта служба называлась RIS, но я с ней не сталкивался. Вообщем, суть WDS проста. Прописались в DHCP (автоматически для DHCP Windows Server) в виде отдельных параметров и далее загружаем на компьютер по сети (такая настройка BIOS компьютера для загрузки по сети) через TFTP загрузчик WDS. Далее загрузчик WDS позволяет выбрать из доступных на ней образов «загрузчиков» Windows. Загрузчики бывают разные — это и образы загрузчиков установщика, и PE, и RE образы. Для загрузчика установщика ещё нужны образы самих Windows в WDS, но это в случае, если нужно установить Windows по сети. Нас интересуют RE образы, которые позволяют поднять машину из бэкапа.

Как и что работает в WDS подробно объяснять не буду. Но вот важные заметки:

  1. Если у вас загрузчик RE загружается на Hyper-V виртуальной машине по сети, но не работает клавиатура в ней. Поздравляю, ваш RE образ для WinXP или древнее и не знает о существовании Hyper-V драйверов.
  2. Если у вас система начинает восстанавливать бэкап, но останавливается. Удалите все разделы на жестком (на котором восстанавливается бэкап) и попробуйте заново. Только не забывайте, что бэкап может быть битый и после удаления всех разделов на жестком у вас может ничего не остаться от старой информации.
  3. Если бэкап с загрузкой UEFI, а вы хотите восстановить на комп без UEFI, то не стоит тратить время. Скорее всего развернуть бэкап не получится.
  4. Бэкап с загрузкой UEFI и разделами GPT можно восстанавливать на машины с другим процессором / материнкой, а вот с разделами MBR формата и с загрузкой обычного BIOS на другой машине развернуть вряд ли получится. Ну у меня точно не получалось.
  5. Если бэкап пытаться развернуть на диск с меньшим объемом, то сделать это не получится. Даже если диск в бэкапе был почти пуст. В этом случае помогает восстановление на виртуальную машину с динамическим диском. Далее уменьшение этого диска и создание нового бэкапа. Но такое можно только с загрузчиком UEFI в бэкапе (почему, читаем предыдущий пункт).
  6. Стоит перед восстановлением бэкапа отключить лишние диски, чтобы не затереть информацию на них.

4. Особенности дедупликации


Можно дедуплицировать работающие виртуальные машины. Можно дедуплицировать бэкапы сегодняшнего дня и можно дедуплицировать бэкапы с историей. Все это дает большой положительный плюс к объему жестких дисков (как для HDD, так и SSD). Но не стоит забывать о некоторых вещах:

  1. Если дедупликация будет работать с дисками с объемом более чем 1 ТБ, то оптимизатор дедупликации будет использовать очень много памяти.
  2. Если дедупликация будет работать с сжатыми данными, но с объемом сжатого более чем 10 ТБ, то длительность работы оптимизатора дедупликации будет слишком большим. Такое может получиться, если просто копировать данные ежедневно на дедуплицированный диск в разные папки.
  3. Бэкапы на HDD хранить можно и даже нужно, а вот рабочие виртуальные машины хранить на HDD в количестве больше 5-10 не стоит. К дедупликации это относиться с той лишь стороны, что дедупликация таких рабочих виртуальных машин сведет производительность HDD в ноль.

5. Групповые политики


Вот тут можно долго и по-разному реализовывать установку скрипта бэкапа с помощью GPO. Но хотелось бы обратить внимание на важные моменты:

  1. Бэкап проводить только от имени отдельной учетной записи пользователя.
  2. Не хранить скрипты с паролям в групповых политиках.
  3. Запускать скрипт с особыми правами на чтение всей информации системы.

Ну и, собственно, вывод: Бекап с помощью средств wbadmin возможен, вполне реализуем и главное жизнеспособен. Но только, если у вас есть время и много терпения на всякие мелочи. Так, например, в статье ничего не сказано, как проводить мониторинг успешно созданных бэкапов. Мне удалось сделать мониторинг на Zabbix, но об этом можно написать ещё пару статей… Надеюсь, статья будет вам полезна и сэкономит море бесценного времени.

Комментарии (28)


  1. gotch
    21.09.2015 12:35
    +1

    Просто отлично. Большой прогресс по сравнению с
    habrahabr.ru/post/267045


  1. gotch
    21.09.2015 13:17

    Подскажите, я не сталкивался с резервным копированием VM Linux средствами wbadmin. Знаю, что уже давно была проблема с, тем, что они встают на паузу.

    В блоге blogs.msdn.com/b/virtual_pc_guy/archive/2015/02/16/hyper-v-backup-doesn-t-interrupt-running-virtual-machines-anymore.aspx
    пишут, что

    The net result of this is that no matter what the guest operating system, and no matter what the state of the integration services inside the guest operating system, Hyper-V will never interrupt a running virtual machine as part of backing it up (anymore).


    Кто прав?


    1. midaw1
      21.09.2015 15:48

      Действительно, сейчас бэкапы виртуальной машины Linux делаются даже без приостановки. Проверил на виртуальной с Ubuntu 15.04. Хорошее замечание.


      1. gotch
        28.09.2015 09:22

        Отлично, будем иметь в виду


  1. reff
    21.09.2015 13:31

    Для VMware есть бесплатное ПО от Veeam.


    1. gotch
      21.09.2015 14:43

      Для Hyper-V есть бесплатное ПО от Veeam.
      Сути это не меняет. Veeam он же не делает уличную магию. Все средства резервного копирования используют сходные технологии создания консистентных резервных копий.


      1. Ghool
        21.09.2015 17:57
        -1

        Бесплатный Veem, вроде бэкапит ограниченное количество виртуалок с гипервизора.


    1. RazorBlade
      21.09.2015 15:36

      Только следует уточнить, что бесплатный Veeam не бэкапит бесплатный ESXi


  1. Ghool
    21.09.2015 17:58

    В Windows Backup мне больше всего мешала такая бага:
    Когда кончается место, куда надо бэкапить он просто переставал бэкапить (бэкап падал с ошибкой).
    Нашли ли вы решение данной проблемы или вы с ней не сталкивались?


    1. midaw1
      21.09.2015 21:04

      Если использовать wbadmin, то у вас есть так называемый ErrorLevel (ExitCode), возвращаемый приложением. Если использовать планировщик для запуска wbadmin, то он также отображает ErrorLevel в событиях Windows, относящихся к задаче планировщика. Если использовать расписание бэкапа в самой Windows (в любой), то по итогу задача бэкапа также будет в планировщике с результатом в событиях Windows. В конечном итоге именно события (Event) Windows у меня отлавливает Zabbix с каждой машины и в случае наличие более трех «не успешных» бэкапов — отправляет письмо на email (триггер Zabbix'а). Конечно же, я только предполагаю, что если ErrorLevel = 0, то значит архивация прошла успешно. В моем случае не было проблем с местом, но часто были проблемы с выключением компьютеров при бэкапе и потери сети и был ErrorLevel != 0. Ну и важно понимать, что бэкап считается рабочий, только если он полностью разворачивается.


      1. Ghool
        21.09.2015 21:23

        Ну, руками или сторонними скриптами это ясно, что можно сделать.
        Не понимаю, как MS сами этого не сделают.

        «Изкоробки» только одно решение — бэкапить на сетевой диск, будет всего одна копия каждый раз поверх.


        1. midaw1
          21.09.2015 21:40

          В ссылке из первого комментария к данной статье упоминается о System Center DPM. Именно она призвана «Изкоробки» решать задачи резервирования данных.


          1. Ghool
            21.09.2015 22:54

            А встроенный в винду бэкапер зачем?
            «Чтоб было»?


            1. realscorp
              22.09.2015 07:02

              System Center денег стоит, и немалых, а Windows Backup — уже включен в лицензию Windows.


              1. Ghool
                22.09.2015 11:05

                Ну, мне просто кажется, что раз уж MS рассказывает «а у нас бесплатный бэкап» — то допилить в нём работоспособность было бы хорошо.

                Проблема ведь в чём:
                Он не просто ничего не делает, если места нет.
                В нём нельзя задать опцию «храни только последние 3 копии» или там «только последний месяц».
                Если пользуешься гуёвым механизмом настройки — он в любом случае рано или поздно забьёт весь бэкап-диск и перестанет бэкапиться из-за отсутствия места.

                Что в серверном бэкапере (2008/r2), что в «домашнем» (Windows 7).


                1. midaw1
                  22.09.2015 11:23

                  Я так понимаю в серверной можно написать скрипт с удалением снимков из бэкапа. В «домашнем» Windows снимок у нас только один. Если не хватает место и для него, то тут явно проблема не в настройках…


                1. midaw1
                  22.09.2015 11:34

                  Возможно, все даже немного более функционально.

                  Хранение разных версий образов системы

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


                  1. Ghool
                    22.09.2015 11:40

                    Нет, хранится не только один снимок.

                    Вот в том то и дело, что старые образы не удаляются, когда кончается место.

                    Раздел «какие параметры...» штудировал, там предлагают выбрать опцию, «хранить только последние системные образы», но это не помогает.


                    1. midaw1
                      22.09.2015 11:50

                      Дай место для бэкапов и посмотри результат. Может бэкапам просто не хватает места для временных файлов…
                      Собственно, надо подробно разбираться в каждом случае.


                      1. Ghool
                        22.09.2015 12:12

                        Бэкапил диск на 2 терабайта, забитый на 1.5 терабайта.

                        Бэкапил на пустой диск объёмом 6 терабайт.
                        Забился весь диск и бэкапы прекратились с ошибкой «нет места».

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


                1. gotch
                  28.09.2015 09:25

                  Да нет у них ничего бесплатного. Есть «принудительно купленное», когда вы берете лицензию Datacenter и весь System Center в придачу. Только сразу появляется желание вместо SCVMM использовать vCenter, вместо DPM — Veeam, ConfigMgr просто не нужен.
                  Остается только OpsMgr да Orchestrator.


  1. coolmiha
    21.09.2015 19:10

    В версии Server Core команды wbadmin нет, верно? Подскажите, как бэкапить в таком случае.


    1. midaw1
      21.09.2015 20:47
      +1

      Гугл подсказывает, что есть команда «ocsetup WindowsServerBackup». Хотя мои скрипты начинаются с команды «dism /online /enable-feature /FeatureName:WindowsServerBackup». Думаю и то и другое должно отработать. Причем как на Server Core, так и на чистом Hyper-V.


    1. DikSoft
      21.09.2015 21:01
      +1

      Windows Backup:
      > dism /online /enable-feature /featurename:WindowsServerBackup
      командлеты для PowerShell:
      >dism /online /enable-feature /featurename:WindowsServerBackupCommandlet

      Опередили! :)


  1. realscorp
    22.09.2015 07:27

    В данной части статьи нас интересует только бэкап образ (системного раздела). Остальное — это специфичные данные виртуальных машин и бэкапить нужно отдельно. Отсюда вывод: Не храните на системном разделе виртуальных машин (и на обычных компьютерах тоже) никакой ценной информации и баз данных

    Откуда отсюда-то? :) Нет цепочки причина-следствие.

    К слову, Windows Backup умеет делать консистентные инкрементальные бэкапы виртуальных машин из самого гипервизора. То есть, в теории, можно сделать систему бэкапов значительно более простой, чем у вас.
    Но на практике у меня, например, возникает баг с гостевыми машинами, в которых виртуальные диски подключенны через virtual SCSI — при бэкапе скорость копирования данных из виртуальных машин рывками просаживается, а гипервизор начинает сыпать ошибками event ID 129 «Reset to device, \Device\RaidPort3, was issued» в события. В качестве workaround в интернетах предлагают заменить виртуальные SCSI на IDE-адаптеры, но для Generation 2 машин сделать это невозможно.
    Так что пока приходится запускать Windows Backup из самих гостевых машин.


    1. midaw1
      22.09.2015 08:57

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

      Ваша проблема похоже именно в timeout'ах, которые не умеет обрабатывать бэкап. С большой вероятностью её уже решают, Но если у вас есть «специфичные» данные на \Device\RaidPort3, то лучше бэкапить изнутри…


      1. realscorp
        22.09.2015 09:55

        MSSQL для примера требует делать собственные бэкапы на основе логов (логов произведенных транзакций).

        И непонятно, почему, кстати. Запросы к VSS все равно спускаются внутрь гостя средствами Integration services. MSSQL имеет свой VSS writer, wbadmin — свой VSS requester, почему бы им не сделать это?
        Хотя, в любом случае, никто не мешает делать отдельно бэкапы машин и отдельно, для капризных сервисов типа MSSQL — бэкапы данных средствами сервиса.

        С большой вероятностью её уже решают

        Судя по обсуждению на Technet, проблеме уже года два, а воз и ныне там, увы.


        1. midaw1
          22.09.2015 10:03

          С виртуализацией всегда была много проблем. Я вот мечтаю, чтоб уже заработала динамическая память в Hyper-V для Линукс. Она вроде и поддерживается официально, а последние дистрибутивы Ubuntu и CentOS с ней виснут.