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

Posted: 01.07.2010 in Виртуализация, Hyper-V

Пост написан в результате этой инструкции от Kupchinets​ky Alexander:

http://kupchinetsky.spaces.live.com/blog/cns!1097D49C5CA5BE06!1367.entry

В предыдущих версиях виртуальных машин для переноса виртуальной машины было достаточно скопировать файлы и при необходимости подправить конфиги(как например Virtual Server 2005 R2). В Hyper-V этого недостаточно, и чтобы виртуальная машина стала видна в консоли управления необходимо создать xml-файлы(hardlinks), раздать права и "подсунуть" их Hyper-V. Более подробно как это делать описано по ссылке выше, а я же просто выложу батник, который облегчает этот процесс:

@goto end_of_comments

————————————————————-

ATTACH Hyper-V VM

 

Variables:

 

VMFOLDER is virtual machine folder, without end slash

 

VMGUID is 32-digit number from ‘Virtual Machines’ folder,

example: for "D:\VM\Virtual Machines\9ACC595A-61B4-4BD7-A46B-67D5B20E38E6.xml" folder

it is 9ACC595A-61B4-4BD7-A46B-67D5B20E38E6

————————————————————-

:end_of_comments

 

rem set variables

set vmguid=9ACC595A-61B4-4BD7-A46B-67D5B20E38E6

set vmfolder=D:\VM

 

rem stop Hyper-V services

net stop "Hyper-V Image Management Service"

net stop "Hyper-V Networking Management Service"

net stop "Hyper-V Virtual Machine Management"

 

rem configure Hyper-V hardlinks and set permissions

mklink "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\%vmguid%.xml" "%vmfolder%\Virtual Machines\%vmguid%.xml"

cacls "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\%vmguid%.xml" /L /E /G "NT VIRTUAL MACHINE\%vmguid%":F

cacls "%vmfolder%" /T /E /G "NT VIRTUAL MACHINE\%vmguid%":F

 

net start "Hyper-V Virtual Machine Management"

net start "Hyper-V Networking Management Service"

net start "Hyper-V Image Management Service"

Здесь вам необходимо будет установить два параметра:

 

attach_vm_scr1

 

Первый — это 32-значный GUID виртуальной машины, его можно найти в папке Virtual Machines вашей виртуальной машины, второй — и папку, в которой находится виртуальная машина, без последнего слеша.

 

После отработки этого батника виртуальная машина появится в консоли Virtual Machine Manager-а. Тестировался с Service Center Virtual Machines Manager Admin Console, и с виртуальными машинами на удаленных серверах Windows 2008 Hyper-V R2. При тестировании остановка сервисов гипервизора никак не повлияла на другие работающие виртуальные машины(то есть можно присоединять машины на горячую).

 

Если у вашей виртуальной машины были снепшоты, то также необходимо присоединить каждый из них. Вот батник для присоединения снепшота(необходимо указать GUID для каждого снепшота):

@goto end_of_comments

————————————————————-

ATTACH Hyper-V SHAPSHOT

 

Variables:

 

VMFOLDER is virtual machine folder without end slash

VMGUID is 32-digit number from ‘Virtual Machines’ folder,

SNAPSHOT is 32-digit number from ‘Snapshots’ folder

————————————————————-

:end_of_comments

 

rem set variables

set vmfolder=D:\ADDIS\Win2008r2-1

set vmguid=76DA3C83-11D0-4FF4-B909-3E7CC40C0D3C

set snapshot=5E688829-B1BF-47A2-A1A8-2370EE163F71

 

rem stop Hyper-V services

net stop "Hyper-V Image Management Service"

net stop "Hyper-V Networking Management Service"

net stop "Hyper-V Virtual Machine Management"

 

 

rem configure Hyper-V hardlinks and set permissions

mklink "C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\%snapshot%.xml" "%vmfolder%\Snapshots\%snapshot%.xml"

cacls "C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\%snapshot%.xml" /L /E /G "NT VIRTUAL MACHINE\%vmguid%":F

cacls "%vmfolder%" /T /E /G "NT VIRTUAL MACHINE\%vmguid%":F

 

net start "Hyper-V Virtual Machine Management"

net start "Hyper-V Networking Management Service"

net start "Hyper-V Image Management Service"

Реклама
- комментарии
  1. Alex:

    «Тестировался с Service Center Virtual Machines Manager Admin Console, »
    Может имелся в виду System center VMM?

  2. Alex:

    🙂

    За батники спасибо, помогли сегодня в работе)

  3. Батник рекомендую переписать, используя имена служб, а не описание, что позволит использовать скрипт не зависимо от языка. Т.е. вместо net start «Hyper-V Virtual Machine Management» или на русский манер net start «Управление виртуальными машинами Hyper-V» писать как net start vmms.

  4. Sederick, спасибо за ответ!

    Ну вообще, по-хорошему да)

    Кстати для бекапов виртуальных машин, если использовать батники — есть «кросслокальный» способ получать дату и время независимо от языка ОС-и и языковых настроек:
    http://forum.ru-board.com/topic.cgi?forum=5&topic=25393&start=347&limit=1
    это к посту не относится, но в продолжение темы 🙂

  5. Спасибо за батники.
    Позволю себе сэкономить время тем, кто столкнется с русской Win2008R2.
    Батник нужно сохранить в кодировке DOS OEM 866 из под админа.

    для ВМ
    @goto end_of_comments
    ———————
    ATTACH Hyper-V VM

    Variables:

    VMFOLDER is virtual machine folder, without end slash

    VMGUID is 32-digit number from ‘Virtual Machines’ folder,
    example: for «D:\VM\Virtual Machines\9ACC595A-61B4-4BD7-A46B-67D5B20E38E6.xml» folder
    it is 9ACC595A-61B4-4BD7-A46B-67D5B20E38E6
    ———————
    :end_of_comments

    rem set variables
    set vmguid=79A36E84-07F6-4EFA-9396-5F5F9472FCD1
    set vmfolder=d:\Hyper

    rem stop Hyper-V services
    net stop vmms
    net stop nvspwmi
    net stop vhdsvc

    rem configure Hyper-V hardlinks and set permissions
    mklink «C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\%vmguid%.xml» «%vmfolder%\Virtual Machines\%vmguid%.xml»
    icacls «C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\%vmguid%.xml» /L /grant «ВИРТУАЛЬНАЯ МАШИНА NT\%vmguid%»:F
    icacls «%vmfolder%» /T /grant «ВИРТУАЛЬНАЯ МАШИНА NT\%vmguid%»:F

    net start vmms
    net start nvspwmi
    net start vhdsvc

    Для Снапшотов
    @goto end_of_comments
    ———————
    ATTACH Hyper-V SHAPSHOT

    Variables:

    VMFOLDER is virtual machine folder without end slash
    VMGUID is 32-digit number from ‘Virtual Machines’ folder,
    SNAPSHOT is 32-digit number from ‘Snapshots’ folder
    ———————
    :end_of_comments

    rem set variables
    set vmguid=79A36E84-07F6-4EFA-9396-5F5F9472FCD1
    set vmfolder=d:\Hyper
    set snapshot1=870376D3-255C-4C0B-BB66-FC15110FE466
    set snapshot2=5159545D-FD2A-485F-98A9-6180DF5F650D
    set snapshot3=A4312F27-BF63-40B5-8FFB-78D134768DD1
    set snapshot4=B35C5292-E528-48A3-967C-32345093EE32

    rem stop Hyper-V services
    net stop vmms
    net stop nvspwmi
    net stop vhdsvc

    rem configure Hyper-V hardlinks and set permissions
    mklink «C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\%snapshot1%.xml» «%vmfolder%\Snapshots\%snapshot1%.xml»
    mklink «C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\%snapshot2%.xml» «%vmfolder%\Snapshots\%snapshot2%.xml»
    mklink «C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\%snapshot3%.xml» «%vmfolder%\Snapshots\%snapshot3%.xml»
    mklink «C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\%snapshot4%.xml» «%vmfolder%\Snapshots\%snapshot4%.xml»
    icacls «C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\%snapshot1%.xml» /L /grant «ВИРТУАЛЬНАЯ МАШИНА NT\%vmguid%»:F
    icacls «C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\%snapshot2%.xml» /L /grant «ВИРТУАЛЬНАЯ МАШИНА NT\%vmguid%»:F
    icacls «C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\%snapshot3%.xml» /L /grant «ВИРТУАЛЬНАЯ МАШИНА NT\%vmguid%»:F
    icacls «C:\ProgramData\Microsoft\Windows\Hyper-V\Snapshots\%snapshot4%.xml» /L /grant «ВИРТУАЛЬНАЯ МАШИНА NT\%vmguid%»:F
    icacls «%vmfolder%» /T /grant «ВИРТУАЛЬНАЯ МАШИНА NT\%vmguid%»:F

    net start vmms
    net start nvspwmi
    net start vhdsvc

  6. Андрей.:

    Люди добрые подскажите, плз, почему при запуске строк с «cacls» система ругается: »
    Сопоставление между именами пользователей и идентификаторами безопасности не было произведено.
    Успешно обработано 0 файлов; не удалось обработать 1 файлов.
    Заранее спасибо.

    • Привет Андрей!
      В таких случаях необходимо выкладывать код в студию 😉 Иначе вопрос ни о чём)

      Скорее всего где-то ошибка в параметрах скармливаемых cacls. И почему кстати cacls, сейчас она deprecated и нужно использовать icacls..
      Могу посоветовать поискать в гугле по этой ошибке

  7. Андрей.:

    Ок. Батник выглядит вот таким образом:
    rem set variables
    set vmguid=887A1F26-EE2B-443E-86E4-A4A75FF97864
    set vmfolder=D:\HVM\test\test

    rem stop Hyper-V services
    net stop vmms
    net stop nvspwmi
    net stop vhdsvc

    mklink «C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\%vmguid%.xml» «%vmfolder%\Virtual Machines\%vmguid%.xml»
    icacls «C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\%vmguid%.xml» /L /grant «test\%vmguid%»:(F)
    icacls «%vmfolder%» /T /grant «test\%vmguid%»:(F)

    net start vmms
    net start nvspwmi
    net start vhdsvc

    mklink отрабатывает, а дальше увы и ах.
    Правда я, как чайник, не понял значения:»ВИРТУАЛЬНАЯ МАШИНА NT». Я её заменил на название машины. Хотя по большому счету это роли не сыграло: и так, и так пробовал.

  8. Денис:

    да не действуют эти батники! помогите плз, народ! аська 371468641

  9. Подтверждаю — не работают эти батники!!!

  10. Юрий:

    Спасибо большое! Очень выручил, все работает

  11. Michman89:

    Для предотвращения ошибки «Сопоставление между именами пользователей и идентификаторами безопасности не было произведено.» («No mapping between account names and security IDs was done.»), при смене владельца файла, я делаю следующее:

    — останавливаю службу vmms (net stop vmms)
    — копирую из бекапа файлы ВМ в нужные папки

    — запускаю службу vmms (net start vmms)
    — назначаю нового владельца для файлов ВМ: icacls «путь к файлу ВМ» /setowner «ВИРТУАЛЬНАЯ МАШИНА NT\ID-виртуальной машины» (icacls «путь к файлу ВМ» /setowner «NT VIRTUAL MACHINE\ID-виртуальной машины»)
    Без этого запуска vmms и смены владельца, иногда вылетает вышеобозначенная ошибка.

    — останавливаю службу vmms (net stop vmms)
    — даю нужные (в данном примере Full) права файлам ВМ: icacls «путь к файлу ВМ» /grant «ВИРТУАЛЬНАЯ МАШИНА NT\ID-виртуальной машины»:F (icacls «путь к файлу ВМ» /grant «NT VIRTUAL MACHINE\ID-виртуальной машины»:F)
    — запускаю службу vmms (net start vmms)

    Всё работает.

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

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s