Home » Виртуализация » Hyper-V » HVBackup - backup виртуальных машин hyper-v

HVBackup - backup виртуальных машин hyper-v

Хочу поделиться с вами простым и быстрым способом бесплатно бэкапить виртуальные машины, работающие под гипервизором hyper-v с помощью утилиты hvbackup. Если в режиме работы полноценного сервера с графическим интерфейсом это может быть не очень актуально, так как присутствует штатное средство для бэкапа, но если вы используете бесплатную версию Hyper-V Server, вопрос становится очень актуальным.

Онлайн-курс по устройству компьютерных сетей

На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.

Если вы еще не настроили бесплатный гипервизор hyper-v, рекомендую познакомиться с моим материалом на эту тему - Установка и настройка Windows Hyper-V Server 2019. Если у вас он уже настроен и встал вопрос о том, как быстро, удобно и бесплатно его забэкапить, то я рекомендую воспользоваться бесплатной утилитой HV Backup.

HVBackup описание утилиты для hyper-v

Основной целью проекта HVBackup было создание бесплатного, простого и эффективного решения для резервного копирования виртуальных машин hyper-v, работающих как в одиночном режиме, так и в кластере.

Утилита работает на всех версиях операционной системы, начиная с Windows Server 2008 и далее, как в графическом режиме, так и Server Core установках. Утилита поддерживает в том числе и бесплатную редакцию гипервизора Hyper-V Server.

HVBackup поддерживает app consistent и crash consistent бэкапы hyper-v, используя VSS, встроенный в систему. Существует множество коммерческих решений, основанных на таком же способе бэкапа виртуальных машин, но среди бесплатных мне известен только этот продукт.

Компания codeplex, производитель программы, утверждает, что она регулярно использует HVBackup в своей инфраструктуре, что гарантирует высокое качество работы и своевременные исправления или изменения.

Программа может запускаться из командной строки, вызываться из Powershell скриптов, либо быть встроенной в любое .Net приложение через соответствующую библиотеку.

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

Системные требования:
.Net Framework 3.5

Установка .Net Framework 3.5 в командной строке

Чтобы установить .Net Framework 3.5 необходимо выполнить следующие команды в Powershell.

Windows Server или Hyper-V Server 2012:

Install-WindowsFeature NET-Framework-Core

Windows Server 2008 или 2008 R2 (не core):

ocsetup NetFx3

Windows Server (core) или Hyper-V Server 2008 / 2008 R2:

ocsetup NetFx3-ServerCore

HVBackup пример использования

Выполнить полный VSS backup всех виртуальных машин хоста:

HVBackup -a -o d:\vm-backup

Выполнить полный VSS backup списка виртуальных машин (необходимо использовать кавычки, если имена машин содержат пробелы). Бэкап выполняется на удаленный сервер:

HVBackup -l "VM1,VM2" -o \\backup-server\wm-backup

Сделать полный бэкап виртуальных машин, список которых содержится в текстовом файле (каждая ВМ в отдельной строке):

HVBackup -f list.txt -o d:\wm-backup

Скрипт для автоматического бэкапа

Если вы хотите запланировать автоматическое выполнение резервного копирования, то удобнее всего сделать простой bat файл для этих целей и запланировать его исполнение. Создадим backup-all.cmd следующего содержания:

set BCKPATH="\\backup-server\wm-backup"

rem net use %BCKPATH% /user:<user> <password>

pushd %BCKPATH% && forfiles.exe -m *.zip -d -7 -c "cmd /c del @path"
popd

HVBackup.exe -a -o %BCKPATH% 1> log_out.txt 2> log_err.txt

Этот скрипт перед выполнением бэкапа всех виртуальных машин будет удалять zip файлы старше 7-ми дней в указанной директории. Пути и параметры вы можете подредактировать под свои нужды.

Теперь создадим запланированное задание на сервере для периодического выполнения резервного копирования созданным ранее скриптом:

schtasks.exe /create /tn HVBackup /tr c:\backup-all.cmd /sc DAILY /ru <username> /rp /st 01:00:00

Если необходимо удалить задание:

schtasks.exe /delete /tn HVBackup /f

Немедленное выполнение задания:

schtasks.exe /run /tn HVBackup

Параметры командной строки HVBackup

Использование: HVBackup.exe [options]

-b, --backup
Выполнить backup (по-умолчанию).
-r, --restore
Выполнить восстановление.
-f, --file
Текстовый файл, содержащий список виртуальных машин по одной в каждой строке.
-l, --list
Список виртуальных машин для бэкапа.
-a, --all
Резервное копирование всех виртуальных машин на сервере.
-n, --name
Если указано, то делается бэкап только перечисленных виртуальных машин.
-g, guid
Если указано, то делается бэкап перечисленных виртуальных машин по GUID.
-o, --output
Обязательный параметр. Конечная папка для архивов. Может быть в виде локального или сетевого пути.
--outputformat
Формат имени архива виртуальной машины. {0} имя машины, {1} GUID машины и {2} текущая дата и время. По-умолчанию: "{0}_{2:yyyyMMddHHmmss}.zip"
-s, --singlevss
Сделать один snapshot для всех виртуальных машин.
--help
Вывести справку по командам:

 

hvbackup

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

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

Есть хорошая возможность совместить HVBackup и бэкап серверов с rsync. Например, делать архивы локально на сервере с hyper-v, монтировать к linux серверу папку и с помощью rsync забирать zip файлы с виртуальными машинами. Либо сразу делать резервное копирование на линуксовую самбу, к примеру. По приведенной выше ссылки есть пример на эту тему.

Углубленный онлайн-курс по MikroTik.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

37 комментариев

  1. Александр

    Проблемка!( Программа не видит виртуальные машины! Если в конфиге указать -а, то запускается, не вижу виртуалки, до свидания! Если реально указать лист с названиями! Ворнинг!!! Виртуальная машина не найдена! Что с эти делать? Сталкивался кто?

    • Сергей

      К сожалению функция восстановления не работает. Не знаете, как восстановить машину? Ключ -r не работает.

  2. А как на Core установить пакет Visual C++ для Visual Studio?

  3. Zerox, привет.
    По ходу что-то не то сделал и обращаюсь за помощью.
    1. Установил .Net Framework 3.5
    2. По ссылке скачал утилитку
    3. Распаковал на гипервизор 2016 (редакция Core)

    при попытке запуска файла в повершеле (теперь он называется HyperVBackup.exe) сервер пишет следующее
    "HyperVBackup : Имя "HyperVBackup" не распознано как имя командлета, функции, файла сценария или
    выполняемой программы. Проверьте правильность написания имени, а также наличие и правильность пу
    ти, после чего повторите попытку."

  4. Алексей

    Как правильно установить программу? Я скачал архив с программой, распаковал на сервере c hyper v. Netframework 35 уже был установлен. Запускаю exe-шник с программой, после этого мелькнул экран с командной строкой и закрылся.

    • Так у меня вся статья на тему того, как пользоваться программой. Вы ее читали, или сразу комментировать пошли?

      • Алексей

        Статью я читал, но ни где написано что делать со скачанным архивом hvbackup. Ну да ладно проехали, сам разобрался. Другой вопрос, возникает ошибка при создании бэкапа:

        C:\Windows\system32>C:\HyperVBackup.v3\HyperVbackup.exe -l "Virt2" -o E:\WBADMIN\
        HyperVBackup 3
        Copyright (C) 2012 Cloudbase Solutions SRL
        Copyright (C) 2016/2017 Coliseo Software SRL
        [2020-07-22 13:32:11.1244] Info: HyperVBackup started at 22.07.2020 13:32:11

        Error: Не удалось загрузить файл или сборку "AlphaVSS.x64.dll" либо одну из их зависимостей. Не найден указанный модуль.
        в System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
        в System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
        в System.Reflection.Assembly.Load(AssemblyName assemblyRef)
        в Alphaleonis.Win32.Vss.VssUtils.LoadImplementation()
        в HyperVBackUp.Engine.BackupManager.BackupSubset(IDictionary`2 vmNamesMapSubset, Options options, ILogger logger)
        в HyperVBackUp.Engine.BackupManager.VssBackup(IEnumerable`1 vmNames, VmNameType nameType, Options options, ILogger logger)
        в HyperVBackup.Console.Program.Main(String[] args)
        [2020-07-22 13:32:11.7806] Error: System.IO.FileNotFoundException: Не удалось загрузить файл или сборку "AlphaVSS.x64.dll" либо одну из их зависимостей. Не найден указанный модуль.
        Имя файла: 'AlphaVSS.x64.dll'
        в System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
        в System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
        в System.Reflection.Assembly.Load(AssemblyName assemblyRef)
        в Alphaleonis.Win32.Vss.VssUtils.LoadImplementation()
        в HyperVBackUp.Engine.BackupManager.BackupSubset(IDictionary`2 vmNamesMapSubset, Options options, ILogger logger)
        в HyperVBackUp.Engine.BackupManager.VssBackup(IEnumerable`1 vmNames, VmNameType nameType, Options options, ILogger logger)
        в HyperVBackup.Console.Program.Main(String[] args)

        В чем может быть проблема?

  5. Алексей

    Добрый день! Можно ли восстанавливать бэкап на другом сервере с Hyper-V? Если можно напишите полную команду восстановления машины или пример восстановления

    • Можно. Я сейчас точно не помню, в каком формате на выходе бэкап у HVBackup, но вроде бы получается то же самое, что если бы вы сделали экспорт виртуальной машины. Соответственно, на другом сервере вам надо сделать импорт виртуальной машины из распакованного бэкапа от HVBackup. Если это не сработает, то можете просто на новом сервере создать виртуальную машину и указать для нее диск из архива HVBackup.

  6. На windows server 2016 core выдавало ошибку о том что отсутствует библиотека AlphaVSS.x64.dll или связанные с ней зависимости, чтобы решить проблему необходимо поставить пакет Visual C++ для Visual Studio 2015. Удачи!

  7. Сергей

    Пользуюсь благодаря вашей статье HVBackup'ером уже более двух лет. Очень доволен, вначале бекапил виртуалки на Hyper-V 2008 , сейчас развернул виртуалки на Hyper-V 2012, думал что прога не справится, мол старая версия, но всё хорошо. На 2012 все бекапит )))

    • Да, как простой и бесплатный вариант он неплох. Хотя мне кажется, лучше взять бесплатную редакцию Veeam. Я перестал использовать HVBackup, потому что он очень долго выполняет бэкап. Уж не знаю, почему так получается.

      • Потому, что он етиегомать использует только одно ядро!! у меня на 24х-ядерном сервере бекап выполняется на 15 часов дольше, чем на i5. И как заставить его использоваться остальныя ядра - я так и не понял.

        • точнее вот, нашлось:
          mt Enable multi-threaded compression (only for 7zip
          format)
          надо будет испробовать

  8. Андрей

    Спасибо большое. На сайте разработчика что-то для внутреннего пользования...
    А экзэшник я тоже искал и... не нашёл.
    Попробую юзать.
    Ещё раз спасибо большое за статью и за быстрый отклик

  9. Андрей

    Спасибо, что отозвались.
    В статье Вы пишите Создадим backup-all.cmd,
    а в нем HVBackup.exe...
    Чувствую, что вопрос мой очень глупый, но
    всё же просветите плиз.
    Буду очень благодарен

    • Моя ошибка в предыдущем комментарии. Давно не настраивал hyper-v. Сейчас посмотрел на своих серверах, там действительно .exe файл. Я почему-то подумал, что это был скрипт. Раньше в архиве был экзешник, а сейчас с сайта разработчиков я вообще не пойму, что скачивается. Похоже, что не скомпилированные источники. Попробую разобраться, если что, выложу ту версию, что есть у меня сейчас.

    • Нашел актуальную ссылку на экзешник:
      https://github.com/ColiseoSoftware/hypervbackup/releases
      Поправлю статью.

  10. Андрей

    А в архиве https://archive.codeplex.com/?p=hypervbackup нет EXE файла!??
    Или я что-то не понимаю

  11. Все работает, единственное что, как разбить бекап по емкости 2 гб.

    • Можно после бэкапа отдельным батником с помощью того же 7zip разбить архив на части.

  12. Дмитрий

    Интересно, а почему используются всевозможные надстройки на стандартную команду PowerShell export-VM?
    Она работает без всевозможных телодвижений и необходимости устанавливать .Net.

  13. platinumangel

    Спасибо автору за материал.
    Некоторое время использовал HVBackup по этой инструкции, метод работает, но есть недостатки:
    1. Очень долгое время выполнения
    2. С Одной VM на Win2008 у меня так и не смог снять снимок, пришлось бэкапить её отдельно wbadmin'ом. На их форуме такие проблемы часто постят, многим помогает перекомпиляция программы из исходников, я пробовать не стал.
    3. В архивах кроме собственно vhdx нередко попадаются avhdx, объединять приходится вручную. объединение не всегда происходит корректно.

    В итоге плюнул, перешёл на veeam backup free
    Инструкция: https://www.veeam.com/blog/ru/veeam-backup-free-edition-now-with-powershell.html
    Программа бесплатная, работает на порядок быстрее, проблем с ней не возникло.
    Настраивается тоже скриптами.
    Из минусов -- бесплатная версия делает только полные бэкапы, инкрементальные не умеет

    • Все верно. Veeam backup free более удобное средство. У самого все руки не доходят статью про него написать.

      • Оно то удобное, но скрипт повершеловский почему то изредка сбоит, и вместо очищения директории через 2 недели он начинает очищать свежесоданные бекапы. Я был удивлен когда старье лежит а новых нет хоть и отчет приходит как создан.

  14. Здравствуйте.
    Попробовал hvbackup. Не могу ее кому ни будь рекомендовать.
    Одну ВМ второго поколения с CentOS 7, вообще отказался бекапить , сказал "не могу создать snapshot".
    Вторую , VHDX 32Gb, бекапил 45 минут, и сжал слабо. Что мне делать с моими 15 ВМ, объемом около 1Tb ?
    Лучше уж Windows Server Backup (wbadmin). Благо он входит Hyper-V сервер, и очистку может делать по количеству последних копий.
    По скорости у меня к нему претензий не было, как сжимает не помню.
    С уважением.

    • Все верно, для больших машин это средство не подходит. Но в целом это проблема всех бэкаперов такого типа для любого гипервизора. Что в xen, что в kvm, бэкап всей машины из снепшота делается очень долго. Но что есть лучше из бесплатных решений?

      • Я же написал, Windows Server Backup. Он доступен как компонент сервера Hyper-V(Install-WindowsFeature Windows-Server-Backup), правда только в командной строке(wbadmin). Умеет работать с разделами, папками и виртуальными машинами. Может делать копии в локальные и сетевые папки. Поддерживает VSS, есть планировщик, работает довольно шустро.
        В полной версии сервера есть графическая оболочка.

  15. Initializing VSS
    Error: The requested object was a duplicate.
    как избавится от этой ошибки, перерыл весь интернет, ситуация такова, машины кластеризованы, попробывал на самой маленькой и второстепенной размер vhdx 20гб все получилось,а с монстрами типа 300гб выдает эту ошибку и хоть ты тресни.

  16. C:\HVBackup>HVBackup -l "Use***" -o D:\backup
    Cloudbase HyperVBackup 1.0 beta1
    Copyright (C) 2012 Cloudbase Solutions Srl
    http://www.cloudbasesolutions.com

    Initializing VSS

    Starting snapshot set for:
    Backup Using Child Partition Snapshot\Use***

    Volumes:
    D:\

    Component: "Backup Using Child Partition Snapshot\Use***"
    Archive: "D:\backup\Use***_20150807102330.zip"
    Entry: "Use***/Use***/Use***/Use***.vhd"
    .............Error: Не удалось найти указанный файл.
    в System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
    в System.IO.FileStream.ReadCore(Byte[] buffer, Int32 offset, Int32 count)
    в System.IO.FileStream.Read(Byte[] array, Int32 offset, Int32 count)
    в Ionic.Zip.SharedUtilities.ReadWithRetry(Stream s, Byte[] buffer, Int32 offs
    et, Int32 count, String FileName)
    в Ionic.Zip.ZipEntry._WriteEntryData(Stream s)
    в Ionic.Zip.ZipEntry.Write(Stream s)
    в Ionic.Zip.ZipFile.Save()
    в Cloudbase.Titan.HyperV.Backup.BackupManager.BackupFiles(String backupOutput
    Path, String backupOutputFormat, IList`1 components, IDictionary`2 volumeMap, ID
    ictionary`2 snapshotVolumeMap, IDictionary`2 vmNamesMap, Int32 compressionLevel)

    в Cloudbase.Titan.HyperV.Backup.BackupManager.BackupSubset(IDictionary`2 vmNa
    mesMapSubset, String backupOutputPath, String backupOutputFormat, Int32 compress
    ionLevel)
    в Cloudbase.Titan.HyperV.Backup.BackupManager.VSSBackup(IEnumerable`1 vmNames
    , VMNameType nameType, String backupOutputPath, String backupOutputFormat, Boole
    an singleSnapshot, Int32 compressionLevel)
    в Cloudbase.Titan.HyperV.Backup.CLI.Program.Main(String[] args)

    C:\HVBackup>

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

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

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar