Загрузка из файлов виртуальных дисков (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, скриптов или сторонних средств.