Вопрос или проблема
Я прошел через обычные шаги для добавления Windows в параметры загрузчика, изменив 40_custom и добавив следующее:
menuentry "Windows 10" {
insmod part_gpt
insmod chain
set root="(hd0,msdos2)"
chainloader +1
}
Тем не менее, когда я выбираю Windows в загрузчике, он говорит “Ошибка: недопустимая подпись. Нажмите любую клавишу для продолжения”. Я не знаю, почему я получаю эту ошибку. Как я могу это исправить?
ИЗМЕНЕНИЕ: Здесь написано, что есть синтаксические ошибки, но я не вижу никаких.
if [ "${grub_platform}" == "pc" ]; then
menuentry "Microsoft Windows Vista/7/8/8.1/10 BIOS/MBR" {
insmod part_msdos
insmod ntfs
insmod search_fs_uuid
insmod ntldr
search --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 XXXXXXXXXXXXXXXX
ntldr /bootmgr
}
fi
ИЗМЕНЕНИЕ2: Вывод sudo fdisk -l
~$ sudo fdisk -l
Диск /dev/sda: 298.1 GiB, 320072933376 байт, 625142448 секторов
Единицы: секторы по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер ввода/вывода (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x71b1e4fb
Устройство Загрузка Начало Конец Секторы Размер Id Тип
/dev/sda1 63 80324 80262 39.2M de Dell Utility
/dev/sda2 * 223580160 286285823 62705664 29.9G 83 Linux
/dev/sda3 30801920 223580159 192778240 91.9G 7 HPFS/NTFS/exFAT
/dev/sda4 286287870 625141759 338853890 161.6G 5 Расширенный
/dev/sda5 571742208 573741055 1998848 976M 82 Linux swap / Solaris
/dev/sda6 573743104 625141759 51398656 24.5G 83 Linux
/dev/sda7 286287872 345180159 58892288 28.1G 83 Linux
Записи таблицы разделов не находятся в порядке диска.
Диск /dev/sdb: 7.5 GiB, 8004829184 байт, 15634432 сектора
Единицы: сектора по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер ввода/вывода (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x037cbc77
Устройство Загрузка Начало Конец Секторы Размер Id Тип
/dev/sdb1 * 2048 15634431 15632384 7.5G c W95 FAT32 (LBA)
Похоже, вы следовали старой инструкции, которая предполагает, что Windows использует MBR-разделение.
Ошибка “недопустимая подпись” говорит о том, что Secure Boot включен. Когда Secure Boot включен, все загрузчики должны быть подписаны закрытым ключом, и соответствующий открытый ключ должен быть включен в переменные Secure Boot в прошивке NVRAM. GRUB добросовестно считывает первый сектор указанного вами раздела, но так как он не содержит соответствующей подписи Secure Boot, прошивка отказывается его выполнять.
Secure Boot требует нативной загрузки в стиле UEFI в качестве предварительного требования. Вы можете попробовать отключить Secure Boot на вашей системе, но поскольку GRUB уже запускается у вас, скорее всего, в этом нет необходимости.
Ваш insmod part_gpt
говорит о том, что вы ожидаете, что диск будет иметь разделение в стиле GPT, что обычно сочетается с UEFI-загрузкой, но с другой стороны, set root=(hd0,msdos2)
ожидает MBR-раздел.
На моей системе Debian с разделением GPT строка set root
выглядит следующим образом: set root="hd0,gpt1"
. Если ваша система использует GPT-разделение, используйте идентификаторы разделов gptN
вместо msdosN
.
Также chainloader +1
указывает GRUB считать загрузочный блок из первого блока раздела; в нативной загрузке UEFI такого не существует. Чтобы загрузить Windows в режиме UEFI, строка set root
должна указывать на EFI System Partition, содержащий загрузчик Windows, а строка chainloader должна быть chainloader /EFI/Microsoft/Boot/bootmgfw.efi
.
Вы можете добавить пользовательскую запись в GRUB2, отредактировав /etc/grub.d/40_custom
.
Если этот файл уже содержит запись для рабочей конфигурации, измените 40
на другое число, которое еще не используется в /etc/grub.d/ [меньшие номера загружаются первыми]. Если вы редактируете существующий конфигурационный файл, сделайте резервную копию!
Я использовал Grub-Customizer
для добавления новой конфигурации grub. Запись, которую он сгенерировал автоматически, не сработала, поэтому я отредактировал ее в качестве пользовательского скрипта в соответствии с рекомендациями telcoM.
Вот мой файл 40_custom
.
#!/bin/sh
exec tail -n +3 $0
# Этот файл предоставляет простой способ добавить пользовательские записи меню. Просто введите
# записи меню, которые вы хотите добавить, после этого комментария. Будьте осторожны, чтобы не изменить
# строчку 'exec tail' выше.
menuentry "Windows 10 (loader)"{
insmod part_gpt
search --no-floppy --set=root --fs-uuid 109C-D028
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
затем выполните update-grub
Вы можете отключить любые конфигурационные записи, которые вы не используете (но хотите сохранить), с помощью chmod -x /path/to/file
или +x
для активации. Это оставляет их там, где они должны быть, скрывая от меню GRUB2.
Некоторая соответствующая информация о моей системе:
Запуск Arch Linux (март 2019) и Windows 10, каждая на своем отдельном диске. Каждая с GPT. По-видимому, GRUB2 не будет загружать раздел BIOS, если работает в UEFI, (или UEFI-диск, если запущен в режиме BIOS).
Вам следует установить os-prober
и запустить его один раз
sudo apt-get install os-prober
sudo os-prober
Сгенерируйте файл конфигурации grub
sudo grub-mkconfig -o /boot/grub/grub.cfg
Не редактируйте файл вручную
Ответ или решение
Добавление Windows 10 в загрузчик GRUB2
Добавление Windows 10 в меню загрузки GRUB2 может быть вызовом, особенно если вы используете разные схемы разметки дисков (MBR и GPT) и режимы загрузки (BIOS и UEFI). В этой инструкции мы рассмотрим последовательность действий, необходимых для успешного добавления Windows 10 в меню загрузчика, а также исправление ошибок, которые могут возникнуть.
1. Понимание конфигурации вашего диска
На основании вашей информации о разделе диска, вашем компьютере установлен Windows 10 на диске, используя NTFS, и у вас есть установленная Linux (например, Ubuntu) на другом разделе. Согласно команде fdisk -l
, у вас используется MBR для разметки диска. Следовательно, следующий шаг будет добавление правильной конфигурации для Windows в GRUB2.
2. Изменение файла конфигурации GRUB2
Для успешного добавления Windows необходимо внести изменения в файл /etc/grub.d/40_custom
. Ваша текущая конфигурация, которая вызывает ошибку "invalid signature", может нуждаться в корректировках.
Вот пример, как это должно выглядеть для GPT и UEFI:
#!/bin/sh
exec tail -n +3 $0
menuentry "Windows 10 (loader)" {
insmod part_gpt
insmod chain
search --no-floppy --set=root --fs-uuid XXXXXXXXXXXXXXXX # Укажите здесь UUID раздела с WIndows
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
Обратите внимание, что вы должны заменить XXXXXXXXXXXXXX
на фактический UUID вашего Windows-раздела. Чтобы узнать, какой UUID использовать, выполните команду:
blkid
3. Проверка и настройка Secure Boot
Ошибка "invalid signature" может указывать на то, что включен режим Secure Boot. Вам нужно будет либо отключить его в настройках BIOS/UEFI, либо убедиться, что ваш GRUB и ядро Linux подписаны должным образом.
4. Обновление конфигурации GRUB
После внесения изменений в файл 40_custom
, вам необходимо обновить конфигурацию GRUB, выполнив:
sudo update-grub
Это сгенерирует новый файл конфигурации GRUB, который будет включать новую запись.
5. Установка os-prober
os-prober
анализирует ваши диски на наличие других операционных систем (например, Windows) и автоматически добавляет их в конфигурацию GRUB. Чтобы установить его, выполните команду:
sudo apt-get install os-prober
И затем выполните:
sudo os-prober
6. Перезагрузка
Теперь вы можете перезагрузить компьютер и проверить, появилась ли ваша запись Windows 10 в меню GRUB. Если все сделано правильно, вы сможете выбрать Windows 10 и загрузиться в него без ошибок.
Заключение
Настройка GRUB2 для корректной загрузки Windows 10 может быть не тривиальной задачей, особенно при использовании различных методов разметки и загрузки. Важно понимать, какой режим загрузки вы используете (BIOS или UEFI) и какую разметку (MBR или GPT) ваш диск имеет. Полная проверка конфигурации и использование os-prober
помогут сделать процесс более гладким.
Если вы по-прежнему испытываете трудности, рекомендуется обратиться к документации GRUB или сообществу, соответствующему вашей операционной системе для получения дополнительной поддержки.