GRUB
grub, GRUB(GRand Unified Bootloader)[1]는 유닉스/리눅스 시스템에서 사용되는 GNU 프로젝트의 부트로더이다. 멀티 부팅을 지원하여 유닉스/리눅스 이외에도 윈도우나 mac까지 부팅할 수 있다. 윈도우는 리눅스를 깔고 윈도우를 깔면 grub를 씹고 Windows Boot Manager로 바뀐다. 수동으로 설정해주면 grub로 부팅가능하다. 반대로 윈도우를 깔고 리눅스를 설치하면 자동으로 운영체제를 잡아줘[2] 부팅 메뉴에 뜨게한다.
리눅스 멀티부팅 환경에서 윈도우 재설치 후 문제 발생, grub를 찾지 못해서 grub rescue가 뜬다. 리눅스를 파티션 통째로 날려도 이런 grub rescue >가 뜬다[3]. grub 설정 전용 쉘로 일반 쉘에 있는 모든 기능이 다 빠져있다. 리눅스 설치하고 윈도우 깔았더니 이게 뜬다면 높은 확률로 grub를 못찾는 것이다. 다른 상황에서 grub rescue가 뜬다면 다른 곳에서 에러가 난 것이므로 아래와 같은 방법이 통하지 않을 수 있다.
해결 방법
grub rescue > ls
(hd0,gpt1) (hd0,gpt2) ......
grub rescue > ls (hd0,gpt1)
unknown file system
grub rescue > ls (hd0,gpt2)
unknown file system
grub rescue > ls (hd0,gpt3)
this file system is ext2(?) 리눅스 파일 시스템임을 알려준다. 이게 부팅할 OS로 추정되면 아래를 입력)
grub rescue > set root=(hd0,gpt3) 루트 파티션 지정
grub rescue > set prefix=(hd0,gpt3)/boot/grub grub의 경로 설정
grub rescue > insmod normal
grub rescue > normal
이건 그냥 임시로 부팅 메뉴 띄우기다. 여기까지만 하면 다음에 또 원상복구되므로 grub rescue에서 했던 것들 다시 반복하지 않게 grub.cfg를 기록해야한다.
update-grub 명령어가 있으면 아래
$ sudo update-grub없으면
$ sudo grub-mkconfig -o /boot/grub/grub.cfgGRUB에 연관된 디렉터리는 /boot 디렉토리가 있다. 그 아래에 /boot/efi와 /boot/grub 디렉터리도 중요하다.
/boot는 부팅을 위한 디렉터리이고 그 아래 /boot/efi는 여러 운영체제가 공유하는 공간으로 EFI 파티션이 마운트되고 이곳에 여러 운영체제의 부팅 정보가 담겨있다.
/boot/grub 디렉터리는 운영체제의 /boot 디렉터리 하에 있으며 여기에 grub 부트로더가 저장된다. grub는 운영체제를 하나씩 추가할 때마다 각 운영체제들의 루트 파티션에 설치된다. 우분투 페도라 둘 다 설치했다면 우분투의 grub, 페도라의 grub 두 개가 되고 /boot/efi 하에 우분투와 페도라의 부팅 정보가 저장된다.
/boot/efi/EFI 디렉터리는 부팅 과정 중 처음으로 읽는 부분으로 이곳에 각종 운영체제의 정보가 저장된다. 여러 종류의 리눅스를 깔고 지우고 반복하면 BIOS의 부팅 순서 설정 메뉴가 지저분해질 수 있는데 EFI 디렉터리에서 사용하지 않는 os의 디렉터리를 정리해주면 깔끔해진다.
Grub의 부트로더 메뉴를 수정하는 Gui 프로그램이다. 복잡한 grub 설정 파일을 건들 필요도 없고 마우스를 이용해서 부팅메뉴 순서 변경도 가능하고 grub의 배경 사진도 편리하게 넣을 수 있다. 이걸 실행시키기만 해도 자동으로 설정되기도해서[4] 리눅스 초보자에게 추천하는 프로그램. 아치리눅스 같은 일부 리눅스는 부트로더 설정을 저장할 때 오류가 나는데 흔히 로케일 문제이기 때문에 LANG=C로 환경변수를 지정해주어 grub-customizer를 열면 잘 작동한다.