Где находится xml файл виртуальной машины

Обновлено: 06.07.2024

Процесс экспорта виртуальной машины средствами Hyper-V не составляет труда. Единственный параметр , который необходимо определить - путь сохранения файлов виртуальной машины. Для экспорта ВМ необходимо:

  1. Щелкнув правой кнопкой мыши на виртуальной машине выбрать пункт меню Экспорт.

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

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

Config.xml - файл , содержащий информацию об исходном местоположении файлов виртуальных жестких дисков экспортируемой машины.

В папке Virtual Machines находится .exp файл , содержащий сведения об экспортированной виртуальной машине. В ходе импорта данный файл преобразуется в конфигурационный xml - файл .

В папке Virtual Hard Disks находятся файлы виртуальных жестких дисков экспортированной машины.

В папке Snapshots содержит сведения о моментальных снимках виртуальной машины ( .avhd , .vsv , .bin ).

Импорт виртуальной машины

Отметим особенности импорта виртуальных машин Hyper - V:

  1. Импортировать в Hyper-V можно только виртуальные машины другого Hyper-V сервера. Импорт виртуальных машин Virtual PC или Virtual Server невозможен, поскольку конфигурация виртуальных машин, создаваемых этими решениями отличается от Hyper-V, несмотря на то, что все решения используют .vhd - файлы виртуальных жестких дисков.
  2. Виртуальную машину можно экспортировать только один раз. Как уже отмечалось, создаваемый при экспорте .exp - файл сведений о виртуальной машине, в процессе импорта преобразуется в xml - файл конфигурации. В связи с этим, при возникновении ошибок импорта единственным способом продолжения работы с импортируемой виртуальной машиной является создание новой с аналогичной конфигурацией на основе уже имеющихся файлов виртуальных жестких дисков.

Для импорта виртуальной машины необходимо:

  1. Выбрать пункт "Импорт виртуальной машины" меню Действие диспетчера Hyper -V.

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

Снимки виртуальной машины (snapshot)

Снимком называется состояние виртуальной машины на определенный момент времени. Снимки используются для хранения информации о состояниях и возврата к ним, в случае необходимости (отмена внесенных изменений с момента создания снимка).

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

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

После создания снимка появится соответствующий значок на панели "Снимки" диспетчера Hyper-V.

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

Как показано на рис. 10.9, доступны следующие действия работы со снимками:

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

Краткие итоги.

В рамках данной практики были рассмотрены возможности Hyper-V для экспорта и импорта виртуальных машин, а также по созданию снимков состояния виртуальной машины. Функции экспорта и импорта используются для переноса виртуальной машины с одного Hyper-V сервера на другой.

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

Всем привет, ранее мы с вами рассмотрели, что такое виртуализаиция, и для чего она используется. Как вы уже знаете, за счет виртуализации, на хосте vmware esxi и Hyper-V запускаются виртуальные машины. Сегодня мы разберем, что из себя представляют эти виртуальные машины, какие они бывают.

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

Виды гипервизоров

Основными игроками на данном рынке, являются конечно, компания VMware с продуктом vmware esxi и MS с Hyper-V, proxmox или openstack. Раньше был XenServer, но он сдался и перестал вести конкуренцию с данными компаниями. Это виртуализация первого уровня, имеется в виду, что сами гипервизоры ставятся на голое железо, а уже поверх них виртуальные машины. Существуют еще и гипервизоры второго уровня, ее еще называют вложенная виртуализация, те которые ставятся в операционной системе в виде программы и дальше позволяют уже внутри ОС, создавать виртуальные машины, это называется еще паравиртуализация. Примерами может быть VMware Workstation или Virtual Box. На сайте виртуализации посвящено более 300 статей, советую ознакомится.

Что такое виртуальная машина?

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

что такое виртуальная машина

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

Если обратиться к Википедии, то (Virtual Machine или VM) - это система в задачи которой входит эмулирование аппаратного обеспечения или различных платформ. Сама виртуальная платформа умеет эмулировать, как отдельные аппаратные части, так и целые компьютеры или другое оборудование, например сетевые роутеры Juniper или Cisco, которые уже давно выпускают аналоги своих физических железок в виде виртуальных эплаинсов (Виртуальных машин), которые могут работать на физических серверах с гипервизорами и не привязываться к оборудованию, благодаря миграции.

Где применяются виртуальные машины?

Область применения виртуальных машин огромна, я постараюсь вам ниже перечислить основные направления:

  • Равномерное распределение ресурсов мощных серверов - Это нормальная практика, что при покупке мощного физического сервера, вы хотите использовать его по полной программе. Если вы просто поставите на него операционную систему и развернете сервис, то с большой вероятностью, сервер будет сильно недозагружен. Выходом из такой ситуации и консолидация ресурсов, это установка гипервизора, в рамках которого вы будите создавать виртуальные машины, у каждой будет своя задача, и вы сможете максимально задействовать все доступные возможности железа. Так например у меня в компании огромный штат серверов Power Edge R740, на борту которого 1,5 тб ОЗУ и два мощных серверных процессора Intel по 18 ядер, вот их виртуальные машины смогут с лихвой использовать и принести гораздо больше пользы. Плюсом такого решения является, то что виртуальные машины независимы друг от друга, и их можно обслуживать не затрагивая соседей.
  • Тестирование новых операционных систем - Данное решение подойдет, для изучения новых операционных систем, так и для тестирования каких-то функций, ролей, настроек. Очень мощным плюсом в таком подходе, то что вы все делаете в рамках изолированных виртуальных машин, сломав которые вы не нанесете вреда своей инфраструктуре. Еще есть огромный бонус, это снапшоты, которые позволяю вам быстро откатываться на любое состояние виртуальной машины, удобно при тестах.
  • Запуск старого и несовместимого программного обеспечения - Простой пример, у вас есть старое ПО, которое уже давно не обновляется и не поддерживается, например со стороны Windows 10, или принтер, который не имеет драйверов для той же десятки и вы не хотите покупать новое, когда работает старое. Выходом из ситуации является установка виртуальной машины с нужной версией ОС, где вы легко будите использовать нужное, устарелое ПО или оборудование, которое легко пробрасывается внутрь виртуальной машины. Кроме того, запускать устаревшее программное обеспечение таким способом намного безопаснее, поскольку оно изолировано внутри виртуальной машины.
  • Разработка программного обеспечения для других платформ - Еще одно важное применение виртуальных машин - это упрощение рабочего процесса для тестирования приложений и веб-сайтов на нескольких платформах. Например, предположим, что вы разрабатываете игру, которая работает как на настольных, так и на мобильных платформах. Вы можете использовать эмуляцию для тестирования различных версий прямо на вашем компьютере. Вместо того, чтобы перемещать файлы установщика туда и обратно на телефон и другие тестовые компьютеры, вы можете просто имитировать их. Виртуализация также позволяет компилировать исполняемые файлы других типов. Даже если вы используете кросс-платформенный Фреймворк, вы можете скомпилировать только файлы APP на Mac и файлы EXE на Windows. Вместо двойной загрузки для каждой сборки виртуализация упрощает процесс. Иногда нет замены запуску приложений на реальном оборудовании, поскольку эмуляция не идеальна. Но для многих целей эмуляция - это удобный способ получить доступ к другим ОС без особых проблем.
  • Безопасное обращение с потенциально вредоносным ПО - Как мы видели, одним из основных преимуществ виртуальной машины является ее изоляция от вашей основной системы. Это означает, что вы можете пойти на риск, которого обычно избегаете. Вы легко можете проверять в рамках виртуальной машины антивирус и вирусы, вредоносное ПО, методы лечения компьютера. При этом не затрагивая вашу основную систему.

Форматы файлов виртуальных машин

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

Виртуальная машина (VM) в Vmware esxi

У виртуальных машин vmware esxi, основной формат файлов это vmdk, в данном файле хранится по сути сам жесткий диск подключаемый к виртуальной машине. На скриншоте ниже представлены файлы реальной виртуалки, про остальные форматы советую прочитать в Описание форматов ESXI.

Виртуальная машина esxi

Виртуальная машина esxi

Виртуальная машина (VM) в MS Hyper-V

Виртуальная машина microsoft, не может к счастью, а может быть и наоборот, таким большим набором файлов. Безусловно, удобно иметь один отдельный файл с жестким диском и один с настройками BIOS и железа. У Hyper-V есть старый формат и новый. Старый это vhd, был до 2010 года в версии Hyper-V 2.0. С выходом Windows Server 2012 R2, и Hyper-V 3.0 формат файла поменяли на vhdx. В файлике xml хранятся настройки виртуальной машины.

Виртуальная машина microsoft

Виртуальная машина microsoft

Виртуальная машина (VM) в xenserver

Xenserver имеет формат XVA у виртуальной машины. На скришоте приведен пример.

Виртуальная машина

Виртуальная машина (VM) в VMware Workstation

VMware Workstation, так же как и Vmware esxi хранит фалы в тех же форматах vmdk. Заметьте структура строения виртуальной машины такая же. Очень удобно, но чтобы ее завести на гипервизоре ESXI, необходимо произвести конвертирование vm.

VMware Workstation

Виртуальная машина (VM) в VirtualBox

У VirtualBox естественно свой формат виртуальной машины, а именно vdi. Его так же можно переконвертировать во что вам нужно.

VirtualBox

Виртуальная машина (VM) в Proxmox

Proxmox использует формат qcow2. Набирающий сейчас популярность, гипервизор. Так же как и VirtualBox, полностью бесплатный.

Proxmox использует формат qcow2

Виртуальная машина на KVM

Что такое KVM - это виртуальная машина на основе ядра (KVM) - это технология виртуализации с открытым исходным кодом, встроенная в Linux. В частности, KVM позволяет превратить Linux в гипервизор, который позволяет хост-машине запускать несколько изолированных виртуальных сред, называемых гостевыми или виртуальными машинами (ВМ).

Если у вас Linux 2.6.20 или новее, у вас есть KVM. KVM был впервые анонсирован в 2006 году, а годом позже был объединен с основной версией ядра Linux. Поскольку KVM является частью существующего кода Linux, он немедленно извлекает выгоду из каждой новой функции, исправления и усовершенствования Linux без дополнительной разработки.

Как работает KVM?

KVM превращает Linux в гипервизор типа 1 (без операционной системы). Всем гипервизорам необходимы некоторые компоненты уровня операционной системы, такие как диспетчер памяти, планировщик процессов, стек ввода/вывода, драйверы устройств, диспетчер безопасности, сетевой стек и многое другое - для запуска виртуальных машин. KVM имеет все эти компоненты, потому что это часть ядра Linux. Каждая виртуальная машина реализована как обычный процесс Linux, запланированный стандартным планировщиком Linux, с выделенным виртуальным оборудованием, таким как сетевая карта, графический адаптер, процессор (ы), память и диски.

Виртуальные машины в публичных облаках

На момент написания статьи уже почти 2021 год, пандемия показала, что многие бизнесы можно и нужно переформатировать от облачного варианта в онлайн. Многим компаниям аренда серверных мощностей в публичном облаке выходит дешевле, чем содержать свой штат физических серверов и администраторов. Логично, что на данном рынке сразу появилось огромное количество игроков, кто за умеренную плату позволит вам на их мощностях запустить нужное количество виртуальных машин. Вот список основных игроков:

Product Site
Documentation Site

Глава 15. Управление виртуальными машинами с помощью virsh

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

virsh использует libvirt API и служит альтернативой xm и графическому менеджеру виртуальных машин ( virt-manager ). Непривилегированные пользователи могут выполнять доступ в только в режиме чтения. С помощью virsh можно исполнять сценарии для виртуальных машин.

Обзор команд virsh

Приведенные ниже таблицы содержат перечень основных параметров командной строки virsh.

Команда Description
help Краткая справка.
list Просмотр всех виртуальных машин.
dumpxml Вывести файл конфигурации XML для заданной виртуальной машины.
create Создать виртуальную машину из файла конфигурации XML и ее запуск.
start Запустить неактивную виртуальную машину.
destroy Принудительно остановить работу виртуальной машины.
define Определяет файл конфигурации XML для заданной виртуальной машины.
domid Просмотр идентификатора виртуальной машины.
domuuid Просмотр UUID виртуальной машины.
dominfo Просмотр сведений о виртуальной машине.
domname Просмотр имени виртуальной машины.
domstate Просмотр состояния виртуальной машины.
quit Закрыть интерактивный терминал.
reboot Перезагрузить виртуальную машину.
restore Восстановить сохраненную в файле виртуальную машину.
resume Возобновить работу приостановленной виртуальной машины.
save Сохранить состояние виртуальной машины в файл.
shutdown Корректно завершить работу виртуальной машины.
suspend Приостановить работу виртуальной машины.
undefine Удалить все файлы виртуальной машины.
migrate Перенести виртуальную машину на другой узел.
Таблица 15.1. Команды управления виртуальными машинами

Для управления ресурсами виртуальной машины и гипервизора используются следующие команды virsh :

Команда Description
setmem Определяет размер выделенной виртуальной машине памяти.
setmaxmem Ограничивает максимально доступный гипервизору объем памяти.
setvcpus Изменяет число предоставленных гостю виртуальных процессоров.
vcpuinfo Просмотр информации о виртуальных процессорах.
vcpupin Настройка соответствий виртуальных процессоров.
domblkstat Просмотр статистики блочных устройств для работающей виртуальной машины.
domifstat Просмотр статистики сетевых интерфейсов для работающей виртуальной машины.
attach-device Подключить определенное в XML-файле устройство к гостю.
attach-disk Подключить новое дисковое устройство к гостю
attach-interface Подключить новый сетевой интерфейс к гостю
detach-device Отключить устройство от гостя (принимает те же определения XML, что и attach-device ).
detach-disk Отключить дисковое устройство от гостя.
detach-interface Отключить сетевой интерфейс от гостя.
Таблица 15.2. Параметры управления ресурсами
Команда Description
version Просмотр версии virsh .
nodeinfo Просмотр информации о гипервизоре.
Таблица 15.3. Другие команды
Подключение к гипервизору

Where <name> is the machine name of the hypervisor. To initiate a read-only connection, append the above command with -readonly .

Создание XML-файла конфигурации виртуальной машины

This command outputs the guest's XML configuration file to standard out ( stdout ). You can save the data by piping the output to a file. An example of piping the output to a file called guest.xml : This file guest.xml can recreate the guest (refer to Редактирование файла конфигурации виртуальной машины. You can edit this XML configuration file to configure additional devices or to deploy additional guests. Refer to Раздел 18.1, «Использование файлов конфигурации с помощью virsh» for more information on modifying files created with virsh dumpxml .

Создание виртуальной машины на основе файла конфигурации

Guests can be created from XML configuration files. You can copy existing XML from previously created guests or use the dumpxml option (refer to Создание XML-файла конфигурации виртуальной машины). To create a guest with virsh from an XML file:

Редактирование файла конфигурации виртуальной машины

Instead of using the dumpxml option (refer to Создание XML-файла конфигурации виртуальной машины) guests can be edited either while they run or while they are offline. The virsh edit command provides this functionality. For example, to edit the guest named softwaretesting :

Откроется окно текстового редактора, заданного переменной оболочки $EDITOR (по умолчанию используется vi ).

Приостановка виртуальной машины

Команда приостановки виртуальной машины с помощью virsh :

When a guest is in a suspended state, it consumes system RAM but not processor resources. Disk and network I/O does not occur while the guest is suspended. This operation is immediate and the guest can be restarted with the resume (Возобновление работы виртуальной машины) option.

Возобновление работы виртуальной машины

Возобновить работу приостановленной виртуальной машины можно с помощью параметра resume команды virsh :

Работа машины будет возобновлена немедленно. Параметры будут сохраняться между циклами suspend и resume .

Сохранение виртуальной машины

Команда сохранения текущего состояния виртуальной машины:

This stops the guest you specify and saves the data to a file, which may take some time given the amount of memory in use by your guest. You can restore the state of the guest with the restore (Восстановление виртуальной машины) option. Save is similar to pause, instead of just pausing a guest the present state of the guest is saved.

Восстановление виртуальной машины

Restore a guest previously saved with the virsh save command (Сохранение виртуальной машины) using virsh :

Сохраненная машина будет восстановлена из файла и перезапущена, что может занять некоторое время. Имя и идентификатор UUID виртуальной машины останутся неизменными, но будет предоставлен новый идентификатор домена.

Завершение работы виртуальной машины

Поведение выключаемого гостя можно контролировать с помощью параметра on_shutdown в его файле конфигурации.

Перезагрузка виртуальной машины

Поведение перезагружаемого гостя можно контролировать с помощью параметра on_reboot в его файле конфигурации.

Принудительная остановка виртуальной машины

This command does an immediate ungraceful shutdown and stops the specified guest. Using virsh destroy can corrupt guest file systems . Use the destroy option only when the guest is unresponsive. For para-virtualized guests, use the shutdown option(Завершение работы виртуальной машины) instead.

Определение идентификатора домена

Команда определения идентификатора домена виртуальной машины:

Определение имени домена

Команда определения имени домена виртуальной машины:

Определение UUID

Команда определения универсального идентификатора UUID виртуальной машины:

Получение информации о виртуальной машине
Получение информации об узле

Вывод содержит информацию об узле и машинах, поддерживающих виртуализацию.

Просмотр списка виртуальных машин

Команда для просмотра списка виртуальных машин и их состояния:

--inactive покажет список неактивных доменов (неактивным считается тот домен, который был определен, но в настоящий момент не является активным).

--all покажет все виртуальные машины независимо от их состояния. Пример:

running — работающие виртуальные машины, то есть те машины, которые используют ресурсы процессора в момент выполнения команды.

blocked — заблокированные, неработающие машины. Такой статус может быть вызван ожиданием ввода/вывода или пребыванием машины в спящем режиме.

paused — приостановленные домены. В это состояние они переходят, если администратор нажал кнопку паузы в окне менеджера виртуальных машин или выполнил команду xm pause или virsh suspend . В приостановленном состоянии гость продолжает потреблять ресурсы, но не может занимать больше процессорных ресурсов.

shutdown — виртуальные машины, завершающие свою работу. При получении виртуальной машиной сигнала завершения работы, она начнет завершать все процессы. Стоит отметить, что некоторые операционные системы не отвечают на такие сигналы.

dying — сбойные домены и домены, которые не смогли корректно завершить свою работу.

crashed — сбойные домены, работа которых была прервана. В этом состоянии домены находятся, если не была настроена их перезагрузка в случае сбоя.

Получение информации о виртуальных процессорах

Команда получения информации о виртуальных процессорах:

Настройка соответствий виртуальных процессоров

Команда сопоставления виртуальных процессоров физическим:

Здесь vcpu — номер виртуального процессора, а список_cpu — сопоставляемые ему физические процессоры.

Изменение числа виртуальных процессоров

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

Изменение выделенного объема памяти

Команда изменения выделенного виртуальной машине объема памяти:

Объем памяти, определяемый заданным числом, должен быть указан в килобайтах. Обратите внимание, что объем не может превышать значение, определенное при создании виртуальной машины, но в то же время не должен быть меньше 64 мегабайт. Изменение максимального объема памяти может оказать влияние на функциональность гостя только в том случае, если указанный размер меньше исходного. В таком случае использование памяти будет ограничено.

Получение информации о блочных устройствах

Команда для получения информации о блочных устройствах работающей виртуальной машины:

Получение информации о сетевых устройствах

Команда для получения информации о сетевых интерфейсах работающей виртуальной машины:

Миграция виртуальных машин

virsh позволяет переносить виртуальные машины с одного узла на другой. Для выполнения живой миграции просто нужно указать параметр --live . Команда переноса выглядит так:

The GuestName parameter represents the name of the guest which you want to migrate.

The DestinationURL parameter is the URL or hostname of the destination system. The destination system must run the same version of Fedora, be using the same hypervisor and have libvirt running.

Once the command is entered you will be prompted for the root password of the destination system.

Управление виртуальными сетями

В этой секции будет рассмотрены управляющие команды virsh . Например, команда просмотра списка виртуальных сетей выглядит так:

virsh net-autostart имя_сети — автоматический запуск заданной сети.

virsh net-create файл_XML — создание и запуск новой сети на основе существующего XML-файла.

virsh net-define файл_XML — создание нового сетевого устройства на основе существующего XML-файла. Устройство не будет запущено.

virsh net-name UUID_сети — преобразование заданного идентификатора в имя сети.

virsh net-uuid имя_сети — преобразование заданного имени в идентификатор UUID.

virsh net-start имя_неактивной_сети — запуск неактивной сети.

virsh net-undefine имя_неактивной_сети — удаление определения неактивной сети.

В наличии папка с конфигурационными файлами виртуальной машины и снепшотов (xml) и файлы виртуальных дисков и снепшотов vhd и avhd.

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

Цель: подключить виртуальную машину со всеми снепшотами.

Итак, для начала создаем новую виртуальную машину с именем DeleteMe в папке c:\VMs.

Рисунок 1. Создание виртуальной машины.


Далее создаем через консоль Hyper-V Manager несколько снепшотов. Обратите внимание на имя файла для HDD на IDE Controller 0 и параметры сети.

Рисунок 2. Настройки виртуальной машины.


Посмотрим, что же мы получили с папке c:\VMs после выполнения этих операций.

Для новой виртуальной машины создана папка с именем виртуальной машины. Внутри этой папки расположены файлы жестких дисков и снепшотов и папки с конфигурацией виртуальной машины Virtual Machines и с конфигурацией снепшотов Snapshots.

Рисунок 3. Папка C:\VMs\DeleteMe.


Рисунок 4. Папка C:\VMs\DeleteMe\Snapshots.


Рисунок 5. Папка C:\VMs\DeleteMe\Virtual Machines.


Итак, исходная конфигурация готова.

Пора «терять» виртуальную машину.

Для простоты эксперимента остановим управляющий сервис гипервизора через консоль Hyper-V Manager и скопируем всю папку DeleteMe.

Дополнительно подстрахуемся при помощи Volume Shadow Copy. Использование Volume Shadow Copy для диска, на котором расположен файл конфигурации виртуальной машины и на системном разделе – неплохой вариант восстановления правильной конфигурации или всей виртуальной машины, которая была случайно удалена. Но вот по поводу использования Volume Shadow Copy для раздела, где расположены диски и снепшоты виртуальных машин – тут меня терзают сомнения. Copy on Write приведет к дополнительным издержкам при записи. Особенно, если для хранения Shadow Copy используется не отдельный выделенный диск, а свободное место на том же разделе.

Итак, подстелили соломку, включили управляющий сервис гипервизора и удаляем виртуальную машину через консоль Hyper-V Manager.

Рисунок 6. Удаление виртуальной машины DeleteMe.


После этого сравним содержимое папки C:\VMs\DeleteMe до и после операции.

Обратите внимание на значение полей Location и Contains.

Рисунок 7. Папка C:\VMs\DeleteMe до и после удаления виртуальной машины.


Почему удалена половина файлов? Почему файлов было 12? Не скажу. Жду Ваши предположения в комментариях J

Итак, пора приступать к восстановлению.

Останавливаем управляющий сервис гипервизора. Копируем содержимое папки DeleteMe обратно. В боевой ситуации этот шаг соответствует восстановлению/переустановке сервера или подключению дисков к другому серверу.

Вот и начинается самое интересное… Как объяснить службе гипервизора, что необходимо прочитать конфигурацию виртуальной машины из некоторого файла в файловой системы. За внутренности работы Hyper-V отвечает папка скрытая C:\ProgramData\Microsoft\Windows\Hyper-V. В ней содержится файл управления ролевым доступом к Hyper-V InitialStore.xml, а также папки Virtual Machines и Snapshots. Основной фокус в том, что при создании виртуальной машины через Hyper-V Manager в этих папках создаются NTFS hardlinks на соответствующие конфигурационные файлы. Таким образом, задача сводится к созданию hardlinks.

Создаем hardlink при помощи оманды mklink в административной командной строке.

Рисунок 8. Создание hardlink для конфигурационного файла виртуальной машины.


Запускаем управляющий сервис гипервизора и видим, что в консоли ничего не появилось…

Все пропало… Гипс сняли, а бриллиантов то там давно и нету…

Зато в журнале событий есть письмо от расстроенного гипервизора:

Рисунок 9. Ошибка загрузки конфигурации виртуальной машины.


Проверьте ACL объекта hardlink для виртуальной машины, созданной при помощи Hyper-V Manager. В нашем hardlink отсутствует SID виртуальной машины с разрешениями Full Control.

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

Останавливаем управляющий сервис гипервизора.

Модификацию ACL выполняем при помощи cacls.

Рисунок 10. Модификация ACL для hardlink конфигурационного файла виртуальной машины.


Обратите внимание на имя Security Principal NT VIRTUAL MACHINE\<GUID>.

Запускаем управляющий сервис гипервизора.

Открываем консоль Hyper-V Manager. О, чудо. Виртуальная машина тут.

Но без снепшотов и с потерянной сетью. Обратите внимание, что диск подключен к правильному avhd файлу. Т.е. виртуальная машина уже находится в последнем активном состоянии, но без возможности удалить или применить нужный снепшот.

Рисунок 11. Конфигурация виртуальной машины.


Заглянем снова в журнал событий.

Рисунок 12. Ошибка загрузки снепшотов.


И снова закинул старик свой невод…Потемнело синее море…Давно старик не стирал свой невод…

В смысле опять останавливаем управляющий сервис гипервизора.

Необходимо создать hardlink для каждого снепшота и добавить разрешение Full Control для SID виртуальной машины в каждый hardlink.

Рисунок 13. Создание hardlink и изменение ACL для снепшота.


Запускаем управляющий сервис гипервизора и о чудо…

Рисунок 14. Консоль Hyper-V Manager. Виртуальная машина с подключенными снепшотами.


Для того, чтобы счастье не только было видно в консоли, но и можно было использовать, осталось предоставить SID виртуальной машины доступ Full Control к папке с конфигурационными и дисковыми файлами виртуальной машины.

Рисунок 15. Изменение ACL папки DeleteMe


Вуаля. Теперь можно изменить конфигурацию виртуальной машины, сменить активный снепшот и начать поиск решения для автоматического выбора правильного сетевого интерфейса для виртуальной машины…

P.S. Протестировано и отскриншотено внутри виртуальной машины.

P.P.S. Комментарии и отзывы приветствуются!

Share this:

Понравилось это:

Похожее

При запуске cacls в windows 2008 r2 выводится предупреждение, что cacls устаревший инструмент и лучше использовать icacls. Так что принципиальной разницы нет. Хотя ключи могут немного отличаться.

Тоха, спасибо за ключики для icacls

Саша, статью как пить дать нужно добавлять в TechNet Wiki -)

А нельзя ли увеличить скриншоты?

Подскажите, на Рисунок 13, что написано во втором абзаце? На Рисунок 15 тоже не могу прочитать команду. Прошу подсказать.

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

P13
Mklink .xml \.xml
Cacls .xml /L /E /G “NT VIRTUAL MACHINE”\:F
P15
Cacls /T /E /G “NT VIRTUAL MACHINE”\:F

Работает только Mklink CD151E17-1BD0-4DAF-BBA9-3444360E00ED.xml \CD151E17-1BD0-4DAF-BBA9-3444360E00ED.xml

Не работают Cacls CD151E17-1BD0-4DAF-BBA9-3444360E00ED.xml /L /E /G “ВИРТУАЛЬНАЯ МАШИНА NT”\:F или Cacls CD151E17-1BD0-4DAF-BBA9-3444360E00ED.xml /L /E /G “NT VIRTUAL MACHINE”\:F

Cacls /T /E /G “NT VIRTUAL MACHINE”\:F

Что не правильно делаю?

Здравствуйте, коллеги!
Отличная статья.
Есть вопрос. Умирает Hyper-V Core, сама система на одном логическом томе, все ВМ на другом. Доступ к папке C:\ProgramData\Microsoft\Windows\Hyper-V имеется. Если я скопирую вышеуказанную папку в другое место, переустановлю гипервизор, и залью папку обратно, заработают ли без танцов с бубном ВМ? Все ВМ без снапшотов.
Спасибо!

Вот нормальный синтаксис для тех кто ещё попадет на эту страницу:

Читайте также: