Я использую двойную загрузку 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
вручную создать новую загрузочную запись и дать ей высокий приоритет. Пока все хорошо.