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

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

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

Если у вас есть желание освоить Linux с нуля, не имея базовых знаний, рекомендую познакомиться с онлайн-курсом Administrator Linux.Basic в OTUS. Курс для новичков, для тех, кто хочет войти в профессию администратора Linux. Подробности по .

Если вы еще не настроили бесплатный гипервизор 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 файлы с виртуальными машинами. Либо сразу делать резервное копирование на линуксовую самбу, к примеру. По приведенной выше ссылки есть пример на эту тему.

Онлайн курс по Linux

Если у вас есть желание освоить операционную систему Linux, не имея подходящего опыта, рекомендую познакомиться с онлайн-курсом Administrator Linux. Basic в OTUS. Курс для новичков, адаптирован для тех, кто только начинает изучение Linux. Обучение длится 4 месяца. Что даст вам этот курс:
  • Вы получите навыки администрирования Linux (структура Linux, основные команды, работа с файлами и ПО).
  • Вы рассмотрите следующий стек технологий: Zabbix, Prometheus, TCP/IP, nginx, Apache, MySQL, Bash, Docker, Git, nosql, grfana, ELK.
  • Умение настраивать веб-сервера, базы данных (mysql и nosql) и работа с сетью.
  • Мониторинг и логирование на базе Zabbix, Prometheus, Grafana и ELK.
  • Научитесь командной работе с помощью Git и Docker.
Смотрите подробнее программу по .

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

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

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

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

  1. Аватар
    Алексей

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

    • Zerox

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

      • Аватар
        Алексей

        Статью я читал, но ни где написано что делать со скачанным архивом 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)

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

  2. Аватар
    Алексей

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

    • Zerox

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

  3. Аватар

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

  4. Аватар
    Сергей

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

    • Zerox

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

  5. Аватар
    Андрей

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

  6. Аватар
    Андрей

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

    • Zerox

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

    • Zerox

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

  7. Аватар
    Андрей

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

  8. Аватар

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

    • Zerox

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

  9. Аватар
    Дмитрий

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

  10. Аватар
    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
    Программа бесплатная, работает на порядок быстрее, проблем с ней не возникло.
    Настраивается тоже скриптами.
    Из минусов -- бесплатная версия делает только полные бэкапы, инкрементальные не умеет

    • Zerox

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

      • Аватар

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

  11. Аватар

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

    • Zerox

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

      • Аватар

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

  12. Аватар

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

  13. Аватар

    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 не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.