Можно ли загрузить Windows 8.1 без собственного загрузчика?

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 есть действительно хорошие и хорошие парни).

Это кажется (но это не документировано ясно) , что им удалось загрузить экспериментально сервер 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.

osolmaz
источник
1
Вы еще не предоставили достаточно информации. Отредактируйте свой вопрос, чтобы сообщить ответчикам, имеет ли данный аппарат прошивку EFI или старую прошивку в стиле ПК / AT. В данный момент вы говорите о программах начальной загрузки MBR на разделенных дисках EFI, что является бессмысленным ( если только одна из них не использует одну из моих программ или Г. Питера Анвина) и, вероятно, не является способом загрузки вашей машины .
JdeBP
Политика, которую вы описываете, не распространяется на Microsoft, она запрещает кому-либо использовать систему с двойной загрузкой
Ramhound
@JdeBP Вы правы. В какой-то момент я фактически использовал оба. Я использовал syslinux с методом pc \ at. Затем я установил GRUB в раздел EFI. Так что мой ноутбук поддерживает оба, но у меня каждый раз был один и тот же результат. Я постараюсь информировать себя в то же время. С другой стороны, вы понимаете, чего я пытаюсь достичь? Забыв о том, что я описал ранее, возможно, вы можете дать мне совет, выполнимо ли это или нет.
Осолмаз
Я не просил тип прошивки праздно. Это жизненно важный элемент, который вы должны предоставить. Без этого люди не могут даже начать правильный ответ. Отредактируйте свой вопрос, чтобы сообщить нам тип прошивки и (если EFI) включили ли вы модуль поддержки совместимости в setupутилиту прошивки .
JdeBP
@JdeBP Я редактировал вопрос.
Осолмаз

Ответы:

5

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

ChrisR.
источник
Прежде чем я приму это как ответ, я должен спросить: неужели задача будет трудоемкой для выполнения, в основном из-за низкого уровня взлома, необходимого для обмана любой программы, участвующей в процессе; заблуждение состоит в том, что Windows все еще думает, что она была загружена с собственным загрузчиком, в то время как на самом деле это было нечто иное ... И я предполагаю, что каждая версия Windows потребует отдельных усилий. Но это не делает задачу невозможной, просто очень сложной, верно?
osolmaz
3
Я бы не сказал, что это совершенно невозможно (в программировании), но вам придется перепроектировать вызовы, которые bootmgfw.efi делает для ОС Windows. Количество взломов низкого уровня, связанных с необходимостью перепроектировать вызовы протокола низкоуровневой загрузки загрузчику ОС, слишком дорого по времени. Вам нужно будет не только обмануть Windows, полагая, что bootmgfw.efi был там, но также и то, что BCD существует и что он был создан своими собственными инструментами и так далее.
ChrisR.
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
jmiserez
источник
1
Очень хорошо объяснил, спасибо. Несколько дней назад мне удалось сделать то же самое, но все еще использовать отдельный раздел для менеджера загрузки Windows EFI и через цепную загрузку с GRUB. Теперь я узнал, что могу также использовать свой оригинальный EPS. Кроме того, вместо использования bcdedit я использовал hivex для исправления BCD; Я намереваюсь написать набор бесплатных инструментов, чтобы иметь возможность манипулировать файлами BCD в Linux. Но я пытаюсь добиться чего-то другого. Если bootmgfw.efi каким-то образом выполняет winload.efi, почему я не смогу запустить winload.efi напрямую из GRUB?
osolmaz
О, я вижу. Итак, вы хотите пропустить загрузку диспетчера загрузки Windows (bootmgfw.efi) и загрузить загрузчик Windows (winload.efi) напрямую, считав BCD System Store? (Следуя определениям отсюда .) Интересно, я никогда не слышал, чтобы кто-то делал это. Какова ваша мотивация, почему необходимо напрямую загружать winload.efi? Кроме того, у вас есть полная копия \EFI\Boot\Microsoftпапки для тестирования (там есть несколько файлов)?
jmiserez
Ну, если бы я этого достиг, мне бы даже не нужно было читать BCD, я мог бы просто добавить запись в GRUB для раздела. (Я исключаю гибернацию и восстановление системы здесь) Моя мотивация заключается в том, что было бы намного проще установить Windows, не беспокоясь о том, что вам придется исправить это позже. Полезно для системных администраторов, пакетных установок и так далее (и для меня ^^). Почему напрямую загружать winload.efi: работать с закрытыми спецификациями файлов реестра Windows (двоичные файлы) гораздо сложнее, чем с простыми текстовыми конфигурационными файлами, такими как GRUB. Просто проще устранить среднего человека.
osolmaz
1
Я понимаю, что вы имеете в виду, да, это было бы очень удобно. Мне интересно, если 1) существуют ли какие-либо переменные, которые bootmgfw.efi передает в winload.efi при его запуске, и 2) может ли быть проблема с безопасной загрузкой и какой-то цепочкой сертификатов, необходимых. Вы узнали, что на inherit {bootloadersettings}самом деле означает в магазине BCD?
jmiserez
1
3) Поскольку я использовал hivex, я могу догадаться, какому объекту он соответствует. В улье есть «глобальный» объект настроек, и на любые другие объекты есть ссылка на него. Что я могу сказать, так это то, что для загрузки в Windows достаточно только двух объектов: 1: объект диспетчера загрузки Windows с постоянной uuid {9dea862c-5cdd-4e70-acc1-f32b344d4795} 2: объект, содержащий информацию о разделе и путь к загрузчику для вашего фактического корня Windows. Самым сложным было понять структуру двоичных данных, которая указала раздел. В основном это было сделано wodny: bitbucket.org/wodny/libbcd/src .
osolmaz
0

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

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

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

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

  3. Или запишите файл ISO на CD.

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

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

Раджу Девидас
источник
1
Я осознаю, что я хочу чего-то другого. Я спрашиваю, может ли Windows загружаться напрямую без цепной загрузки.
osolmaz