Взаимодействие Hyper-V 3.0 и реестра управляющей ОС + сравнение с 2008 R2

Взаимодействие Hyper-V 3.0 и реестра управляющей ОС + сравнение с 2008 R2

Всем привет! 

Не раз сталкивался с заявлениями, что ВСЯ конфигурация виртуальной машины хранится в 1 файле XML и не более. Заявление это считаю не совсем корректным. Да, в XML хранится довольного много "конфигурационных наметок" (не сюрприз, если понимать, что XML = язык разметки) и именно vm_guid.xml является главным конфигурационным файлов для виртуальной машины(ВМ), но для работы самой ВМ и её представление в среде Hyper-V требуется чуть более, нежели сам файл XML.  И этим "более" является реестр управляющей операционной системы (ОС).  Цель этой статьи дать общее (не путать с подробным) представление о работе Hyper-V на примерах cmdlet'ов (get- ..., set-....) совместно с реестром.


При создании ВМ:



PS C:\Windows\system32> New-VM -Name WikiTest1 -NoVHD -Generation 2
 
Name      State CPUUsage(%) MemoryAssigned(M) Uptime   Status
----      ----- ----------- ----------------- ------   ------
WikiTest1 Off   0           0                 00:00:00 Operating normally

Служба Virtual Machine Management отправляет запрос на создание файл VM_GUID.XML  в папке Virtual Machines (по умолчанию), т.е. для виртуальной машины WikiTest1 создался XML-файл EF259B05-2CDE-4317-8ACF-E80CB364D66C.xml. При добавлении,к примеру, ещё одного адаптера без подключения к VM Switch - VMMS так же сделает запрос на WriteFile и обновит XML-файл новым GUID-портом (обратите внимание, что PortName + SwitchName не определены)

<type_id type="string">Virtual Machines</type_id>
    <version type="integer">1280</version>
  </properties>
  <settings>
    <global>
      <logical_id type="string">EF259B05-2CDE-4317-8ACF-E80CB364D66C</logical_id>
    </global>
         .
    <PortName type="string"></PortName>
    <SwitchName type="string"></SwitchName>
         .
<vdev013>
      <device type="string">2fc216b0-d2e2-4967-9b6d-b8a5c9ca2778</device>
      <flags type="integer">1</flags>
      <instance type="string">1314FBB0-9385-44B7-8DDE-18D4118EFDDD</instance>
      <name type="string">Synthetic Ethernet Port</name>
    </vdev013>

При подключении нашей ВМ к switch'у с наименованием "VM":

PS C:\Windows\system32> Connect-VMNetworkAdapter -VMName WikiTest1 -SwitchName VM

Вот теперь VMMS обновляет наш файл конфигурации (см. PortName + SwitchName):

<IsConnected type="bool">True</IsConnected>
 <MacAddress type="string">00-00-00-00-00-00</MacAddress>
 <MacAddressIsStatic type="bool">False</MacAddressIsStatic>
 <PortName type="string">6FAC595A-2507-4690-A840-5746B09D81A1</PortName>
 <SwitchName type="string">FDDD2A3C-85E3-4807-9E28-7A40C8D494A7</SwitchName>

Но этого недостаточно и VMMS (совместно с vmswitch.sys) делает запрос на создание новых подразделов + запросы на создание ключей и обновление их значений: 

HKLM\System\CurrentControlSet\Services\VMSMP\Parameters\SwitchList\FDDD2A3C-85E3-4807-9E28-7A40C8D494A7\6FAC595A-2507-4690-A840-5746B09D81A1\




Сопоставьте PortName из XML и SwitchName - они, конечно, идентичны. SwitchName имеет постоянный UID и он статичен для всех ВМ. PortName характеризует каждый выделенный порт (в рамках Hyper-V мы это обычно называем адаптер виртуальной машины) на virtual switch'е.

Note: так же в разделе HKLM\System\CurrentControlSet\Services содержатся подразделы для основных служб Hyper-V (Integration Services, VMMS)

Note: при каждом отключении виртуального адаптера меняется лишь состояние "флага" IsConnected на False (т.е. PortName + SwitchName остаётся со своими последними значениями). При повторном подключении к свитчу Hyper-V -формируется новый UID для PortName.

При определении VLAN на данном адаптере:



PS C:\Windows\system32> Set-VMNetworkAdapterVlan -VMName WikiTest1 -Trunk -AllowedVlanIdList 10-20 -NativeVlanId 15

VMMS создаёт новый подраздел в свойствах  порта virtual switch: 

HKLM\System\CurrentControlSet\Services\VMSMP\Parameters\SwitchList\FDDD2A3C-85E3-4807-9E28-7A40C8D494A7\6FAC595A-2507-4690-A840-5746B09D81A1\Properties\{952c5004-4465-451c-8cb8-fa9ab382b773} , в котором и хранятся настройки VLAN для данного порта (виртуального адаптера)

и обновляет конфигурационный файл самой виртуальной машины референсами на features (feature ID = UUID созданных RegValues) + блоком Data для данных VLAN:
  <Feature_952C5004-4465-451C-8CB8-FA9AB382B773>
        <DisplayName type="string">Ethernet Switch Port VLAN Settings</DisplayName>
        <Flags type="integer">0</Flags>
        <Setting_958A1AF7-327C-42F4-8864-517617BDE876>
        <Data type="bytes">AgAAAAAADwAAAAAAAAAAAAAAAAAAAAAACwAAACgAAAAAAAAAAAAAAAoACwAMAA0A
DgAPABAAEQASABMAFAA=
</Data>
</Setting_958A1AF7-327C-42F4-8864-517617BDE876>
       <Settings>
         <Id type="string">958A1AF7-327C-42F4-8864-517617BDE876</Id>
       </Settings>
     </Feature_952C5004-4465-451C-8CB8-FA9AB382B773>
     <Feature_C885BFD1-ABB7-418F-8163-9F379C9F7166>

А вот так выглядит в самом реестре:



А что было в 2008 R2?

​В 2008 R2 структура хранения конфигурационных параметров ВМ была другой (хочется даже сказать "абсолютно другой"). При создании ВМ и присоединении сет.адаптера к  virtual switch в XML так же заносятся PortName + SwitchName с той лишь разницей, что настройки VLAN (в основном) в чистом виде располагаются в реестре. В самом XML есть лишь только References на GUIDs этих параметров. Мы не видим тут ни VLAN settings, ни feature с data блоками.  Интуиция говорит мне, что это вполне может влиять на процедуры импорта и экспорта.



Принципиальная разница между операциями импорта и экспорта между 2008 R2 и 2012 -необходимость в файле exp для успешного импорта (в 2012/R2 нам он не нужен). EXP-файл создается в процессе экспорта ВМ и содержит дополнительные конфигурационные сведения (угадайте какие!?!) . Подсказка (выдержка из exp для ВМ с VlanID 25):

<VALUE.OBJECT><INSTANCE CLASSNAME="Msvm_VLANEndpointSettingData"><PROPERTY NAME="AccessVLAN" TYPE="uint16"><VALUE>25</VALUE></PROPERTY>

Буду рад комментариям. Информация лично от себя. Источника нет. free hit counter

Дополнительные ссылки:

English version : 
http://rlevchenko.com/2014/07/28/hyper-v-3-0-interaction-with-registry-and-how-it-was-in-2008-r2/
Сортировать по: Дата публикации | Последние | Самый полезный
Комментарии
  • R.Levchenko внес(ла) изменения в Revision 18. Комментарий: орфография

  • Роман, спасибо за прекрасное описание настроек ВМ и сравнение их в разных версиях Hyper-V !

  • Евгений, спасибо. Есть ещё интересная заметка на msdn для 2012 R2. Новые разделы добавили (Advanced storage features смотри) msdn.microsoft.com/.../dn567657.aspx

Страница 1 из 1 (элементов: 3)