Загрузка из файлов виртуальных дисков (VHD) в Windows Server 2008 R2 и Windows 7


Наконец, после того, как бета-версия Windows Server 2008 R2 и Windows 7 вышла в свет, я больше не связан NDA и могу делиться конкретными советами. Первым делом поговорим о том,  что новую операционную систему нужно как-то установить. Устанавливать предварительную версию на свой рабочий компьютер — увлечение сомнительное, а используя для тестирования виртуальную машину, можно лишиться ряда интереснейших возможностей, в частности, нового Hyper-V. К счастью, в Windows наконец появилась возможность загрузки с виртуальных жестких дисков в формате VHD. То есть теперь вам не требуется отдельный раздел для установки ОС, достаточно просто поместить ее в файл, расположенный на уже существующем разделе NTFS.


Но необходимость как-то установить ОС внутрь этого файла никто не отменял. Особенного внимания этому процессу я уделять здесь не стану. Для этого существует несколько общеизвестных способов. Включая такой экзотический, как прямая конвертация файла установочного образа  из формата Windows Image (WIM) в виртуальный диск в формате VHD. Внутри Microsoft существует сценарий, который автоматизирует этот процесс. А вы можете просто подключить файл виртуального диска и распаковать в него образ при помощи команды типа «imagex /apply d:\sources\install.wim ServerEnterprise v:\».


Возможно, этому нужно посвящать отдельный целый цикл статей, но к теме виртуализации это имеет весьма опосредованное отношение. Так что позволю себе пока уклониться от подробных описаний. Вполне подойдет даже традиционная установка ОС в виртуальной машине Hyper-V. Кстати, не советую использовать для этого другие платформы виртуализации. Так как только в Hyper-V виртуальные машины с Windows использует тот же APIC HAL, что и на реальном современном оборудовании. Но в любом случае — если для того, чтобы установить ОС в файл VHD, вы используете виртуальную машину, то после этого вам потребуется выполнить команду «sysprep /generalize». Только после этого с такого виртуального жесткого диска можно будет загружаться в другом окружении — то есть, в нашем случае, на физическом оборудовании.


Далее. Для того, чтобы воспользоваться загрузкой из файла VHD, вам потребуется, чтобы на реальном разделе уже был установлен поддерживающий эту возможность загрузчик. В простейшем случае это обозначает необходимость всё-таки установить на физический раздел одну из новых ОС — WS08R2 или Windows 7. Впрочем, если сейчас вы используете Vista SP1  ии WS08, то тоже сможете воспользоваться возможностью загрузки новой ОС из виртуального диска VHD.


Для этого вам потребуется заменить всего лишь два файла. Возьмите из любой версии WS08R2 или Windows7 файлы c:\bootmgr и c:\windows\system32\bcdedit.exe и скопируйте их поверх существующих. Причем эти файлы не зависят от языка ОС, но различаются между платформами. То есть, например, взяв их из английского 64-битного Windows Server 2008 R2, вы запросто можете обновить ими свою установку русской Vista Ultimate х64. Загрузка из файлов VHD будет работать — но сами понимаете, что данный метод никак не поддерживается Microsoft. И еще — загружаемые из файла VHD операционные системы обязательно должны принадлежать именно к семейству Windows7/WS08R2. Что потребуется заменить, например, в VistaSP1, чтобы загружать ее из файла VHD, науке пока неизвестно.


Итак, я предполагаю, что вы справились с заменой bootmgr и bcdedit.exe в WS08/VistaSP1 или уже используете Win7/WS08R2, установленную на физическом разделе. Таким образом, поддержка загрузки из файлов VHD у вас уже есть. Помимо этого я исхожу из того, что вы справились с созданием файла VHD, в который установлена новая ОС — либо путем конвертации образа из формата WIM, либо через установку ОС в Hyper-V и выполнения sysprep после этого. Осталось дело за малым. Необходимо добавить информацию о файле VHD в загрузчик, который уже установлен на физическом разделе.


Для этого запустим командную строку (Command Prompt) в режиме Администратора (Run as Administrator) и выполним следующую команду.



Bcdedit.exe /copy {current} /d “Windows 7 Beta”


Это скопирует запись, которая уже присутствует в BCD и описывает вашу текущую установку Windows. Копия получит описание «Windows 7 Beta», а выполненная команда вернет GUID вновь созданной записи. Скопируйте это значение, сейчас мы будем его использовать. Предполагаю, что вы разместили файл VHD с новой ОС по адресу «C:\VHD\Win7Beta\Win7Beta.vhd». Теперь нужно по очереди выполнить три следующих команды, заменив слово GUID значением, полученным на предыдущем шаге.



Bcdedit.exe /set GUID device vhd=[locate]\VHD\Win7Beta\Win7Beta.vhd


Bcdedit.exe /set GUID osdevice vhd=[locate]\VHD\Win7Beta\Win7Beta.vhd


Bcdedit /set GUID detecthal on


Все, теперь перезагружайтесь и выбирайте вторую запись в меню загрузчика. В результате вы загрузитесь в Windows 7. При этом вы никак не навредили своей основной ОС, но смогли приобщиться к тестированию новой. Которая, отмечу, работает значительно быстрее, чем Vista.


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


Добавлено в 11 января в 20:44


Одной из наиболее частых причин, приводящих к STOP error 0x7B при старте Win7 из VHD является недостаток свободного места на диске при использовании динамических дисков VHD (по умолчанию). Дело в том, что при старте ОС из динамического VHD в текущей версии происходит выделение максимального объема для данного динамического диска. По умолчанию это 127 ГБ. Если ваша Windows 7 при загрузке из VHD выдает синий экран и Inaccessible Boot Device, проверьте место на диске, или сконвертируйте динамический диск в диск фиксированного объёма при помощи Hyper-V Manager, Virtual PC, VS2005, PowerShell, скриптов или сторонних средств.

Comments (17)

  1. Alex A says:

    Увы, для WS2008 пока неизвестен способ загрузки из VHD.

    Подсознательно ясно, что ему не хватает драйвера VHD Ministor контроллера, но я не эксперементировал в этом направлении.

  2. Anonymous says:

    Всё тайное рано или поздно становится явным, а все достойные идеи рано или поздно получают воплощение. По крайней мере, в этом убеждает меня недавняя новость. Утилита «Windows Image to Virtual Hard Disk (WIM2VHD) Converter», которая месяц назад была доступна

  3. Alex A says:

    Компоненты интеграции для Win7/R2 ставить не нужно, они входят в ОС.

    Коопировать файлы поверх существующих защищенных файлов, PSS обычно рекомендует при помощи sfpcopy.exe. Саму утилиту инженер поддержки высылает по запросу

  4. Alex A says:

    Да возможно.

    Запишите диск с Win7, начните с него загрузку, выберите начало установки ОС.

    В результате установится загрузчик Win7.

    Сложно если всего один раздел диска.

    Создавать VHD можно из Hyper-V Manager или VirtualPC/VS2005.

  5. Alex A says:

    Можно скачать Virtual Server 2005 и из него установить утилиту VHDMount.

    Или поставить консоль управления Hyper-V Manager, тогда все классы должны зарегистрироваться.

  6. Alex A says:

    Как я уже говорил, в бета версии побороть методов нет. By design. Ждите следующего публичного релиза.

  7. Grooper says:

    А как присоединить VHD диск на VISTA SP1, если  для его подключения требуется WMI класс Msvm_ImageManagementService, а он в свою очередь появляется после установки роли Hyper-V, которая в висте отсутствует.

  8. IL says:

    А можно узнать, в Hyper-V R2 компоненты интеграции устанавливаются на гостевые ОС Vista/WS2008 SP2 beta и W7/WS2008 R2 beta?

  9. Андрей Машин says:

    А как, собственно, можно скопировать поверх существующих файлы c:bootmgr и c:windowssystem32bcdedit.exe? Они доступны на запись только для TrustedInstaller.

  10. ddn says:

    Кстати действительно интересно и работает =)

    Спсб!

    PS:

    Еще заметил что компоненты интеграции (VMBUS) входят в вин7 изначально… Когда ставил в Hyper-v её.

  11. IL says:

    А возможно ли установить загрузчик от Vista SP1 (или W7) на машину с XP или 2003, так чтобы потом можно было запустить с виртуального диска W7, как здесь написано? А вирт.диск подготовить где-нибудь еще, если imagex не работает на XP.

  12. Хочется так же отметить тот немаловажный факт, что Windows Server backup создает резервные копии в виде VHD-айлов. Это позволяет загружаться с резервных копий Windows не выполняя их фактического восстановления. Т.е. если ранее Snapshot-ы были доступны только для AD, то теперь резервные копии OS можно использовать как своеобразные снапшоты всей операционной системы и загружаться с них для того, что бы проверить их работосопсобность или выполнить другие операции. Кроме того, к таким резервным копиям можно применять средства Offline Machine Servicing Tool и другие подобные инструмены.  

  13. Так речь идет не о Windows Server 2008, а о версии R2, где Windows Server Backup работает так же. По поводу VHD Miniport драйвера – надо поэксперементировать… 😉

  14. IL says:

    Было бы интересно услышать, возможна ли загрузка из VHD файла, созданного Windows Server backup.

    А то здесь

    http://www.vistax64.com/virtual-server/199598-how-boot-windows-server-2008-r2-vhd.html

    утверждается, что это невозможно.

  15. Alex Pronichev says:

    Приветствую!

    Создал несколько разностных дисков (differencing disks) на базе основного (parent) с установленной системой: простой метод откатиться к любой точке (любому разностному диску) без всяких восстановлений и резервных копий – просто изменить имя диска в менеджере загрузки и сразу 100% вернуться к старой системе!

    Все бы хорошо, но:

    "Дело в том, что при старте ОС из динамического VHD в текущей версии происходит выделение максимального объема для данного динамического диска."

    Как вы и указали – при старте распределяет весь объем на разностном диске. Я не думал, что такое вообще возможно, – все-таки это не просто динамический, а дочерний разностный… После выключения системы объем разностного уже соответствует только изменениям.

    В чем смысл и есть ли метод побороть?

  16. Dmitry Shishkin says:

    Ещё один способ установить Win7/WS2008R2 в VHD диск, прямо во время инсталляции, рядом с WinXP:

    http://blogs.technet.com/iwalker/archive/2009/01/20/ka-windows-7.aspx

    Проверено, работает!

Skip to main content