운영 체제를 복제한 후 GRUB는 부팅하기 위해 다른 파티션을 선택한 경우에도 항상 소스 sda1 파티션에서 부팅합니다.

운영 체제를 복제한 후 GRUB는 부팅하기 위해 다른 파티션을 선택한 경우에도 항상 소스 sda1 파티션에서 부팅합니다.

/sda/저는 2개의 디스크, 하드 드라이브 및 새 솔리드 스테이트 드라이브에서 Debian 9 2개, Debian 11 1개, Windows 10 1개를 실행 해야 하는 노트북을 가지고 있습니다 /nvme0n1/.

나는 gparted를 사용하여 /sda1/데비안 9를 SDD로 복제하고 확장했습니다 /nvme0n1p5/.

/nvme0n1p5/GRUB2(네 가지 운영 체제를 모두 인식함)를 사용하여 Debian 9()를 부팅하면 항상 /sda1/레거시 부팅 모드에서 소스 파티션이 부팅됩니다. Debian 11은 부팅 시 설치 /sda5/되고 /nvme0n1p1/.

최신 SSD는 /nvme0n1/파티셔닝에 GPT를 사용하는 반면 HDD는 여전히 MBR을 사용합니다.

소스 파티션을 복제한 후 grub2를 grub-efi-amd64로 다시 설치하고 그에 맞게 grub-pc를 제거해야 했습니다.UEFI이중 부팅/다중 부팅여기에 제안된 대로.

머신에서 소스 파티션이 있는 HDD를 제거하고 GRUB가 어떻게 반응하는지 확인하지는 않았지만 그럴 필요는 없습니다.


편집 1

새로운 UUID를 제공하고 GRUB를 업데이트하려고 시도했지만 /nvme0n1p5/문제가 해결되지 않았습니다.

그런 다음 하드 드라이브를 제거하고 무슨 일이 일어나는지 확인했습니다. 결과는 네 번째 그림에 나와 있습니다. Windows Open이 /nvme0n1p1/더 이상 표시되지 않습니다. /sda1/또는 으로 부팅할 수 없습니다 /nvme0n1p5/. 첫 번째가 예상됩니다. 두 번째는 그렇지 않습니다.


SDA 파티션

nvme0n1 파티션

GRUB2 부팅

하드 디스크가 없는 GRUB2

답변1

Unix 및 Linux StackExchange에 오신 것을 환영합니다!

나는 데비안 9 부팅 옵션이 당신이 설명한 대로 동작하는 몇 가지 가능한 이유를 생각할 수 있습니다.

Debian 11 GRUB 사진에는 GRUB의 UEFI 버전이 성공적으로 시작되었음을 나타내는 "시스템 설정" 부팅 옵션이 있는 것으로 표시됩니다. 또한 Windows는 GPT 포맷 디스크에서 제대로 부팅할 수 있지만 이는 UEFI 모드에서만 발생할 수 있다고 말씀하셨습니다.

GRUB가 자체적으로 UEFI에서 레거시 모드로 전환할 수는 없다고 생각합니다. 따라서 "항상 레거시 부팅 모드를 사용하여 데비안 9를 부팅합니다 sda1" 증상은 UEFI 버전의 GRUB가 데비안 9 커널을 부팅하려고 시도하다가 실패했다는 의미일 수 있습니다. 시스템 펌웨어는 수행할 작업을 한 단계로 결정합니다. 시도해 볼 수 있는 다른 유효한 UEFI 부팅 옵션이 없으면 레거시 부팅 옵션을 시도하기 시작하여 결국 에서 부팅 가능한 MBR을 찾게 되어 sdaGRUB의 BIOS 버전이 부팅되고 결국에는 에서 데비안 9가 부팅됩니다 sda1.

데비안 9 설치를 복제할 때 nvme0n1p5파일 시스템 UUID를 변경했습니까 ? 동일한 UUID를 가진 두 개의 파일 시스템이 있고 펌웨어가 UEFI 모드의 NVMe에서만 부팅할 수 있다면 이는 Debian 9의 UEFI 모드 부팅이 실패하지만 레거시 모드는 작동하는 이유를 설명할 수 있습니다. UEFI 모드 부트 로더는 두 가지를 모두 볼 수 있습니다. Debian 9의 루트 파일 시스템에 예상되는 것과 동일한 UUID이며 레거시 모드 부트로더에서만 볼 수 있습니다 sda1.

Linux 커널이 부팅되면 부팅 모드에 관계없이 자체적으로 NVMe 드라이브를 지원하므로 실수로 레거시 부팅 모드에 있는 것 외에는 특이한 증상이 나타나지 않을 것입니다.

또 다른 가능성은 Debian 9가 32비트 버전으로 설치되어 있다는 것입니다. 레거시 모드 부팅 16비트 모드(!)로 부팅되며 레거시 모드 부팅에서 커널의 첫 번째 작업 중 하나는 호환성 기능을 비활성화하여 프로세서의 32비트 및 64비트 기능을 표시하는 것입니다. 그러나 UEFI는 기본 64비트 모드에서 부팅되며 32비트 커널 부팅을 허용하는지 확실하지 않습니다. 32비트 UEFI가 64비트 커널을 부팅할 수 있다는 것을 알고 있지만 그 반대가 지원되는지는 확실하지 않습니다. 32비트 커널 로드 시도로 인해 UEFI GRUB 부팅에 실패하는 경우 펌웨어가 레거시 모드 부팅을 시도하여 궁극적으로 sda1.

Debian은 보안 부팅을 활성화한 경우 Debian 10 이상에서만 보안 부팅 호환성을 구현합니다. (물론 보안 부팅을 활성화했다고 주장한 다음 UEFI 부팅이 실패할 경우 원활하게 레거시 BIOS 부팅으로 돌아가는 것은 그다지 안전하지 않습니다...)

따라서 Debian 9의 UEFI 부팅이 실패하는 이유에 대한 추가 정보가 필요합니다. 가장 먼저 할 수 있는 일은 스플래시 화면을 일시적으로 비활성화하고 자세한 시작 메시지를 활성화하는 것입니다. GRUB 부팅 메뉴에서 강조 표시를 "Debian 9 on nvme0n1p5" 부팅 옵션으로 이동하고 (비영구) E키 부팅 항목을 편집합니다. 많은 행이 표시됩니다. 다음 단어로 시작하는 줄을 찾으세요.

linux /boot/vmlinuz-<kernel version number here> <kernel boot options...>

커널 부팅 옵션에 quiet및/또는 단어가 포함되어 있으면 splash제거하십시오. 안전을 위해 verboseand 라는 단어를 쓸 수도 있습니다 nosplash. 그러면 Linux 커널이 출력됩니다.많은시작에 대한 세부정보입니다. 임시로 변경된 시작 옵션으로 시작하려면 F10또는 Control+를 누르세요 X.

여전히 일반적인 Debian 9 부팅 스플래시 화면이 보이고 시스템이 레거시 모드로 종료된다면 이는 화면이 디스플레이 모드를 전환하는 것보다 레거시 모드에서의 오류 및 재부팅이 더 빠르게 발생한다는 의미입니다. 이는 다음과 같은 경우 GRUB 부팅 중에 문제가 발생한다는 의미입니다. 커널을 부팅하려고 합니다.

Debian 9를 입력한 후 로그인하고 명령 프롬프트를 열고 를 입력합니다 uname -m. 응답에 x86_64, 또는 i386or 와 유사한 내용이 표시됩니까 i686? 첫 번째는 운영 체제에 64비트 커널이 있음을 의미하고 나머지는 모두 32비트 버전을 의미합니다.

답변2

마침내 문제가 UUID 문제라는 것을 알아냈습니다 /etc/fstab. 복제된 파티션의 Linux는 /nvme0n1p5/UUID용 파일 시스템을 로드합니다 /sda1/.

/etc/fstab파일에서 원래 파티션의 이전 UUID를 대상 파티션의 새 UUID로 바꿔야 했습니다 .

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=002ae0f2-b6df-4502-8a0c-b9db279142b1 /               ext4    errors=remount-ro 0       1

도착하다

# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>
# / was on /dev/sda1 during installation
UUID=248b6fec-3f9a-4e48-838f-cdea88cfe933 /               ext4    errors=remount-ro 0       1

패치 과정에서 다양한 방법으로 grub을 여러 번 업데이트했습니다. 나는 두 번째 부분이 원래 질문의 일부라고 생각하지 않지만 내가 만든 두 번째 질문에 대한 수정 사항입니다. 만약을 대비해 이것을 포함하고 있습니다. grub 메뉴 항목은 파일 시스템 검색을 위한 잘못된 파티션을 가리켰지만 Linux 커널 검색을 위한 올바른 항목을 가리켰습니다.

submenu "Advanced options for Debian GNU/Linux 9 (stretch) (on /dev/nvme0n1p5)"{
menuentry "Debian GNU/Linux (on /dev/nvme0n1p5)" --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.9.0-13-amd64--248b6fec-3f9a-4e48-838f-cdea88cfe933' {
        insmod part_gpt
        insmod ext2
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root  002ae0f2-b6df-4502-8a0c-b9db279142b1
        else
          search --no-floppy --fs-uuid --set=root 002ae0f2-b6df-4502-8a0c-b9db279142b1
        fi
        linux /boot/vmlinuz-4.9.0-13-amd64 root=UUID=248b6fec-3f9a-4e48-838f-cdea88cfe933 ro efi=runtime quiet
        initrd /boot/initrd.img-4.9.0-13-amd64
}

도착하다:

submenu "Advanced options for Debian GNU/Linux 9 (stretch) (on /dev/nvme0n1p5)"{
menuentry "Debian GNU/Linux (on /dev/nvme0n1p5)" --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-4.9.0-13-amd64--248b6fec-3f9a-4e48-838f-cdea88cfe933' {
        insmod part_gpt
        insmod ext2
        if [ x$feature_platform_search_hint = xy ]; then
          search --no-floppy --fs-uuid --set=root  248b6fec-3f9a-4e48-838f-cdea88cfe933
        else
          search --no-floppy --fs-uuid --set=root 248b6fec-3f9a-4e48-838f-cdea88cfe933
        fi
        linux /boot/vmlinuz-4.9.0-13-amd64 root=UUID=248b6fec-3f9a-4e48-838f-cdea88cfe933 ro efi=runtime quiet
        initrd /boot/initrd.img-4.9.0-13-amd64
}

grub-customizer이는 Debian 10 이상에서 제공되는 GUI를 통해 수행할 수 있습니다. 그렇지 않으면 EFI 시스템 파티션을 마운트하고 켜십시오 /grub/grub.cfg. 또한 고급 부팅 옵션도 수정해야 합니다. /grub/grub.cfg문제가 발생할 경우를 대비해 원본 파일을 백업해 두시기 바랍니다 .

를 사용하여 자신의 올바른 UUID를 찾으십시오 sudo blkid. 올바른 UUID는 부팅하려는 파티션의 UUID입니다.

관련 정보