Запуск Windows 8 с виртуального диска (VHD)

Если вам, как и мне, требуется запуск Windows 8 “на железе” (в принципе, работа в виртуально машине меня устраивала почти во всем, кроме того, что там нельзя запустить Hyper-V, а значит и эмулятор Windows Phone 8), то у вас возможны следующие варианты:

  • установить Windows 8 вместо текущей ОС. Мне не подошло, т.к. рабочая среда у меня – серверная, плюс имеется куча установленного и настроенного ПО, которое почти гарантированно придется переустанавливать
  • установить второй системой в dualboot. Вариант хороший, но, по некоторым соображениям я решил отказаться и от него – все же система не основная, и при необходимости удалить файл виртуального диска все же проще, нежели возиться с разделами
  • настроить загрузку с виртуального (VHD) диска

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

Здесь, правда, есть пара подвариантов:

  • вы ставите систему с 0 из дистрибутива. Для частного применения самый, наверное, удобный вариант. На этом варианте я особо останавливаться не буду, т.к. схема подробно описана в блоге Скотта Хансельмана Guide to Installing and Booting Windows 8 Developer Preview off a VHD (Virtual Hard Disk). (в двух словах: качаете дистрибутив делаете из него загрузочную флэшку, запускаетесь с этой флэшки, на этапе выбора диска, куда ставить систему, переключаетесь в консоль, создаете новый виртуальный диск, подключаете его и развертываете систему на этот диск)

Update: если вам ближе читать на русском, то можете воспользоваться пошговым руководством отсюда

  • у вас уже есть готовая установленная система на виртуалке и вам требуется просто перенести загрузку “на железо”

Я остановился именно на втором варианте, в первую очередь потому, что в нашей компании для развертывания системы используется система распространения готовых образов через System Center Configuration Manager (там помимо собственно операционки ставится куча корпоративного ПО, плюс накатывается куча различных настроек, например, система включается в домен, …), но в этих образах не предусмотрен выбор диска для установки (что логично – они нужны для развертывания на стандартизованных виртуальных машинах, а там это не требуется).

Итак, у нас есть:

  • компьютер, на котором установлена Windows 7 или Windows Server 2008 R2
  • VHD-файл c развернутой Windows 8 (у меня это путь D:\Hyper-V\VHDs\T2.vhd).

Все действия нужно, проводить с правами локального администратора.

Шаг 0. Просмотр (чтобы оценить результат визуально) текущей настройки загрузчика

Это можно сделать командой

bcdedit /enum 
 
Результат будет примерно таким:
image
 
Первый раздел (с заголовком Windows Boot Manager), это базовые настройки вашего загрузчика. Здесь интересны строки:
  • default – содержит идентификатор системы, которая будет запускаться по умолчанию
  • displayorder – какие системы и в каком порядке будут показываться при загрузке, на этапе выбора загружаемой системы (у меня всего одна)
  • timeout – время ожидания выбора системы для загрузки (в секундах)

Второй раздел (с заголовком Windows Boot Loader – их может быть несколько) – это описание конкретной загружаемой системы. Здесь обратите внимание на строки:

  • identifier – идентификатор системы. Используется, когда надо сослаться на конкретную запись загрузчика (например, она указана в настройке запуска системы по умолчанию)
  • description – строка, которая видна в меню выбора системы при загрузке
  • device и osdevice – диск (раздел) на котором расположены загрузчик системы и папка системы

Аналогичную, хоть и не такую подробную картину можно увидеть, если запустить утилиту msconfig.exe.

image

Шаг 1. Сохраните текущую версию ваших настроек загрузчика.

Это можно сделать командой:

bcdedit /export "d:\BCD_Backup"

 

Шаг 2. Присоединение VHD-файла с Windows 8 в качестве доступного раздела

Для этого запустите утилиту diskpart и наберите в ней команды:

select vdisk file="D:\Hyper-V\VHDs\T2.vhd"
attach vdisk
exit
 
image
 

(Важно!) Теперь проверьте, какая буква присвоена вашему диску, в моем случае это была F:\

Шаг 3. Обновление загрузчика системы на совместимый с Windows 8

Для этого вызовите команду (обратите, указывается путь к каталогу Windows 8, а не установленной на компьютере системы – имя диска вы получили на предыдущем шаге):

bcdboot.exe F:\Windows

 

Помимо обновления загрузчика, команда также создаст новую запись загрузчика, для запуска Windows 8. Это можно увидеть, выполнив команду

bcdedit /enum 

 

image

Важные изменения:

  • систем стало 2
  • системой по умолчанию стала система с идентификатором {default} – Windows 8.

К сожалению, настройки загрузчика Windows 8 не верны – там указывается загрузка с физического диска F: (см. строки device и osdevice), тогда как нам нужно указать путь к виртуальному файлу.

Шаг 4. Смена раздела загрузки для Windows 8

Итак, нам нужно сменить для нашего раздела с идентификатором {default} значение полей device и osdevice. Сейчас они оба содержат значение

partition=F:

 

нам же нужно указать, что это будет VHD-файл c путем D:\Hyper-V\VHDs\T2.vhd т.е. значение должно стать:

vhd=[D:]\Hyper-V\VHDs\T2.vhd

 

Внимание! Квадратные скобки вокруг имени раздела – это часть синтаксиса, они должны быть!!!

Для изменений нужно выполнить 2 команды (для раздела с идентификатором {default} заменить значение полей device и osdevice):

bcdedit /set {default} device vhd="[D:]\Hyper-V\VHDs\T2.vhd"
bcdedit /set {default} osdevice vhd="[D:]\Hyper-V\VHDs\T2.vhd"

 

Результат:

image

Шаг 5. Отключение VHD-файла и настройка параметров запуска по умолчанию

Осталось несколько завершающих штрихов: нужно отмонтировать виртуальный диск и настроить запуск основной системы (той, которая установлена на компьютере) по умолчанию.

Для отмонтирования диска запустите diskpart и выполните последовательность команд:

select vdisk file="D:\Hyper-V\VHDs\T2.vhd"
detach vdisk
exit

 

image

Теперь укажем, что по умолчанию нужно загружать систему с идентификатором {current}, а ждать не более 10 секунд. Все это делается для записи загрузчика {bootmgr}, с помощью уже известных команд:

bcdedit /set {bootmgr} default {current}
bcdedit /set {bootmgr} timeout 10

 

Результат:

image

Обратите внимание, что идентификатор записи загрузки Windows 8 теперь показывается не как {default} (что по сути представляет собой специальный алиас), а своим реальным GUID.

Шаг 6. Перезагрузка, выбор ОС, наслаждение результатом Улыбка

Ну, остальное банальное: перезагружаемся, выбираем нужную ОС из списка (кстати, почему-то у меня первый раз был показан GUI интерфейс выбора ОС, как в блоге у Скотта, а потом снова переключилось на текстовый Глубокие размышления)

This entry was posted in Разработка ПО and tagged , . Bookmark the permalink.

24 Responses to Запуск Windows 8 с виртуального диска (VHD)

  1. Кстати, Windows Phone 8 *можно* поставить как альтернативную ось на PC без эмулятора. Нужно взять образ из эмулятора (он там обычный VHDX) и прописать его в бутлоадер — она точно так же встанет рядом и будет работать. Обычная восьмёрка же внутри…

    Но нужно учесть один момент — у него есть драйвер только для PS/2 мыши и клавиатуры.

    • Мысль, однако🙂 Спасибо, Леш

      Я попробовал ее запустить из-под обычного Hyper-V на Windows Server 2008 R2 – запустилась без вопросов, но как на ней изобразить аппаратные кнопки я так и не придумал😦

      Ну и, конечно, даже мой извращенный мозг не смог себе представить страшной схемы как отлаживать WP8 приложения, которые будут разрабатываться на виртуальной машине, а запускаться на соседней виртуалке. Подозреваю, что схема может оказаться вполне рабочей, но как к ней подступиться – не представляю.

      • Ну вот я тоже не совсем пока представляю. Пытаюсь щас подсунуть ей драйвера для USBшных клавы и мыши из комплекта обычной восьмёрки — не вытанцовывается, блин.

        Что касается отладки приложений — не копал. Но коннектор сетевого отладчика от 12й студии там в образе есть.

    • Max says:

      а как прописать загрузку из vhd, который находится на usb hdd для запуска на разных компах? (т.е. в биосе выбираю загрузку с usb hdd и чтоб загружалась винда из vhd)

  2. ppsbkwmcrs says:

    Люди а как мне добавить Убунту? Сейчас у меня реальная восьмерка + семерка из VHD файла. Цель: добавить еще Убунту и тоже из VHD файла.

    • Увы, не имею ни малейшего представления, даже предположу, что никак (если Ubuntu не умеет работать с виртуальными дисками в формате VHD, так как умеют 8-ка и 7-ка).

      Единственное, что приходит на ум – запускать ее в виртуалке (в 8-ке есть встроенный гипервизор, правда не помню, во всех ли версиях), но это совсем другая песня.

  3. ppsbkwmcrs says:

    Если чесно, я думал что Операционкам от Майкрософт, далеко до Линуксов. Но в случае с виртуальными жесткими дисками VHD, ситуация обратная! Представьте себе, Великий и Могучий ЛИНУКС, не умеет работать с VHD. Я в шоке!

    • Ну я не утверждал, что не умеет – может и умеет. Тут проблема в том, что поддержка должна быть на уровне:
      – загрузчика
      – драйверов, которые работают на этапе загрузки и инициализации ядра а также потом – после запуска ядра, во время работы остальных процессов.

      При том количествее независимых компонент для выполнения одних и тех же задач, которое есть в Linux, такое в принципе может и сыскаться. Беда в том, что нужно и скать и разбираться. Мне, к счастью работа с Linux не нужна и я себя не морочу такими задачами.

      Ну а что касается “Великого и Могучего” я как-то никогда не обольщался ни количеством, ни качеством имеющихся для Linux решений, так что и шокироваться вроде нечем.

  4. Виталий says:

    Здравствуйте , всё сделал как написано в статье , но выбора систем при загрузке не появляется.Хотя в загрузчике вторая система есть . Может надо после всех настроек опять примонтировать виртуальный диск?

    • Нет, монтировать виртаульный повторно диск не нужно
      Идей, откровенно говоря, нет. А что показывает MSConfig? Две системы? А таймаут не 0?

      • Виталий says:

        MsConfig показывает две системы , таймаут стоит 10сек. Может файл .vhd перенисти на системный раздел ?

        • На сколько я помню, перенос VHD влиять на показ выбора систем не должен. Если загрузчик не найдет vhd он упадет позднее – при обращении к диску.

          Попробуйте явно заставить показывать boot menu (правда не очень понятно имеет ли этот параметр хоть какое-то влияние, но … чем черт не шутит):
          bcdedit /set {bootmgr} DisplayBootMenu 1

          Еще в порядке бреда: в 8-ке появилась опция выбора между графическим меню и обычным текстовым. Старый bcdedit эту опцию не знает, показывает ее как (см. на последней картинке):
          custom:250000c2 1

          Если посмотерть на список Loader Elements этот код соответсвует типу BcdOSLoaderInteger_BootMenuPolicy, про который написано, что он имеет 2 допустимых значения:
          menupolicylegacy = 0 и menupolicystandard = 1

          Я бы предложил попробовать выставить 0 принудительно. Т.е. у меня это будет команда:
          bcdedit /set {d50db6e2-2c9f-11e2-aedc-082e5f1d6fc6} custom:0x250000c2 0

          Других идей пока нет😦

    • Ну и еще, в процессе изысканий, нашел некий GUI Tool, может с ним будет удобнее разбираться, чем из командной строки Visual BCD Editor но сам я его даже не пробовал, так что ничего толком сказать не могу.

  5. Виталий says:

    Спсибо попробую и отпишусь.

  6. Сергей says:

    Здравствуйте Михаил,возможно ли организовать загрузку с VHD не имея установленной системы?.Если такое возможно не могли бы вы объяснить метод.

    • Добрый день, Сергей.

      Я правильно понимаю, что вы хотите следующего: иметь жесткий диск с разделами, на которох не будет установленно никакой ОС, а будут только лежать VHD-диски, с которых и будет происходить загрузка.

      Если да, то чисто в теории это возможно (сам я так не делал).
      В принципе, если у вас еще нет готовых VHD, вы можете просто выполнить шаги из статьи Скотта Хансельмана, на которую я ссылаюсь в самом начале. Он как раз создает там загрузочную флэшку и потом с нее устаналивает систему на VHD. Единственное, он там говорит, что прежде чем загружаться, нужно создать VHD диск, но это можно сделать и из консоли, той же самой утилитой dislpart.

      К сожалению, я пока не смогу сделать полную пошаговую инструкцию, но если вы опишите немного конкретнее свою ситуацию и подождете хотябы до конца следующей недели, я постараюсь такую инструкцию сделать.

      Идет?

      • Sergei says:

        Доброго времени суток Михаил.
        Большое вам спасибо за то,что вы своевременно реагируете.
        Детально описываете и ждете продолжения диалога.
        Черта сильного человека.
        ————————————–
        Вы совершенно правильно понимаете.
        ————————————–
        Я правильно понимаю, что вы хотите следующего: иметь жесткий диск с разделами, на которох не будет установленно никакой ОС, а будут только лежать VHD-диски, с которых и будет происходить загрузка.

        • >> Вы совершенно правильно понимаете
          Хорошо, тогда такой вопрос: из какого состояния вы планируете стартовать?
          Т.е.
          1) У вас еще нет ни одной установленной системы и ни одного VHD, и соответственно вам нужно: создать на винчестере VHD-файл и установить на него систему.
          2) У вас уже есть готовые VHD, которые лежат на чистом разделе винчестера и задача сводится к настройке загрузки с каждого из них.

          И еще вы смотрели статью Хансельмана? Она вам не подошла?

        • Увы, конец недели оказался очень напряженным. И добраться до инструкции так и не вышло😦

    • Собственно, вот мой вариант.
      Устроит?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s