Как сделать так, чтобы загрузчик не исчез?

Как сделать так, чтобы загрузчик не исчез?

Я использую двойную загрузку Manjaro и Windows через Grub и UEFI на Lenovo Yoga C930, который использует Bitlocker и Secure Boot. Я могу успешно загрузиться в Manjaro, если отключу Secure Boot в BIOS, и я также могу загрузиться в Windows, если снова включу Secure Boot в BIOS. По неизвестным причинам и, по-видимому, случайным образом я просто потеряю свой загрузчик Linux. Я не знаю, удаляется ли он, или внезапно не может быть распознан, или что, но я не могу загрузиться с него, и он не отображается как опция в BIOS.

Я могу переустановить Grub, следуя инструкциям на Wiki, но в конечном итоге он просто исчезнет. Что происходит, и как я могу предотвратить это?

решение1

Я предполагаю, что Windows защищает вашу систему от «рака».

[ПРАВКА] У вас есть два решения, в зависимости от того, какой метод загрузки вы используете: устаревший и UEFI.

Наследие:

Можно использовать bcdкак менеджер загрузки для запуска Windows или Linux.

Предположим, что у вас установлен grub /dev/sdaи /dev/sda1это раздел Windows EFI

В Linux:

mount /dev/sda1 /mnt
dd if=/dev/sda of=/mnt/linux.bin bs=512 count=1

В Windows:

bcdedit /create /d "Linux" /application bootsector

BCDEdit вернет буквенно-цифровой идентификатор для этой записи, который я буду называть {ID} в оставшихся шагах. Вам нужно будет заменить {ID} фактическим возвращенным идентификатором. Примером {ID} является {d7294d4e-9837-11de-99ac-f3f3a79e3e93}. Далее давайте укажем, в каком разделе размещена копия файла linux.bin:

bcdedit /set {ID} device partition=c:

Путь к нашему файлу linux.bin:

bcdedit /set {ID}  path \linux.bin

Запись в отображаемом меню во время загрузки:

bcdedit /displayorder {ID} /addlast

и наконец, давайте укажем, как долго будут отображаться пункты меню:

bcdedit /timeout 30

Вот и все! Теперь перезагрузитесь, и вам будет представлено меню, в котором вы можете выбрать загрузку Windows или Linux. Когда вы выберете Linux, вы попадете в меню загрузчика, в котором вы можете выбрать загрузку Linux.

https://www.iceflatline.com/2009/09/how-to-dual-boot-windows-7-and-linux-using-bcdedit/

[РЕДАКТИРОВАТЬ] УЕФИ

Ваша система Windows имеет раздел EFI, с которого она загружается. В Linux вы монтируете его в /boot. Затем убедитесь, что вы grub.cfgищете корневой раздел с помощью uuid (по умолчанию он это делает): например: linux /vmlinuz-4.4.0-1-default root=UUID=6159e15d-f224-499d-88e0-437b5538f0f1 quiet splash=silent, если это не так, вы используете blkidдля вывода UUID вашего корневого раздела и адаптации конфигурации grub в /etc/grub.d.

Вы записываете свою конфигурацию grub в/boot/boot/efi/EFI/manjaro/grub.cfg

grub2-mkconfig -o /boot/boot/efi/EFI/manjaro/grub.cfg

Перезагрузитесь, и все «должно» быть готово.

решение2

У меня была похожая проблема почти два года назад, с двойной загрузкой Trisquel Linux и Windows 8. Я разместил вопрос/ответздесьна Super User (мне тогда сказали, что вопросы двойной загрузки по какой-то причине не относятся к теме U&L).

Как вы увидите в этих сообщениях, проблема была не в том, что Windows удаляла или перезаписывала GRUB, а в том, что она периодически меняла настройки UEFI, чтобы указать ей использовать загрузчик Windows, а не GRUB. Решением было использование bcdedit в Windows, чтобы установить путь загрузчика по умолчанию на GRUB, что решило мою проблему.

Не знаю, подойдет ли вам это решение, но, возможно, стоит попробовать?

(Кроме того, я не думаю, что для загрузки Windows нужно включать функцию Secure Boot. У меня Windows 8 прекрасно загружается с отключенной функцией.)

решение3

Я на самом деле сам это понял. Оказывается, мне пришлось efibootmgrвручную создать новую загрузочную запись и дать ей высокий приоритет. Пока все хорошо.

Связанный контент