저장용으로 사용하는 NTFS 파티션 옆의 외장 하드 드라이브에 GNU/Linux(현재는 Fedora 26, 이전에는 Linux Mint 18.2 Sonya)가 설치되어 있으며 설치에 사용하는 컴퓨터에서 완벽하게 작동합니다. 그러나 하드 드라이브 구성이 다른 다른 컴퓨터에서 부팅을 시도하면 OS 파티션을 찾을 수 없으며 오류 메시지와 함께 GRUB Rescue에 나를 덤프합니다 error: unknown filesystem
.
hdX,msdosY
나는 GRUB이 변수를 설정할 때 내 s의 s가 이를 사용하기 때문에 ( X
및 Y
레이블에 해당하는 정수인 sXY
문자 sda1
및 X
정수 Y
) 와 같은 정수를 사용하여 파티션을 검색하기 때문이라고 생각합니다 . 이것이 MBR의 내용이 있는 곳이라고 가정합니다 . 에서 오는. 내 것은 포함되어 있지 않습니다 .menuentry
grub.cfg
root
grub.cfg
/etc/default/grub
GRUB_DISABLE_LINUX_UUID=true
내 질문에 대한 해결책 UUID를 사용하여 GRUB에서 파티션을 검색하도록 할 수 있습니까? 그렇다면 어떻게 해야 합니까?
편집: 이것은 menuentry
내 Fedora 부팅의 전체 내용 입니다 grub.cfg
.
menuentry 'Fedora (4.11.8-300.fc26.x86_64) 26 (Twenty Six)' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.11.8-300.fc26.x86_64-advanced-c1bcc95a-66a8-4bd3-ae64-42be8d83137e' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='hd1,msdos2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd3,msdos2 --hint-efi=hd3,msdos2 --hint-baremetal=ahci3,msdos2 --hint='hd1,msdos2' 3483e8e8-38ab-4b47-aec4-1cb475c285d8
else
search --no-floppy --fs-uuid --set=root 3483e8e8-38ab-4b47-aec4-1cb475c285d8
fi
linux16 /vmlinuz-4.11.8-300.fc26.x86_64 root=UUID=c1bcc95a-66a8-4bd3-ae64-42be8d83137e ro rhgb quiet LANG=en_GB.UTF-8
initrd16 /initramfs-4.11.8-300.fc26.x86_64.img
}
grub.cfg
또한 GRUB가 업데이트되면 변경 사항을 덮어쓰게 되므로 수동 편집이 필요하지 않은 솔루션을 선호합니다 .
편집 2: GPT 및 Fedora 26에서 모든 작업을 수행한 후에는 원래 선택한 배포판인 Linux Mint로 다시 전환하기로 결정했습니다. 그러나 이것이 작동하지 않는 것으로 나타났습니다. 여러 다른 배포판(Debian, Ubuntu, CentOS 및 openSUSE)으로 테스트한 후. 모든 RPM 기반 배포판은 유효하지만 Debain 기반 배포판은 유효하지 않습니다. openSUSE는 SecureBoot 지원을 활성화/비활성화하는 옵션을 제공하며, 비활성화된 상태로 설치했을 때 Debian 기반 배포판과 동일한 결과를 얻었습니다.
테스트한 두 대 이상의 시스템에서 SecureBoot가 명시적으로 비활성화되어 있음을 확인할 수 있지만 SecureBoot 지원 없이는 Debain 기반 배포판이나 openSUSE를 부팅할 수 없기 때문에 이것은 나에게 아무런 의미가 없습니다.
(명확히 말하자면, GPT를 사용하도록 하드 드라이브를 변경할 때까지 RPM 배포도 부팅에 실패했습니다.)
답변1
오류: 알 수 없는 파일 시스템입니다.
한 시스템에서는 작동하지만 다른 시스템에서는 작동하지 않습니다. 즉, grub이 uuid로 파티션을 검색하지 못할 수도 있습니다.
GRUB이 파티션을 검색하기 위해 hd0, msdos5 등과 같은 레이블을 사용하기 때문이라고 생각합니다. grub.cfg의 메뉴 항목이 이를 사용하기 때문입니다. grub.cfg가 MBR에 입력되는 소스라고 가정합니다. 내 /etc/default/grub에 GRUB_DISABLE_LINUX_UUID=true가 포함되어 있지 않습니다.
이것이 나의 첫인상을 확증해주었다. 그런데, hd0, msdos5는 레이블이 아니라 이제 오래된 디스크 사양입니다. hd0는 여러 요인에 따라 시스템의 모든 드라이브가 될 수 있습니다. 더 중요한 것은 컴퓨터를 전환할 때입니다.
나는 다음을 가지고 있습니다 :
linux /boot/vmlinuz-3.16.0-4-amd64 root=UUID=<someUUID> ro quiet nomodeset
nomodeset
일부 마더보드는 Linux 변경 모드를 좋아하지 않기 때문에 이것을 사용합니다 .
루트 파티션에 uuid가 있는지 확인하고 위와 같이 grub에서 사용하십시오.
답변2
EFI 파티션에 관심을 가져준 @TomYan 덕분에 상대적으로 간단한 솔루션이 분명해졌습니다.
먼저 외장하드에 있는 데이터를 모두 백업한 후 완전히 다시 포맷하고 fdisk
이전 MBR 대신 GPT를 사용했습니다. 이 작업이 완료되면 남은 것은 UEFI 모드에서 배포판을 다시 설치하는 것입니다. 이제 지금까지 시도한 모든 컴퓨터에서 완벽하게 부팅됩니다.
편집: 이는 RPM 기반 배포를 시작할 때만 문제를 해결합니다.