Перейти к содержимому

Восстановление виртуальных машин Hyper-V – часть 2

2 апреля, 2010

Итак, условия задачи:

В наличии папка с конфигурационными файлами виртуальной машины и снепшотов (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 до и после операции.

Количество файлов уменьшилось. Ровно в 2 раза. It’s fantastic! Используя Hyper-V Manager Вы можете удалить половину файлов в сложной структуре папок одной командой!!!

Обратите внимание на значение полей 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. Комментарии и отзывы приветствуются!

27 комментариев leave one →
  1. Unknown permalink
    5 апреля, 2010 12:58

    Здорово ! Работает ! в русской версии windows надо писать "ВИРТУАЛЬНАЯ МАШИНА NT" и вопрос — можно использовать icacl — icacl имя_файла /G:"ВИРТУАЛЬНАЯ МАШИНА NT": Full ? или есть некие принципиальные отличия ?

  2. Alexander permalink
    5 апреля, 2010 16:30

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

  3. Vlad permalink
    6 апреля, 2010 15:22

    круть….в мемориз

  4. Anton permalink
    20 апреля, 2010 17:51

    Отличное описание, Саня!Ключики для icacls:Icacls "C:\\ProgramData\\Microsoft\\Windows\\Hyper-V\\Virtual Machines\\xxxxxxxxxxxx.xml" /grant "NT VIRTUAL MACHINE\\xxxxxxxxxxxx":(F) /L —- изменение линка на конфиг-файл виртуальной машиныIcacls C:\\vms\\deletme /T /grant "NT VIRTUAL MACHINE\\xxxxxxxxxxxx":(F) —- Изменение ACL папкиIcacls yyyyyyyyyyyy.xml /grant "NT VIRTUAL MACHINE\\xxxxxxxxxxxx":(F) /L—- Изменение ACL снепшота

  5. Alexander permalink
    23 апреля, 2010 10:55

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

  6. 25 декабря, 2010 16:58

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

  7. Максим permalink
    14 февраля, 2011 13:54

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

    • 14 февраля, 2011 15:22

      Я бы с радостью. но так уж случилось, что у меня сейчас нет в наличии сервера, на котором можно сделать новые скриншоты.
      Так что, пользуясь случаем, делаю предложение комюнити — кто может предоставить доступ на пару дней к виртуальной машине с Win 2008 R2 для обновления скриншотов?

  8. Максим permalink
    27 февраля, 2011 16:31

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

  9. Максим permalink
    3 марта, 2011 15:57

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

    • 3 марта, 2011 17:56

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

      • Максим permalink
        4 марта, 2011 14:32

        Работает только 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

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

      • 4 марта, 2011 15:08

        1 SID? которому предоставляются разрешения состоит из 2 частей — постоянной «NT VIRTUAL MACHINE» и переменной — SID/GUID конкретной виртуальной машины(он же GUID-имя файла конфигурации ВМ). указывать SID виртуальной машины нужно так NT VIRTUAL MACHINE\\
        2 Прочитайте внимательно текст статьи, чтобы понять для чего выполняются эти комманды. Ппробуйте использовать cacls для изменения разрешений на файлы и папки для обычной учетки юзера с последующей проверкой через стандартный контрол ACL — после этого намного проще и ошибки в синтаксисе этих комманд будет исправлять.

  10. dan permalink
    16 апреля, 2011 19:10

    аналогичный случай с «Максим Март 4, 2011 14:32» вылетела одна из виртуальных машин на cacls выдает недопустимый аргумент, пробывал восстанавливать др виртуалки, без проблем, что посоветуете товарисчи?

    • 18 апреля, 2011 10:33

      советую проверить параметры комманды, которая выдает недопустимый аргумент. можно также запостить вопрос на форуме http://social.technet.microsoft.com/Forums/ru-RU/virtualizationru/threads и указать:
      1. что произошло
      2. GUID виртуальной машины
      3. наличие снепшотов
      4. выполняемые комманды и их результаты

  11. Анатолий permalink
    16 июня, 2011 12:37

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

    • Анатолий permalink
      16 июня, 2011 15:34

      Сам ответил на свой вопрос… Можно удалить…

  12. 18 января, 2012 14:04

    Хочется пожелать автору и тем комментаторам, кто «правильно» продублировал команды автора, чтобы у вас так ширинка расстегивалась после 4х литров пива, как я их пытался разобрать и ввести…

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

    mklink 063E973A-28F7-4712-9012-3EA4429AD47A.xml “»G:\Hyper-V\ServerName\Virtual Machines»63E973A-28F7-4712-9012-3EA4429AD47A.xml”

    icacls «C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines63E973A-28F7-4712-9012-3EA4429AD47A.xml» /grant «NT VIRTUAL MACHINE63E973A-28F7-4712-9012-3EA4429AD47A»:(F) /L

    • Иванов Сергей permalink
      26 июля, 2013 11:09

      У меня не выполняется команда icacls … пишет invalid parametr «Machines9AC……xml»» Можно поподробнее «для особо одаренных» объяснить про команду эту и что за чем и куда водить надо.

  13. Nikolay permalink
    17 апреля, 2012 19:13

    Добрый день.
    Возникла такая проблема: Есть сервер Виртуализации, на нем три виртуальных сервера, на одном файловом сервере закончилось место, поэтому что бы ему увеличить его я его выключил. Долее сделал снимок системы и запустил систему для проверки (система загрузилась со снимка все нормально, еще раз выключил) Затем в диспетчере Hyper-V делаю изменить диск выбираю родительский диск 123.vhd делаю развернуть и добавляю ему нужный размер виртуального диска. Затем в параметрах виртуальной машины меню диск на 123.vhd но там еще присутствует диск снимка 123_тутсивмолы.avhd, запускаю сервер и после загрузки обнаруживаю что на сервере хранятся старые данные (несколько месяцев назад и неактуальные сейчас). Выключаю сервер с параметрах выбираю жесткий диск уже снимка 123_тутсимволы.avhd начинаю загружать сервере и пошли ошибки (причем цепочка снимка исчезла сразу хотя когда сделал снимок она была):
    «Цепочка разностных дисков повреждена.»
    Не удалось открыть виртуальный диск «C:\VM\virtual hard disks\123_09d87b2f-f439-473e-bcb5-6657d12d0f6e.avhd»: Возникла проблема при открытии виртуального диска в цепочке разностных дисков, «C03A0012» (ссылка из «C:\VM\virtual hard disks\123.vhd»): «Неправильный размер виртуального жесткого диска.» (7864368).
    Не удалось инициализировать «123». (ИД виртуальной машины 014ED980-F901-4789-9EA8-0EE9DB74318F)
    123″ Microsoft Emulated IDE Controller (ИД экземпляра {83F8638B-8DCA-4152-9EDA-2CA8B33039B4}): Сбой включения, ошибка «Цепочка виртуальных жестких дисков повреждена. Размеры виртуальной памяти для родительского виртуального жесткого диска и разностного диска не совпадают.» (0xC03A0017). (ИД виртуальной машины 014ED980-F901-4789-9EA8-0EE9DB74318F)
    «123»: не удалось открыть вложение «C:\VM\virtual hard disks\123_09d87b2f-f439-473e-bcb5-6657d12d0f6e.vhd». Ошибка: «Цепочка виртуальных жестких дисков повреждена. Размеры виртуальной памяти для родительского виртуального жесткого диска и разностного диска не совпадают.» (0xC03A0017). (ИД виртуальной машины 014ED980-F901-4789-9EA8-0EE9DB74318F)
    «123»: Не удалось открыть виртуальный диск «C:\VM\virtual hard disks\123_09d87b2f-f439-473e-bcb5-6657d12d0f6e.avhd». Возникла проблема при открытии виртуального диска в цепочке разностных дисков, «C:\VM\virtual hard disks\123.vhd» (ссылка из «C:\VM\virtual hard disks\123_09d87b2f-f439-473e-bcb5-6657d12d0f6e.avhd»): «Неправильный размер виртуального жесткого диска.» (0xC03A0012). (ИД виртуальной машины 014ED980-F901-4789-9EA8-0EE9DB74318F)
    Подскажи как мне загрузить это снимок что бы достать из него свежие данные сотрудников. или как мне вообще восстановить эту виртуальную машины?
    Спасибо.
    PS: Я еще думаю так, что в разрешения ntfs на жесткие диски виртуальной машины отсутствует сид самой виртуалки и поэтому не возможно открыть «123»: Не удалось открыть виртуальный диск «C:\VM\virtual hard disks\123_09d87b2f-f439-473e-bcb5-6657d12d0f6e.avhd» и еще то что сид родительского диска в xml фалике снимка не соответствует нынешнему, так вот как это соответствие восстановить?

  14. 10 января, 2013 09:00

    Кто ипал мозг с icacls «NT VIRTUAL MACHINE\GIUD» , в русской версии винды ) ставьте «ВИРТУАЛЬНАЯ МАШИНА NT\GIUD»

  15. Иванов Сергей permalink
    26 июля, 2013 10:21

    Для особо одаренных можно прислать адекватный текст команд со скриншотов. Самое главное и скрыто! Автор как данная статья может быть полезной если команды не разберешь? Спасибо Василию Ветрову за расшифровку! А про застегнутую ширинку прям в тему!!! Респект!!!

  16. Юрий permalink
    23 ноября, 2013 02:23

    Случилось страшное.
    «Цепочка виртуальных жестких дисков недоступна. При открытии следующего в цепочке виртуального жесткого диска произошла ошибка. (0xC03A0019) (ИД виртуальной машины 5F81E169-2126-41D1-A6DE-B84D8F00FC6B)»

    Вторые сутки не могу ничего сделать!!! Кто-нибудь может оказать помощь через Скайп + ТимВьювер?

    Плюшки гарантированы!!! astacom@mail.ru

  17. 8 июня, 2014 14:27

    а по меньше скриншоты нельзя было сделать, а то мне как раз нужно испытать новый наномикроскоп?!

  18. 23 августа, 2016 13:32

    Спасибо Александр за подробную статью, да ещё и на русском языке. Очень признателен Вам. т.к. у нас нет возможности делать архивацию всей системы Hyper-V так как диск на пять терабайт и на ней вертится около 20 виртуалок а диска для бэкапов такого размера больше нет. Делаю архивацию только теневых каталогов файлов отдельных виртуальной машины. И как раз с помощью вашей статьи буду (не дай бог такое случится) восстанавливать нужные виртуалки.

  19. 19 сентября, 2019 19:28

    Публикация полезная и нужная. Посмотрел, на блоге имеются и другие хорошие материалы. Большое спасибо!

Ответить на kupchynetsky Отменить ответ