Чи можливо завантажувати 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.

EDIT

Я дивився на бінарні файли 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-direct-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. Майдан Брауна Майкла Брауна безпосередньо викликає PE BootMgr PE [1], щоб він міг викликати WinLoad безпосередньо, за винятком того, що WinLoad, ймовірно, хоче більше середовища. Ви можете спробувати!

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


1
Ви ще не надали достатньо інформації. Відредагуйте своє запитання, щоб повідомити користувачам, чи має ця машина мікропрограмне забезпечення EFI чи стару прошивку в стилі ПК / AT. На даний момент ви говорите про програми завантаження MBR на дисках, що розбиваються на EFI, що є ( якщо ви не використовуєте одну з моїх програм або H. Петра Енвіна) нісенітницю, і, швидше за все, це не спосіб, з якого завантажується ваша машина .
JdeBP

Політика, яку ви описуєте, не виходить з Microsoft, заважає комусь
створити

@JdeBP Ви праві. У якийсь момент я фактично використовував і те, і інше. Я використовував syslinux з методом pc \ at. Потім я встановив GRUB на розділ EFI. Тож мій ноутбук підтримує і те, і інше, але я мав кожен результат однаковий. Я постараюся тим часом повідомити себе. З іншого боку, ти розумієш, чого я намагаюся досягти? Забувши те, що я описав раніше, можливо, ви можете дати мені поради, чи можна це зробити чи ні.
osolmaz

Я не просив тип прошивки простою. Це важлива дата, яку ви повинні надати. Без цього люди навіть не можуть почати належної відповіді. Відредагуйте своє запитання, щоб повідомити нам тип прошивки та (якщо EFI), чи увімкнено модуль підтримки сумісності в setupутиліті прошивки .
JdeBP

@JdeBP Я змінив питання.
osolmaz

Відповіді:


5

Щоб відповісти на своє первісне запитання, ні. Windows не можна завантажити, не пройшовши власний завантажувач (у випадку встановлення UEFI, bootmgfw.efi). Це тому, що Windows очікує, що завантажувач буде там і викликати winload.efi. Якщо цього не відбудеться, тоді Windows вийде з ладу, поки ви не усунете проблему. Причин тому багато (практичні та неосвічені). Переважно, це тому, що Microsoft написав інструмент завантаження для обробки всіх речей (завантаження ОС, завантаження середовища відновлення, псевдосередовище перед ОС та ін.). Єдиний спосіб досягти будь-якої видимості розуму - це ланцюговий навантаження за допомогою Grub-efi.


Перш ніж прийняти це як відповідь, я повинен запитати: чи це завдання було б важко досягти важко, здебільшого через кількість злому на низькому рівні, необхідного для обману будь-якої програми, яка бере участь у процесі; обман полягає в тому, що Windows все ще вважатиме, що він завантажений власним завантажувачем, а насправді це було щось інше ... І я здогадуюсь, що кожна версія Windows потребує окремих зусиль. Але це не робить завдання неможливим, просто дуже важко?
osolmaz

3
Я б не сказав, що це абсолютно неможливо (в програмуванні), але вам доведеться повернути інженеру виклики, які робить bootmgfw.efi до ОС Windows. Кількість хакерів низького рівня, пов’язаних із потребою повернути інженерний протокол завантаження низькорівневого завантаження на завантажувач ОС, є надзвичайно дорогим щодо часу. Вам потрібно буде не тільки обдурити Windows, вважаючи, що bootmgfw.efi був там, але й те, що BCD існує і що він був створений власними інструментами тощо.
КрісР.

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 Boot Manager" або "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

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? (Йдучи за визначеннями звідси .) Що цікаво, я ніколи не чув, щоб хтось робив це. Яка ваша мотивація, чому потрібно безпосередньо завантажувати winload.efi? Також у вас є повна копія \EFI\Boot\Microsoftпапки для тестування (там є пара файлів)?
jmiserez

Добре, якби я цього домагався, мені навіть не потрібно було б читати BCD, я міг би просто додати запис до GRUB для розділу. (Я тут виключаю сплячку та відновлення системи) Моя мотивація полягає в тому, що встановити вікна було б набагато простіше, не переживаючи, що вам доведеться це виправити пізніше. Корисно для sysadmins, пакетних установок тощо (і для мене ^^). Що стосується того, чому безпосередньо завантажувати winload.efi: робота з закритими специфічними файлами реєстру Windows (двійкові) набагато більш втомлива, ніж спілкування з просто текстовими конфігураційними файлами, такими як GRUB. Просто усунути середнього чоловіка просто простіше.
osolmaz

1
Я бачу, що ви маєте на увазі, так, це було б дуже зручно. Мені цікаво, чи 1) чи є якісь змінні bootmgfw.efi переходять на winload.efi при його запуску, і 2) чи може виникнути проблема із захищеним завантаженням та якоюсь ланцюжком сертифікатів. Ви дізналися, що inherit {bootloadersettings}насправді означає магазин BCD?
jmiserez

1
3) Оскільки я використовував hivex, я можу здогадатися, який об’єкт відповідає. У вулику є об’єкт "глобальних" налаштувань, і всі інші об'єкти мають посилання на нього. Що я можу сказати, для завантаження Windows достатньо лише двох об'єктів: 1: об’єкт Windows Boot Manager з постійним uuid {9dea862c-5cdd-4e70-acc1-f32b344d4795} 2: об'єкт, що містить інформацію про розділи та шлях завантажувача. для вашого фактичного кореня Windows. Найважче було зрозуміти структуру бінарних даних, яка вказала розділ. Здебільшого це робило wodny : bitbucket.org/wodny/libbcd/src .
osolmaz

0

Ви можете робити установки в будь-якому порядку, тобто встановлення GNU / Linux, а потім Windows або віце-верш.

Виконайте наступне після встановлення всіх ваших операційних систем.

  1. Отримайте "Ремонт диска завантаження" звідси. http://sourceforge.net/projects/boot-repair-cd/

  2. Створіть у ньому живий завантажувальний USB-накопичувач (Інструкції на pendrivelinux.com)

  3. Або запишіть файл ISO на компакт-диск.

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

Всього найкращого.


1
Я усвідомлюю це, те, що я хочу, - це щось інше. Я запитую, чи можна завантажувати Windows безпосередньо без завантаження ланцюга.
osolmaz
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.