Macbook Pro에서 EFI 부팅을 사용하고 있습니다. (기기가 너무 오래되어서 UEFI를 사용할 수 없습니다.)
내부 드라이브에는 Ubuntu Linux 20.04가 있습니다.
라이브 USB를 통해 외장 드라이브에 Ubuntu Linux 20.04를 설치한다는 불행한 생각이 있습니다. (증분 백업을 사용하여 복제하려고 하는데 Linux용 기존 소프트웨어가 없는 것 같습니다.)
연결된 외장 드라이브로 부팅하면 GNU GRUB 2.04 부팅 메뉴가 나타납니다. 기본적으로 외부 드라이브가 먼저 부팅되지만 내부 드라이브에서 부팅하도록 선택할 수도 있습니다.
외부 드라이브가 연결되지 않으면 GRUB 셸에 걸려 부팅할 수 없습니다. 내가 읽고Linux에서 부팅할 수 없는 GRUB 2를 구출하는 방법그러나 나는 항상 "커널 패닉 종료...루트 fs를 마운트할 수 없습니다..."라는 메시지로 끝납니다.
어쨌든, GRUB 쉘 없이 부팅할 수 있는 한,Ubuntu Linux를 정상적으로 부팅하려면 내부 드라이브를 복원해야 했습니다.
이것은 간단해 보인다.
내장 드라이브로 부팅하고 외장 드라이브를 분리한 후 이 방법을 시도했지만 sudo update-grub
도움이 되지 않았습니다.
부팅 순서를 변경해 보았지만 sudo efibootmgr
항상 GRUB 쉘로 끝나기 때문에 상황이 더욱 악화됩니다. (다행히도 이 변경 사항은 되돌릴 수 있습니다.)
가능하다면 결국 GRUB를 제거하고 싶습니다. Mac에서는 GRUB가 필요하지 않습니다. 부팅하기 위해 Alt 키를 누르면 부팅 가능한 모든 파티션이 간단한 그래픽 메뉴에 표시되어 EFI 파티션을 쉽게 선택하고 GRUB 없이 부팅할 수 있기 때문입니다.
첫 번째 답변 이후 수정되었습니다(감사합니다)
"뭔가 내부 디스크의 GRUB를 덮어쓰게 만들었습니다." 예, 이것은 실제 Ubuntu Linux 설치 프로그램이며 실제로 위험한 것입니다. 좀 더 조심했어야 했습니다. 외부 드라이브에 Ubuntu Linux를 설치하기 전에 내부 드라이브를 마운트 해제해야 했습니다. 실제로 내부 드라이브의 /boot/efi에서 뭔가 변경된 것을 발견했습니다. 정확히 지침에 따라 파일을 복구했습니다.Mac OS 후 Ubuntu EFI가 부팅되지 않습니다..
재부팅 후 외장드라이브 연결 후 새로운 상황을 발견했습니다. GRUB 메뉴가 없어 어쩔 수 없이 GRUB 쉘을 사용하게 되었는데 다행히 ls
(이전 전용 외장드라이브가 아닌) 내장드라이브를 사용하여 적용 할 수 있었습니다. 이 튜토리얼Linux에서 부팅할 수 없는 GRUB 2를 구출하는 방법내부 드라이브로 부팅합니다.
이제 자동으로 부팅되도록 해야 하며 가능하면 외부 드라이브에서 부팅하는 옵션을 유지해야 합니다.
내부 드라이브의 grub.cfg:
mac2011-linux# pwd
/boot/efi/EFI
mac2011-linux# more ubuntu/grub.cfg
search.fs_uuid 770e447c-7411-4cc7-bce4-b71504d828c3 root hd2,gpt4
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
별도의 부팅 파일 시스템이 없기 때문에 접두사가 맞습니다. 외장 드라이브 에 blkid
있는 것을 볼 수 있습니다 . 이것은 정확하지 않습니다. 어떻게 하면 깨끗하게 수리할 수 있나요?uuid 770e447c-7411-4cc7-bce4-b71504d828c3
/dev/sdb4
mac2011-linux# ls
APPLE BOOT tools ubuntu
mac2011-linux# mac2011-linux# ls -l BOOT
total 5367
-rwx------ 1 root root 1677176 mai 25 14:54 bootx64.efi
-rwx------ 1 root root 1334816 mai 8 21:48 BOOTX64.EFI-old
-rwx------ 1 root root 1213032 mai 24 23:04 fbx64.efi
-rwx------ 1 root root 1269496 mai 24 23:04 mmx64.efi
mac2011-linux# ls -l ubuntu
total 4183
-rwx------ 1 root root 108 mai 24 23:04 BOOTX64.CSV
-rwx------ 1 root root 126 mai 24 23:04 grub.cfg
-rwx------ 1 root root 1677176 mai 24 23:04 grubx64.efi
-rwx------ 1 root root 1269496 mai 24 23:04 mmx64.efi
-rwx------ 1 root root 1334816 mai 24 23:04 shimx64.efi
우분투 디렉토리가 실제로 읽혔는지 알 수 없습니다. bootx64.efi가 내가 직접 설치하고 GRUB 대상을 내부 드라이브로 만든 grubx64.efi의 복사본이기 때문에 읽힌다는 것을 알고 있습니다.
이제 GRUB가 있으므로 적어도 Linux에 더 익숙해질 때까지 이를 유지하겠습니다. 그러나 추가적인 혼란을 피하기 위해 rEFInd를 추가하지 않는 것이 좋습니다.
나는 이것을 찾았다GRUB에 관한 ArchLinux 기사특히 UEFI 시스템 부분. 이로 인해 GRUB 설치를 확인하는 아이디어가 생겼습니다. 나는 sudo apt install grub2-common grub-efi-amd64
이것을 반복했고 내부 드라이브의 올바른 파티션에 대한 새로운 포인터를 sudo update-grub
얻었습니다 . /boot/efi/EFI/ubuntu/grub.cfg
이렇게 하면 내부 드라이브의 클린 재부팅 문제를 해결할 수 있습니다.
내 시스템에 GRUB가 올바르게 설치되지 않은 것 같습니다. 이는 Ubuntu Linux 20.04 배포판의 사소한 결함일 수 있습니다.
외장 드라이브 Ubuntu Linux도 작동하는지 확인해야 합니다.
답변1
내부 디스크의 GRUB를 덮어쓰는 문제가 발생하여 이제 외부 디스크에서 해당 구성을 로드하려고 시도할 수 있습니다.
먼저, 외부 디스크에 EFI 시스템 파티션이 완전히 채워져 있고 /etc/fstab
ESP가 제대로 설치되어 있는지 확인하세요.외부 디스크도착하다 /boot/efi
. 누락된 항목이 있으면 grub-install --force-extra-removable /dev/sd<external disk>
외부 디스크에 GRUB를 다시 설치하세요. 하지만첫 번째에 올바른 ESP가 설치되어 있는지 확인하십시오 /boot/efi
.
재부팅하고 사용하세요 efibootmgr -v
. BootCurrent 값과 해당 시작 항목을 확인하여 시스템이 실제로 작동하는지 확인하십시오.했다외부 디스크에서 완전히 부팅되며 내부 디스크의 부트로더로 대체되지 않습니다. 이제 외부 디스크에서 완전히 실행 중인 GRUB가 있다는 것을 알았으므로 내부 디스크와 완전히 독립적이어야 합니다.
그런 다음 ESP 파티션을 마운트합니다.내부disk(아직 마운트되지 않은 경우) 및 check <mountpoint of internal ESP>/EFI/ubuntu/grub.cfg
. 이는 기본 GRUB 구성 파일을 로드할 위치를 알려주는 약 3줄 길이의 작은 GRUB 구성 파일이어야 합니다. 일반적으로 UUID를 통해 파일 시스템을 나타냅니다. 다음과 같아야 합니다.
serch.fs_uuid <UUID of the filesystem containing /boot> root
set prefix=($root)'/grub'
configfile $prefix/grub.cfg
예, 첫 번째 줄에서 언급하더라도 root
반드시 Linux 루트 파일 시스템을 의미하는 것은 아닙니다. 이는 기본 GRUB 구성 파일과 GRUB 모듈 디렉터리가 포함된 파일 시스템인 GRUB 루트를 나타냅니다. Debian/Ubuntu에서는 Linux 루트 파일 시스템일 수도 있고 별도의 /boot
파일 시스템 /boot
인 경우 별도의 파일 시스템일 수도 있습니다.
/boot
디렉터리가 Linux 루트 파일 시스템에 포함된 경우 set prefix=$(root)'/boot/grub'
두 번째 줄로 변경될 수 있습니다. 변수가 올바르게 설정 되면 prefix
GRUB는 GRUB 모듈을 자동으로 로드할 수 있습니다(예: 다른 파일 시스템 유형 지원).
이는 내부 디스크에서 실패한 GRUB를 수정하는 데 충분할 수 있습니다. 도움이 되지 않으면 외부 디스크에서 부팅하고, 내부 디스크의 루트 파일 시스템을 에 마운트하고 /mnt
, /boot
내부 디스크(별도의 파일 시스템으로 존재하는 경우)를 에 마운트하고 /mnt/boot
, 내부 디스크의 ESP를 에 마운트 해야 할 수 /mnt/boot/efi
있습니다. 내부 디스크의 전체 파일 시스템 트리가 마운트되어 있습니다 /mnt
. 그런 다음 거기에 chroot합니다.
mount -o rbind /dev /mnt/dev
mount -o bind /proc /mnt/proc
mount -o rbind /sys /mnt/sys
chroot /mnt /bin/bash
grub-install /dev/sd<internal disk>
이제 내부 디스크에 GRUB를 다시 설치할 수 있습니다 . 그런 다음 외부 디스크를 분리한 상태에서 시스템을 다시 부팅할 수 있어야 합니다.
GRUB를 제거하는 것은 기술적으로 가능하지만 부트로더가 전혀 없으면(예: 커널에 내장된 UEFI 스텁 사용) 커널 부팅 옵션을 사용하는 것이 매우 어색해집니다. 먼저 UEFI 부팅 항목을 편집하고 필요한 부팅 옵션을 추가/변경할 수 있는 지점으로 부팅한 다음 "부트로더 없는" Linux로 다시 부팅해야 합니다. .rEFInd
systemd-boot