10

Я пытался придумать более простой способ установки двойной загрузки Windows и Linux на свой ноутбук, не обязательно в таком порядке. Обычно нам нужно сначала установить Windows, а затем установить Linux и позволить GRUB работать с Windows.

Поэтому я пытаюсь найти способ обойти этот надоедливый процесс установки (windows) и просто использовать изображение для прямого копирования на мой диск. Это также позволило бы мне сохранить мой менеджер загрузки (GRUB). (не то, чтобы я не мог восстановить его впоследствии, но это политика Microsoft, чтобы монополизировать, в этом случае отрицая существование других менеджеров загрузки в системе).

Сначала я получил легальную копию Windows 8.1, а затем приступил к ее установке на виртуальной машине с использованием VirtualBox. Затем я создал раздел NTFS на моем жестком диске с разделами GPT и скопировал содержимое раздела Windows из образа .vdi во вновь созданный раздел.

Конечно, это пока не работает. Я не знаю, как заменить bootmgr. Это дает

File: \Boot\BCD
Status: 0xc000000e
Info: The Boot Configuration Data for your PC is missing or contains errors.

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

Теперь я прочитал, что bootmgr в конечном итоге выполняет winload.exe для загрузки Windows. Я понятия не имею, что делать дальше.

Я считаю, что это должно работать теоретически, потому что у меня есть все файлы, необходимые для запуска Windows. Я также думаю, что я не должен быть единственным, кто думал об этом, и, следовательно, я могу упустить что-то очень простое здесь. Может быть, это уже сделано?

Я понятия не имею, как работает загрузка. Что мне удалось понять, так это то, что при двойной загрузке Windows и Linux вы загружаете загрузчик Windows в Linux. Так что я пытаюсь добиться как-то избавления от загрузчика Windows.

РЕДАКТИРОВАТЬ

Я смотрю на двоичные файлы bootmgr и \Boot\BCD . bootmgr читает файл BCD и перечисляет ваши параметры, среди которых вы можете выбрать загрузку.

Таким образом, информация о выполнении winload.exe находится в файле BCD. Теперь я думаю, что сам bootmgr выполняется syslinux с помощью модуля chain.c32 . Я пытаюсь как-то запустить загрузчик Windows, т.е. winload.exe напрямую из syslinux (если это возможно), или изменить bootmgr так, чтобы он выполнял сам winload.exe (путь которого будет находиться непосредственно в исполняемом файле bootmgr ), не ища BCD или что-нибудь еще.

Гибернация (которая требует другой процедуры) не имеет значения для меня на этом этапе.

Отредактируйте свой вопрос, чтобы сообщить нам тип прошивки и (если EFI) включили ли вы модуль поддержки совместимости в настройке прошивки

Моя прошивка EFI (с включенным CSM), и я обычно загружаюсь в Arch Linux, используя GRUB. Я обнаружил, что bootmgr выполняет System32\winload.exe в устаревших системах и System32\winload.efi в EFI.

У меня есть 0.0 идеи о том, что делать отсюда. Последние 10 дней я пытался внести изменения в BCD, и я думаю, что скоро достигну успеха. Но это не имеет значения, потому что я действительно хочу вообще обойти Windows Boot Manager.

Если у вас есть идея, есть ли способ запустить этот winload.efi из оболочки EFI (только предположение) или какая-то другая модификация GRUB, чтобы он загружал Windows в режиме EFI без загрузчика цепей.

Любые советы приветствуются.

добавление

Следующие сообщения на форуме могут дать полезную информацию:

http://reboot.pro/topic/19371-chainload-directly-to-winloadexe/

1.

Grub4dos прямо сейчас может загружать загрузчик по цепочке (например, NTLDR или BOOTMGR), потому что он может служить заменой кода, содержащегося в "нормальном" загрузочном секторе (то есть что-то вроде 300 байтов машинного кода).

Этот код просто устанавливает несколько параметров, а затем вызывает загрузчик.

Даже это было (было) совсем не легко понять и воспроизвести с помощью другого кода.

Системный загрузчик NT, такой как BOOTMGR, имеет более или менее в одном .exe операционную систему "реального режима" (не совсем в отличие от DOS) и средства / инструменты для анализа как простого текста, так и кустов реестра, это не то, что можно повторно использовать. написано с нуля легко.

Хорошие парни @ReactOS работают над написанием FREELDR (который призван стать заменой гораздо более простой NTLDR) начиная с ГОДА (и поверьте мне, среди программистов ReactOS есть действительно хорошие и хорошие парни).

Кажется (но это явно не задокументировано), что им удалось экспериментально загрузить Server 2003 с NTLDR.

2.

С введением поддержки (U)EFI, BootMgr помогает абстрагироваться от разницы между BIOS и (U)EFI. Например, вот две последовательности:

BIOS (PCAT) -> BootMgr { BootMgr stub -> embedded BootMgr.exe } -> WinLoad.exe -> Windows
64-bit (U)EFI -> BootMgFw.efi -> BootMgr.efi -> WinLoad.efi -> Windows

WinLoad ожидает присутствия определенной среды (включая API). BootMgr позаботится об этом, поэтому [почти] одна и та же программа WinLoad будет работать в любой среде.

Фактически, (U)EFI определяет метод хранения и выборки параметров загрузки, поэтому BCD BootMgr покрывает эту же цель независимо от BIOS/(U)EFI.

Но помимо различий в BIOS и (U)EFI, BootMgr позволяет вам сделать «выбор при загрузке», тогда как WinLoad загружает определенную операционную систему, которая знает, как загружаться.

В зависимости от того, какая часть среды WinLoad ожидает присутствия, может быть возможно вызвать WinLoad напрямую. Wimboot Майкла Брауна напрямую вызывает BootMgr PE [1], поэтому он может напрямую вызывать WinLoad, за исключением того, что WinLoad, вероятно, хочет больше среды. Вы можете попробовать это!

[1] Не следует путать с BootMgr, который может вызывать GRUB4DOS и Syslinux 'chain.c32. Этот BootMgr содержит заглушку, которая знает, как вызывать встроенный BootMgr PE.

3 ответа3

5

Чтобы ответить на ваш оригинальный вопрос, нет. Windows не может быть загружена без использования собственного загрузчика (в случае установки UEFI - bootmgfw.efi). Это связано с тем, что Windows ожидает, что там находится менеджер загрузки, и вызывает winload.efi. Если этого не произойдет, Windows будет зависать, пока вы не исправите проблему. Для этого есть много причин (практических и невежественных). В основном это связано с тем, что Microsoft написала загрузочный менеджер для обработки всех вещей (загрузка ОС, загрузка среды восстановления, псевдо-предварительной среды и т.д.). Единственный способ достичь хоть какого-то подобия здравомыслия - это связать нагрузку с помощью Grub-efi.

2

Вам необходимо добавить загрузчик Windows EFI в список параметров загрузки в прошивке UEFI. Таким образом, вы сможете выбрать:

  1. GRUB2 должен быть загружен или
  2. загрузчик Windows должен быть загружен

В этом месте также должны быть видны дополнительные параметры, такие как привод DVD, внешние жесткие диски или загрузка по сети. Загрузчик UEFI обычно находится в разделе \EFI (/boot/efi/). Поскольку вы только что скопировали образ жесткого диска Windows без правильной установки Windows, раздел EFI вашего текущего компьютера может не содержать правильного загрузчика. Таким образом, необходимо

  1. Скопируйте загрузчик в раздел EFI
  2. Добавить Windows в качестве опции загрузки вместе с GRUB2

После этого вы сможете выбрать, какая ОС загружается, просто изменив порядок загрузки в BIOS. На моем ноутбуке нажатие F12 вызывает меню для выбора загрузчика.

Для этих шагов я буду использовать efibootmgr и следовать шагам из этого урока:

Вам потребуется скопировать соответствующий файл bootmgfw.efi в раздел EFI по адресу \EFI\Microsoft\Boot\bootmgfw.efi или /boot/efi/Microsoft/Boot/bootmgfw.efi при использовании Linux:

# mkdir -p /boot/efi/EFI/Microsoft
# cp -r Microsoft /boot/efi/EFI/Microsoft

где Microsoft - это папка, содержащая исходные файлы EFI для вашей версии Windows.

Затем вам нужно добавить файл .efi к загрузочным записям UEFI, используя:

# efibootmgr -c -d /dev/sda -p 1 -l \\EFI\\Microsoft\\Boot\\bootmgfw.efi -L "Windows Boot Manager"

где, конечно, вам нужно изменить /dev/sda и -p 1 на правильные значения для вашего дискового устройства и номера раздела.

Обратите внимание, если у вас есть ноутбук Lenovo:

Также обратите внимание, что по крайней мере один производитель (Lenovo) поставляет продукты с известной ошибкой, из-за которой система отказывается загружаться, если имя загрузчика не является либо "Диспетчером загрузки Windows", либо "Red Hat Enterprise Linux".

После запуска вашего ПК должно появиться что-то вроде этого (если вы удерживаете соответствующие клавиши во время процесса загрузки):

Windows Boot Manager
ubuntu
USB CD
USB FDD
ATAPI CD
ATA HDD2

(etc.)

и bcdedit в Windows показывает это:

C:\WINDOWS\system32>bcdedit /enum firmware

Firmware Boot Manager
---------------------
identifier              {fwbootmgr}
displayorder            {bootmgr}
                        {bb086763-b111-11e2-bf8e-806e6f6e6963}
                        {8e7fb978-8bc8-11e2-bf2f-806e6f6e6963}
timeout                 0

Windows Boot Manager
--------------------
identifier              {bootmgr}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\Microsoft\Boot\bootmgfw.efi
description             Windows Boot Manager
locale                  en-US
inherit                 {globalsettings}
integrityservices       Enable
default                 {current}
resumeobject            {ec215a09-8bc4-11e2-bf2b-0024d7eb75a4}
displayorder            {current}
toolsdisplayorder       {memdiag}
timeout                 2

(...)

Firmware Application (101fffff)
-------------------------------
identifier              {bb086763-b111-11e2-bf8e-806e6f6e6963}
device                  partition=\Device\HarddiskVolume2
path                    \EFI\ubuntu\grubx64.efi
description             ubuntu
0

Вы можете выполнить установку в любом порядке, т.е. установить GNU/Linux, а затем Windows или наоборот.

Просто сделайте следующее после того, как вы установили все свои операционные системы.

  1. Получите "Boot Repair Disk" отсюда. http://sourceforge.net/projects/boot-repair-cd/

  2. Создайте на нем загрузочный USB-накопитель (инструкция на pendrivelinux.com)

  3. Или записать файл ISO на CD.

  4. Пройдите через это и следуйте инструкциям на экране. У вас будет переустановленный GRUB, содержащий все установленные вами операционные системы.

Всего наилучшего.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .