Запуск Windows Server 2012R2 из VHDX файла с USB диска через UEFI

в 4:31, , рубрики: Серверное администрирование

Я решил сделать дисковый массив на платформе Intel Atom D410PT. Это материнская плата с пассивным охлаждением процессора, два слота памяти (максимум 4Gb), один слот PCI (который я использовал для контроллера SATA SiliconImage 3512 — 2x1.5Gb/s), 2 SATA (3.0Gb/s) разъема, LAN 100mb/s, и многочисленными USB 2.0 портами (в том числе и на самой материнской плате).
Сама плата поместилась легко в корпус NaviPower PIX-1001 230W. Полное описание моих действий с железом я разместил на своем сайте.

Соответственно, т.к. было решено использовать 4 диска для создания RAID5 массива, то логично вырисовалось решение вынести операционную систему на внешний USB носитель (в моем случае USB HDD Seagate Freeagent GoFlex). Так как установка и настройка системы «с нуля» является зачастую долгим и кропотливым занятием, то я решил что система будет лежать на внешнем диске в контейнере VHDX, а так как материнка поддерживает UEFI, то соответственно и загрузка должна идти используя UEFI. Основная проблема была в том, что в интернете нет понятной инструкции, как это сделать. Вся информация очень разрознена, и описываются только части решения этой задачи.

Я решил сделать так: вначале установить систему как обычно на SATA диск, а затем перенести ее в контейнер VHDX и затем на внешний носитель USB HDD.
Установку системы пропущу, т.к. это банальная операция, не требующая особых знаний (единственное, что если захочется установить систему на GPT диск, то перед установкой надо будет поиграться с diskpart).
Важное дополнение: перед переносом системы на внешний диск, надо обязательно отключить файл подкачки и систему гибернации!
Соответственно устанавливаем обновления системы, программы, делаем настройки.
Далее требуется перенести систему в VHDX контейнер. Для этого была скачана программа Disk2VHD 2.01. Интерфейс ее примитивен. Нужно только выбрать диск для переноса, файл VHDX и запустить процесс.

После этого на рабочей системе (можно на Windows 7 x64, но тогда будут проблемы с работой с VHDX. Лучше брать Windows Server 2012 или Windows 8 x64), надо подготовить USB диск к загрузке. В общих словах надо очистить диск от информации, создать 2 раздела, один из которых будет EFI (fat32, 300Mb, 4kb), а второй будет основной (NTFS, 1Tb, 64kb) для размещения нашего VHDX контейнера.
Подключаем диск к компьютеру, запускаем diskpart.exe.
Смотрим список дисков:

DISKPART> list disk

Диск ###  Состояние      Размер   Свободно Дин  GPT
  --------  -------------  -------  -------  ---  ---
  Диск 0    В сети         1863 Gбайт  1024 Kбайт
  Диск 1    В сети          931 Gбайт      0 байт
  Диск 2    В сети          931 Gбайт      0 байт        *
* Диск 3    В сети         1397 Gбайт      0 байт        *
  Диск 5    В сети          931 Gбайт      0 байт        *

Выбираем диск, с которым будем работать. Обычно это делается по размеру.
Внимание! если ошибетесь, то можете полностью стереть систему и данные с компьютера!

DISKPART> select disk 3

Выбран диск 3.

Далее надо очистить диск от всей информации:

DISKPART> clean

DiskPart: очистка диска выполнена успешно.

Далее конвертируем диск в GPT диск:

DISKPART> convert gpt

DiskPart: выбранный диск успешно преобразован к формату GPT.

Далее создаем первый раздел, где будет храниться EFI загрузчик. Мы его будем делать размером в 300мб, и размером страйпа 4kb (обычно надо тестировать, какой размер страйпа будет быстрее работать, но я делаю страйпы максимально большие, т.к. размеры файлов в наше время обычно больше 4 или даже 64 кбайт.):

DISKPART> create partition efi size=300

DiskPart: указанный раздел успешно создан.

Теперь его надо отформатировать в формате FAT32 (только такой формат поддерживает технология UEFI):

DISKPART> format fs=fat32 quick unit=4k

  Завершено (в процентах): 100

Программа DiskPart успешно отформатировала том.

Теперь надо присвоить этому разделу букву диска, чтобы работать с ним (в нашем случае это будет буква Y):

DISKPART> assign letter=y

DiskPart: назначение имени диска или точки подключения выполнено успешно.

Теперь надо разметить оставшуюся часть диска, где будет лежать файл rayserv.vhdx. Для начала создадим раздел:

DISKPART> create partition primary

DiskPart: указанный раздел успешно создан.

Теперь отформатируем его в NTFS с размером страйпа в 64kb:

DISKPART> format fs=ntfs quick unit=64k

  Завершено (в процентах): 100

Программа DiskPart успешно отформатировала том.

Теперь присвоим разделу букву Z:

DISKPART> assign letter=z

DiskPart: назначение имени диска или точки подключения выполнено успешно.

Теперь можно закрывать diskpart.exe:

DISKPART> exit

Завершение работы DiskPart...

Теперь можно копировать rayserv.vhdx на диск Z.
Дальше надо произвести некоторые подготовительные действия. Надо подключить виртуальный диск к системе.

Так как я работаю в Windows 7 x64, то соответственно моя система не поддерживает работу с файлами VHDX. Поэтому я заранее сделал не один файл-образ системы в VHDX, а два одинаковых образа системы, только один в формат VHD, а другой — VHDX. В текущий момент файл VHD лежит на диске D:, а файл VHDX уже лежит на USB диске с буквой Z:. Диск подключаем под буквой H:.

Теперь надо сделать EFI раздел загрузочным.
Скачиваем файл bootsect.exe на диск D: (файл можно найти с помощью утилиты Get Waik Tools, или на моей странице). Запускаем с параметрами:

D:>bootsect.exe /nt60 y: /force
Target volumes will be updated with BOOTMGR compatible bootcode.

Y: (DeviceHarddiskVolume53)

    Successfully updated FAT32 filesystem bootcode.

Bootcode was successfully updated on all targeted volumes.

Для того, чтобы скопировать загрузочные файлы на раздел EFI, заходим в папку H:WindowsSystem32 и запускаем команду:

H:WindowsSystem32>bcdboot.exe H:Windows /s Y: /f uefi
Boot files successfully created.

Теперь надо создать указать системе, что грузиться надо с VHDX файла. Для этого из папки H:WindowsSystem32 запускаем:

H:WindowsSystem32>bcdedit /store Y:EFIMicrosoftBootBCD /copy {default} /d "vhd boot (locate)"
The entry was successfully copied to {64d49e0f-ba36-11e3-8de2-1c6f653f47df}.

Ключ /store указывает путь, с каким файлом BCD нам надо работать.
Полученный код {64d49e0f-ba36-11e3-8de2-1c6f653f47df} запоминаем, или копируем с экрана.
Этой командой мы скопировали запись для загрузки по-умолчанию, и назвали ее «vhd boot (locate)».
Теперь присвоим этому номеру номер по-умолчанию:

H:WindowsSystem32>bcdedit /store Y:EFIMicrosoftBootBCD /default {64d49e0f-ba36-11e3-8de2-1c6f653f47df}
Операция успешно завершена.

Теперь надо системе для этой записи указать, что грузиться надо с определенного диска и определенного файла.

H:WindowsSystem32>bcdedit /store Y:EFIMicrosoftBootBCD /set {default} device vhd=[locate]rayserv.vhdx
Операция успешно завершена.

H:WindowsSystem32>bcdedit /store Y:EFIMicrosoftBootBCD /set {default} osdevice vhd=[locate]rayserv.vhdx
Операция успешно завершена.

Кстати, параметр [locate] очень полезен. Он говорит операционной системе, что при загрузке файл надо искать на всех дисках по-порядку.

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

H:WindowsSystem32>bcdedit /store Y:EFIMicrosoftBootBCD /set {default} detecthal on
Операция успешно завершена.

И напоследок надо отключить автозапуск консоли восстановления в случае проблем:

H:WindowsSystem32>bcdedit /store Y:EFIMicrosoftBootBCD /set {default} bootstatuspolicy ignoreallfailures
Операция успешно завершена.

Отключаем виртуальный диск от системы через панель управления дисками.

Практически готово. Теперь на конечной системе надо отключить все диски, кроме нашего, и включить UEFI загрузку в BIOS для USB носителей. Также возможно надо увеличить таймаут поиска USB устройств, т.к. с холодного запуска система может не увидеть внешний жесткий диск.
После этого загружаемся с USB диска.

При первой загрузке сервер у меня не запустился. Пришлось нажать F8 и выбрать безопасную загрузку. Тут сервер заработал, и после перезагрузки все стало работать как надо. Осталось только убрать таймаут в меню загрузки и все будет готово. Это можно на запущенной системе сделать через утилиту msconfig.

Автор: patyupin

Источник

Поделиться

* - обязательные к заполнению поля