40_custom을 수정하고 다음을 추가하여 부트로더 옵션에 Windows를 추가하는 일반적인 단계를 완료했습니다.
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
EDIT2: sudo fdisk -l의 출력
~$ sudo fdisk -l
Disk /dev/sda: 298.1 GiB, 320072933376 bytes, 625142448 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x71b1e4fb
Device Boot Start End Sectors Size Id Type
/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 Extended
/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
Partition table entries are not in disk order.
Disk /dev/sdb: 7.5 GiB, 8004829184 bytes, 15634432 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x037cbc77
Device Boot Start End Sectors Size Id Type
/dev/sdb1 * 2048 15634431 15632384 7.5G c W95 FAT32 (LBA)
답변1
귀하는 이전 지침을 따르고 있으며 Windows가 MBR 파티션을 사용할 것으로 예상합니다.
"잘못된 서명" 오류는 보안 부팅이 활성화되었음을 나타냅니다. 보안 부팅이 활성화되면 모든 부트로더는 개인 키로 서명되어야 하며 일치하는 공개 키는 펌웨어 NVRAM의 보안 부팅 변수에 포함되어야 합니다. GRUB는 사용자가 지정한 파티션의 첫 번째 섹터를 충실히 읽고 있지만 해당 섹터에 적절한 보안 부팅 서명이 포함되어 있지 않기 때문에 펌웨어는 해당 섹터의 실행을 거부합니다.
보안 부팅에는 기본 UEFI 스타일 부팅이 전제 조건으로 필요합니다. 시스템에서 보안 부팅을 비활성화할 수 있지만 GRUB가 이미 시작되었으므로 이것이 필요하지 않을 수도 있습니다.
insmod part_gpt
디스크에는 일반적으로 UEFI 부팅 스타일과 함께 사용되는 GPT 스타일 파티션이 있을 것으로 예상하지만 반면에 set root=(hd0,msdos2)
MBR 파티션도 필요하다고 제안 하고 있습니다.
GPT 파티션을 사용하는 Debian 시스템에서 다음 set root
줄은 다음과 같습니다 set root='hd0,gpt1'
. 시스템이 GPT 파티션을 사용하는 경우 gptN
대신 파티션 식별자를 사용하십시오 msdosN
.
GRUB는 또한 chainloader +1
파티션의 첫 번째 블록에서 부팅 블록을 읽으라는 지시를 받습니다. UEFI 기본 부팅에서는 그런 것이 없습니다. UEFI 모드에서 Windows를 부팅하려면 set root
행이 Windows 부트 로더가 포함된 EFI 시스템 파티션을 가리켜야 하며 체인로더 행은 chainloader /EFI/Microsoft/Boot/bootmgfw.efi
.
답변2
을 편집하여 이를 수행할 수 있습니다 /etc/grub.d/40_custom
. 파일이 이미 작업 구성에 대한 항목인 경우 40
아직 사용하지 않는 /etc/grub.d/의 다른 번호로 변경하십시오[낮은 번호를 먼저 로드]. 기존 구성 파일을 편집하는 경우백업을 하세요!
한 번 Grub-Customizer
새로운 grub 구성을 추가했습니다. 자동으로 생성된 항목이 작동하지 않아서 telcoM에서 제안한 대로 사용자 정의 스크립트로 편집했습니다.
이것은 내 40_custom
파일입니다.
#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry "Windows 10 (loader)"{
insmod part_gpt
search --no-floppy --set=root --fs-uuid 109C-D028
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
그런 다음 실행ubdate-grub
사용하지 않는(그러나 저장하려는) 구성 항목을 사용하거나 활성화하여 비활성화할 수 chmod -x /path/to/file
있습니다 +x
. 이렇게 하면 GRUB2 메뉴에서 숨겨지면서 원래 위치에 유지됩니다.
내 시스템에 관한 일부 관련 정보: Arch Linux(2019년 3월) 및 Windows 10을 각각 별도의 드라이브에서 실행합니다. 각각에는 GPT가 있습니다. 분명히 GRUB2는 UEFI(또는 BIOS 모드로 부팅된 경우 UEFI 디스크)에서 실행 중인 경우 BIOS 파티션을 로드하지 않습니다.
답변3
한 번 설치 os-prober
하고 실행 해야합니다
sudo apt-get install os-prober
sudo os-prober
grub 구성 파일 생성
sudo grub-mkconfig -o /boot/grub/grub.cfg
파일을 수동으로 편집하지 마세요