Я пытался придумать более простой способ установки двойной загрузки 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.