
💡 내용보단 방향성과 키워드를 참고하고 공식 문서를 애용하세요.
말보다 행동이 먼저 나가는 나지만, 컴퓨터 작업을 하며 특히 조심하게 되는 부분이 있다. 그것은 바로 OS 세팅할 때이다. 특히 특정 OS를 사용하다가 파티션 분할을 해야 하는 경우는 더 조심히 작업할 수 밖에 없다. 그렇게 조심히 작업한다고 생각했는데... grub으로 부팅할 때 윈도우가 뜨지 않는게 아닌가?!?!
간단해보이는 문제를 해결하기 위한 눈물의 똥꼬쇼고군분투가 시작된다!
GRUB은 여러 운영체제를 선택할 수 있도록 라우트 하는 역할을 한다. 우리가 컴퓨터의 전원 버튼을 누르면 아래와 같은 일들이 일어난다.
1️⃣ 노트북 전원 ON → UEFI 펌웨어 실행
2️⃣ UEFI가 EFI 시스템 파티션(/boot/efi)의 grubx64.efi 실행
3️⃣ GRUB이 실행되면서 /boot/grub/grub.cfg를 읽음
4️⃣ GRUB이 OS 목록(EndeavourOS, Windows 등)을 보여줌
이 때 /boot/efi 내부에는 Boot GRUB Lenovo Microsoft endeavouros 같은 폴더들이 존재한다.
GRUB은 3mb 내외로 굉장히 작지만 멀티부트, 펌웨어 업데이트 등을 위해 /boot/efi는 500mb로 설정된다.
GRUB 커스텀 세팅을 할려면 '/etc/grub.d/40_custom'을 수정한다.
1️⃣ sudo os-prober 명령어를 통해 Windows 인식. 이 때 /boot/efi 폴더 안에 Microsoft 폴더가 있어야 함.
2️⃣ 이 때 특정 GRUB version에 따라서 os-prober에서 Segmentation Fault가 뜨는 경우도 있다. 이 때는 GRUB을 downgrade하고 ignoreUpdate 시켜놓는 편의 마음이 편하다.
3️⃣ sudo efibootmgr로 EFI 부트 설정에 Windows Boot Manager가 존재하는지 확인 후 존재하지 않으면 아래와 같은 명령어로 수동 추가한다.
sudo efibootmgr -c -d /dev/nvme0n1 -p 1 -L "Windows Boot Manager" -l '\EFI\Microsoft\Boot\bootmgfw.efi'
4️⃣ /etc/default/grub 파일에 GRUB_DISABLE_OS_PROBER=false을 추가하고 sudo grub-mkconfig -o /boot/grub/grub.cfg로 grub.cfg를 업데이트한다.
5️⃣ 그 후 다시 한번 sudo os-prober
‼️ Windows 부트로더의 위치를 직접 /etc/grub.d/40_custom에 추가할 수도 있지만 예상치 못한 이슈가 생길 수 있으므로 가급적 지양한다.
menuentry "Windows 11" --class windows --class os {
insmod part_gpt
insmod fat
set root=(hd0,gpt1)
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
정말 운이 안좋게도 GRUB이 사라지는 경우가 있다. 이 때는 OS 부팅 USB로 부팅한 후 grub을 다시 세팅해주면 된다.(feat. chroot)
Arch 리눅스는 프로그램 버전 관리가 용이하고 AUR 같은 외부 사용자 저장소를 지원하는 큰 장점이 있는 만큼 Trouble Shooting을 감수해야 할 것 같다.
근데 GRUB은 pacman에서 공식으로 지원할텐데 왜...?