Как на самом деле работает меню Grub?

После установки Ubuntu вместе с Windows (Dual-Boot) я обнаружил, что, независимо от того, какой раздел я установил в качестве активного (загрузочного), автоматически появляется Grub Menu и я могу загружаться с любой операционной системы.

Я пометил загрузочные диски C, D & E один за другим, и в каждом случае это работает нормально, в то время как ранее в случае Windows (установлена ​​только Windows) я получил «No os found» или «Boot Mgr is отсутствует ", сообщение об ошибке, при выполнении подобных вещей.

Как Grub не зависит от того, активен ли раздел или нет?

0
задан 23 July 2019 в 16:38

2 ответа

Windows и Ubuntu используют различные загрузчики

Ubuntu использует личинку. Windows использует BCD.

Часть личинки находится в Главной загрузочной записи (MBR) или в Системном разделе EFI (ESP) в зависимости от ли Ваши загрузки компьютера в режиме BIOS или UEFI прежней версии.

MBR живет в первых нескольких байтах физического диска, чтобы не быть перепутанным с разделом как то, какой Windows называет C "Диском".

В компьютерах с UEFI Windows не присваивает букву "диска" ESP по умолчанию.

Из комментария @oldfred:

Active в Windows boot-flag в Ubuntu. Личинка не использует boot-flag. Загрузчики Windows и использование Linux'es syslinux boot-flag найти дополнительный загрузочный код в загрузочном секторе раздела. Это все еще, как BIOS прежней версии работает.

См. визуальное руководство по последовательности начальной загрузки для получения дополнительной информации.

Новые компьютеры с UEFI и основанными на Таблице разделов GUID (GPT) системами, boot-flag используется для присвоения очень длинного GUID ESP. UEFI затем знает раздел FAT32, присвоенный быть ESP, где части загрузчиков и других загрузочных файлов хранятся.

Дополнительную информацию см. в Руководящих загрузчиках EFI.

Вот почему можно загрузить Ubuntu с помощью личинки, даже когда Вы устанавливаете D: как загрузочный в Windows.

0
ответ дан 23 October 2019 в 09:53

Это объясняет, как личинка загружает несколько дисков и разделов:

5.3.4 DOS/Windows

GRUB не может загрузить DOS или Windows непосредственно, таким образом, Вы должны цепочечная загрузка их (см. загрузку Цепочки). Однако их загрузчики имеют некоторые критические дефициты, таким образом, это не может работать только к цепочечной загрузке их. Для преодоления проблем GRUB предоставляет Вам две функции помощника.

При установке DOS (или Windows) на непервом жестком диске необходимо использовать метод обмена с диском, потому что, который ОС не может загрузить ни от каких дисков, но первого. Обходное решение, используемое в GRUB, является командой drivemap (см. drivemap), как это:

drivemap -s (hd0) (hd1)

Это выполняет виртуальную подкачку между Вашим первым и вторым жестким диском.

Внимание: Это эффективно, только если DOS (или Windows) использует BIOS для доступа к подкачанным дискам. Если, что ОС использует специальный драйвер для дисков, это, вероятно, не будет работать.

Другая проблема возникает при установке больше чем одного набора DOS/Windows на один диск потому что они могли быть смущены, если существует больше чем один основной раздел для DOS/Windows. Конечно, необходимо постараться не делать это, но существует решение, если Вы действительно хотите сделать так. Используйте метод сокрытия/отображения раздела.

Если GRUB скроет DOS (или Windows) раздел (см. parttool), то DOS (или Windows) проигнорирует раздел. Если GRUB раскроет DOS (или Windows) раздел, то DOS (или Windows) обнаружит раздел. Таким образом, если Вы установили DOS (или Windows) на первом и втором разделе первого жесткого диска, и Вы хотите загрузить копию на первом разделе, сделать следующее:

parttool (hd0,1) hidden-
parttool (hd0,2) hidden+
set root=(hd0,1)
chainloader +1
parttool ${root} boot+
boot

Примечания от parttool:

'начальная загрузка' (булевская переменная)

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

'введите' (оценивают)

  • Измените тип существующего раздела. Значение должно быть числом в 0-0xFF диапазоне (префикс с ‘0x’ для ввода его в шестнадцатеричный).

'скрытый' (булевская переменная)

  • При включении это скрывается, выбранный раздел путем установки скрытого бита в его разделе вводят код; при отключении раскрывает выбранный раздел путем очистки этого бита. Это полезно только при начальной загрузке DOS или Windows, и несколько основных разделов FAT существуют в одном диске. См. также DOS/Windows.
0
ответ дан 23 October 2019 в 09:53

Другие вопросы по тегам:

Похожие вопросы: