Страницы

Поиск по вопросам

пятница, 10 января 2020 г.

Установить grub без замены загрузчика

#linux #windows #grub #dual_boot


После установки Windows первичным загрузчиком стал его собственный.
Имеется Linux Mint, поэтому нужно иметь grub.

Однако, вместо стандартного варианта, при котором первичным загрузчиком становится
grub, я хочу установить grub на отдельный раздел и прописать в виндовом загрузчике
команду для передачи управления grub'у. Естественно, виндовый загрузчик должен остаться
первичным.

Как установить grub, чтобы получилась такая конфигурация?
    


Ответы

Ответ 1



предуведомление: далее изложенное весьма упрощено и относится только к «традиционной» (или «старой») схеме разбивки диска под названием dos partition table (mbr-based partitioning). хотя, вероятно, отчасти справедливо и для guid partition table (gpt). но точно не относится к unified extensible firmware interface (uefi). упрощённо говоря, bios загружает в память первые 512 байт с указанного в его настройках блочного устройства, и передаёт управление этому «кусочку кода» (в терминах grub-а это называется «загрузчик первой стадии» — stage 1 loader). помимо исполняемого кода там есть и ещё кое-какая необходимая этому самому коду информация. понятно, что в такой мизерный объём кода что-то разумное уместить довольно сложно, и, фактически, этот код всего лишь загружает другую, значительно бо́льшую порцию кода (stage 2), и передаёт управление ей. откуда именно брать эту вторую порцию, «загрузчик первой стадии» узнаёт из той самой информации, которая записана рядом с ним в те самые 512 байт. в числе прочего там записаны, как минимум: адрес блочного устройства (ведь stage 2 может располагаться и на другом б.у.) и адрес сектора(-ов), который(-е) надо загружать в память. почему адрес сектора, а не имя файла? потому что в 512 байт невозможно «уложить» код, который умел бы работать с файловой системой. кстати, к слову: в случае перезаписи файла со stage2 его физическое местоположение с большой вероятностью изменится, и, соответственно, потребуется и корректировка содержимого тех самых 512 байт «загрузчика первой стадии». а вот уже тот код, что загрузился из stage 2, «понимает» и файловые системы, и конфигурационные файлы может прочитать, и вывести диалог пользователю, основанный на этих конфигурационных файлах, и выбранную программу, выполняющую функции ядра, загрузить (ту, загружать которую «обучен»: ntoskrnl.exe, linux и т.д. и т.п.). stage2-загрузчик от компании ms, понятно, не «обучен» загружать программу linux, а stage2-загрузчик grub (равно как и lilo и прочие) не «обучен» загружать ntoskrnl.exe. но все они могут загрузить другие stage1-загрузчики (и даже stage2-загрузчики) и передать управление им. а далее можно говорить лишь о степени автоматизации настройки этого процесса. в случае загрузчика от компании ms, понятно, никакой автоматизации настройки не предусмотрено: облегчение процесса использования «чужой» операционной системы — это «удар ниже пояса», т.е., по кошельку. как говорится, «это просто бизнес, ничего личного». для настройки нужно разжиться «загрузчиком первой стадии», записать эти 512 байт в файл (например, c:\bootsect.aln) и добавить строку в секцию operating systems конфигурационнога файла загрузчика c:\boot.ini примерно такого содержания: c:\bootsect.aln="alien operating system" не забудьте ещё каждый раз вручную обновлять содержимое этого 512-байтного файла после обновления stage2-загрузчика, на адреса секторов с которым он (файл) должен ссылаться! существуют, конечно, всякие «загрузочные менеджеры» (типа упомянутого в комментариях easybcd), а вот реализован ли хоть в каком-либо из них автоматический учёт обновления в stage2-файле того же grub-а, я не знаю. но подозреваю, что вряд ли (учитывая, во-первых, что разедов с grub-ами может быть значительно больше одного, а во-вторых, что «инициатива обновления» приходит со стороны grub-а, который, вполне естественно, вряд ли подозревает о существовании каких-либо «менеджеров загрузки»). в случае загрузчика grub подход диаметрально противоположен: всё (что возможно) сделано для упрощения настройки процесса загрузки других операционных систем. в «обычных условиях» всё вообще происходит «автомагически»: в процессе установки программы grub (и при обновлении файлов, содержащих stage2) вызывается программа update-grub (входит в состав пакета grub), которая (как правило, вполне удачно) «находит» на блочных устройствах и их разделах другие загрузчики, и добавляет пункты с ними в загрузочное меню. какой путь вам больше подходит — выбирайте сами. p.s. пожалуй, стоит отметить, что код «загрузчика второй стадии» программы grub давно разросся до такой степени, что разработчикам пришлось создать (правда, не только по этой причине) промежуточный загрузчик (который назвали stage 1.5). сути это не меняет, но про стадии 1, 1.5 и 2 написано даже в википедии, и упоминание будет уместным. дополнение по поводу того, куда ставить 512 байт stage1, чтобы не затереть mbr: ставьте не в mbr диска, а в vbr раздела. там есть достаточно места. установщики загрузчиков об этом знают, и умеют с ним обращаться.

Ответ 2



Всё очень просто - ntldr, используемый по сей день, не умеет читать ext4 и прочие ФС, которые обычно используются для grub. Нужно грузить grub через ntldr - пожалуйста, выводите grub на раздел с fat32 или ntfs. А установить grub без перезаписи бут-сектора реально, но сложно, если используется debian/ubuntu, т. к. в их пакетах прописана перезапись бут-сектора при установке grub'a.

Комментариев нет:

Отправить комментарий