** 이글루스(2017.04.22)에 있던 글.
옮겨오긴 했는데.. 지금 보면 좀 많이 부족한 글이긴 하다. 귀찮아서 수정/추가는 하지 않았다.
우분투는 물론이고, 아마도 많은 배포판들이 Grub 을 기본 부트관리자로 채택하고 있는 것 같다.
만약 리눅스를 하나만 사용한다든가, 리눅스 하나와 MS 윈도우만 사용한다든가 하면 별 문제가 없지만, 리눅스 배포판이 2개 이상이 되면, 몇가지 불편한 점들이 있다.
예를 들어 /dev/sda2 에 Ubuntu 가 설치되어 있고, /dev/sda3 에 Kubuntu 가 설치되어 있다고 한다.
Ubuntu 로 부팅하여, Grub 배경을 적당한 그림파일로 설정하고, update-grub 을 한 후 재부팅한다.
Grub 메뉴에서 조금 전 지정한 배경이 나오는지 확인하고, 이번에는 Kubuntu 로 부팅한다.
Kubuntu 에서 update-grub 을 실행하고 재부팅하면, 배경화면이 없어진 것을 볼 수 있다.
왜 없어졌을까???
없어진 것도 이상하지만, Grub 초기 화면에서 아래쪽에 있는 배포판의 ‘고급’을 선택해서 보면, 뭔가 굉장히 복잡하게 설명이 붙어있는 것도 볼 수가 있다. /dev/sda2 에 있는 /dev/sda3 가 어쩌고 저쩌고..
이게 아마도 Grub 의 chainloading 이 가진 문제가 아닐까 하는데.. 그 비슷한 내용을 아래 글에서 찾을 수 있다.
또, 만약 커널이 3개쯤 되고, Ubuntu, Kubuntu 에서 모두 update-grub 을 하게 되면, 정말로 부트 메뉴가 지저분해지는 상황이 된다.
자세한 건 모르겠지만, 이런 게 맘에 안든다면, 다른 대안을 쓰면 되는데, 여러 대안 중 내가 택한 것이 rEFInd 이다.
rEFInd 가 가진 장단점은 잘 모르니 넘어가고, 여기서는 설치법에 대해서만 정리하도록 한다.
보통 리눅스와 MS 윈도우를 같이 설치할 때는 MS 윈도우를 먼저 설치하고 리눅스를 나중에 설치하라고 권장한다. 리눅스에서 제공하는 부트매니저(Grub)이 MS 윈도우를 인식하여 다중 환경을 무리없이 만들어 주기 때문이다. 하지만, rEFInd 를 사용할 생각이라면 굳이 그렇게 할 필요는 없다. 어떤 순서대로 설치해도 관계는 없다. 다시 말하자면, 어느 OS 에서든 rEFInd 를 설치할 수 있다는 얘기.
여기서는 우분투와 쿠분투, 그리고 MS 윈도우를 설치해보겠다. 순서는 우분투 – MS 윈도우 – 쿠분투.
전제 조건은 두가지.
- 하나. 반드시 UEFI 로 설치해야 한다. rEFInd 도 UEFI 에서만 돌아간다. (아마도~)
- 둘. /boot 는 각 배포판별 달리 하도록 한다. (공유하지 않는다.)
먼저 우분투를 설치한다. 설치 시에 gParted 를 실행해서 각 OS 들이 들어갈 공간을 미리 잘 할당해줘야 작업이 편하다. EFI 가 사용할 공간을 200MB 정도 FAT32 로 만들어주는 것을 잊지 말아야 한다.
여기서, 우분투/쿠분투가 설치될 공간의 파일시스템이 ext4 라면 별 어려움없이 진행할 수 있는데, 만약 btrfs 라면 조금 더 신경을 써야 한다. 이 부분은 뒤에 다시 언급하도록 한다.
** 참고 ! 첫번째 우분투도
ubiquity -b
로??
아래에 나오는 내용이지만, 두번째 부터 설치할 우분투 일파 배포판은, 일반 설치를 하지 않고ubiquity -b
로 설치해서, Grub2 를 배제해준다. 그래야 rEFInd 를 좀 더 효율적으로 사용할 수 있다.
첫번째 배포판은 일반 설치로 했는데, 그건 편의를 위함이다. 만약, MS 윈도우도 설치할 거라면, 다시 말해서 rEFInd 를 설치할 수 있는 다른 OS 도 같이 설치할 것이라면, 첫번째 배포판도ubiquity -b
로 해도 되긴 된다.
그러나.. 이렇게 하면 초기 부팅 문제가 있기도 하고, 더 복잡/애매해지는 상황이 되기 때문에, 그냥 일반 설치를 하는 편이 좋다. (복잡한 길로 가서 길 잃는 걸 즐긴다면 모를까.)
그래도 하고 싶다면 다음 글을 참고한다.
설치를 끝내고, 우분투로 로그인 했다면, 다음 작업을 수행한다.
먼저 rEFInd 를 설치한다. PPA를 추가하고, 최신판을 설치하는 편이 좋겠다.
$ sudo add-apt-repository ppa:rodsmith/refind$ sudo apt update$ sudo apt install refind
재부팅하여 rEFInd 가 뜨는지 확인하고, 우분투로 부팅한다.
아무런 문제가 없다면, 이제 Grub 을 모두 삭제한다.
$ sudo apt remove grub-efi-amd64 grub-efi-amd64-signed grub-common grub-efi-amd64-bin grub-common grub2-common shim-signed
Grub 을 삭제함으로 얻게 되는 불이익(?)도 있을 수 있는데, 이건 아래에 있는 제작자가 쓴 글을 참고하라.
그런데, 우분투를 사용하다보면, 어떤 경우 시스템이 Grub 을 다시 설치할 때가 있다. 이렇게 되면 애써 한 작업이 의미없게 되므로, 버전이 높은 가짜 Grub을 설치하여, 이런 상황을 미연에 방지할 수 있다.
자세한 사항은 제작자의 다음 글을 참고한다.
다음 OS 를 설치하기 전,
한가지 꼭 언급해야 할 점이 있다.
Grub 꾸러미를 삭제했다고 해서, 이미 설치된 Grub 메뉴(?)까지 모두 삭제되는 것은 아니다. 즉, 메인보드 펌웨어 메뉴에서 보면, 여전히 ‘ubuntu’ 를 볼 수 있다. 이것까지 완전히 삭제하려면, 다음 디렉토리를 지워야 한다. (이 디렉토리를 지워도 reFind 가 설치되어 있으므로 부팅에 전혀 문제는 없다.)
/boot/grub/boot/efi/EFI/ubuntu
이렇게 삭제가 끝나면, 펌웨어에서도 ubuntu 메뉴가 사라진다.
이제 우분투에선 더 이상 할 일이 없다. MS 윈도우 설치를 진행한다.
** Grub 을 아예 설치하지 않아도 되려나?
아래에는 두번째 우분투/리눅스 배포판부터 Grub 없이 설치하는 방법이 나와있다.
그런데, 첫번째 우분투/리눅스부터 이렇게 할 수는 없을까?
방법이 없지는 않으나, 다소 번거롭다. 특히나 Btrfs 를 사용할 경우는 더더욱 그렇다.
첫번째 리눅스로 Archlinux 를 사용한다면 그런대로 손쉽게 할 수 있다.
어차피 아치리눅스는 설치가 복잡하므로(사실 따지고 보면 좀 더 명확한 설치법이라고도 할 순 있으나.. 그건 리눅스 지식이 있는 이에게나 그런 거고), 그 복잡도에 +2 정도 한다고 해서 더 어려울 게 뭐 있겠나.
그러나, 우분투 일파를 Grub 없이 초기 설치하면 굉장히 더 길을 돌아가는 셈이 된다.
그래도 하고 싶다면~
두 가지 방법이 있다.
첫번째는 rEFInd CD/FlashDrive 이미지를 사용하여 부팅하고 rEFInd 를 시동한 후 설치한 우분투로 최종 부팅하는 방법이 있다. 그런 후, rEFInd 를 설치해주면 문제는 해결된다.
두번째는, 부트 관리자 없이 우분투를 설치하면 부팅 시 grub> 프롬프트로 빠져버리는데, 여기에서 수동으로 부팅한 후 rEFInd 를 설치하는 방법을 생각해볼 수 있다.
어느 쪽이든, 파티션이 Ext 계열이 아니면 정신 건강에 특히 해로울 수 있으니 주의 해야 한다.
…..
MS 윈도우에선 별 다른 작업이 필요없다. 설치를 모두 끝마치고 재부팅하면…
아마도 rEFInd 로 부팅되지 않고, 곧바로 MS 윈도우로만 부팅이 될 것이다.
보드에 따라 다르겠지만, 시스템을 재시작하고 나서 바로 F12 를 누르고 EFI 부트 메뉴를 보면 rEFInd 가 있다. 그것을 선택해서 부팅하면 rEFInd 가 뜬다. (혹은 보드 UEFI 에서 rEFInd 로 부팅하게끔 부팅 메뉴를 조정하는 편이 좋겠다.)
이젠 rEFInd 를 사용해서 우분투와 MS 윈도우 어느 쪽이든 자유 자재로 부팅할 수 있게 됐다.
이제 마지막으로 쿠분투를 설치해야 하는데, 여기서 약간 주의가 필요하다.
…..
쿠분투 설치디스크로 부팅한 뒤, 먼저 ‘Try…’ 로 진입한다. 바로 설치하지 말고, 터미널에서 다음과 같이 입력한다.
$ ubiquity -b
이것은 우분투 설치 시에 부트관리자를 설치하지 말라는 명령이다.
이 명령을 내리면 평상 시와 동일한 설치관리자가 뜨고 똑같이 진행되지만, Grub 은 설치하지 않는다. 쿠분투가 설치될 파티션만 잘 지정해주면 된다.
설치가 끝나고 재부팅하면 rEFInd 가 보이고, 우분투와 쿠분투가 모두 보일 것이다.
단, 우분투, 또는 리눅스들은 어떤 게 어떤 것인지 쉽게 구분이 되지 않는데, 자세히 살펴보면 어느 파티션에 있는 우분투라는 것이 표시되어 있다. 일단은 이것을 보고 원하는 우분투 배포판을 선택하여 부팅하면 된다. MS 윈도우는 알아보기 쉽게 표시가 된다.
쿠분투는, grub 을 설치하지 않은 채로 부팅하긴 했지만, 아마도 의존성 때문인지 grub 관련 꾸러미 몇개가 설치되어 있다. 이것도 위와 같이 삭제하고, 가짜 꾸러미를 설치해준다.
….
rEFInd 에는 OS 를 자동으로 인식하여 아이콘을 바꿔주는 기능이 있는데, 설명서를 읽어보면 이것을 가능하게 해주는 몇가지 방법이 있다. 손쉽게는, 배포판 루트 디렉토리 파티션 Label 을 배포판 이름과 같게 설정해준다.
- 예를 들어, /dev/sda2 가 Ubuntu 의 루트(/) 로 설정되어 있다면, 이 파티션의 Label 을 ubuntu 로 설정한다.
- 마찬가지로, /dev/sda3 가 Kubuntu 의 루트(/) 로 설정되어 있다면, 이 파티션의 Label 을 kubuntu 로 설정한다.
다만, 현재 마운트 되어 있는 파티션 이름을 바꿀 수는 없으므로, 가장 간편하게 하려면 우분투 라이브디스크(설치 디스크)로 부팅하여 gParted 등을 이용해서 바꿔준다.
rEFInd 는 Label 이름과 rEFInd 밑 icons 디렉토리에 있는 os_xxxx.png 파일과 이름을 비교하여, 대응되는 것이 있다면 그 파일을 아이콘으로 사용한다. 따라서, Label 이 ubuntu 라면, os_ubuntu.png 파일이 아이콘으로 채택된다.
다시 말하면, Label 이 xxx 라면, 아이콘 디렉토리에 os_xxx.png 파일을 넣어놓으면, 그 파일이 자동으로 아이콘으로 채택이 된다.
** 한가지!
rEFInd/icons 디렉토리에 임의로 넣어놓은 파일들은, rEFInd 가 판올림될 때 icons-backup 디렉토리로 옮겨진다.
따라서 다시 복사해줘야 한다.
….
btrfs 를 사용할 때
만약 위와 같은 경우 쿠분투(다시 말해서, 부트매니저없이 설치한 모든 우분투 배포판)에서 루트 디렉토리를 btrfs 에 할당했다면, rEFInd 로 진입한 후 쿠분투를 선택했을 때, 부팅 과정이 진행되다가 멈춰버리는 현상이 생겨난다.
이건 btrfs 이기 때문에 생기는 현상이다. ext4 에선 이런 일이 없었다. 이것을 해결하기 위해선 /boot/refind-linux.conf
파일이 필요하다.
이 파일은, 최초에 설치한 우분투의 /boot 디렉토리에 들어있다. (최초 설치한 곳에서 rEFInd 를 설치했다는 가정) 이 파일을, 현재 배포판의 /boot 로 복사해넣으면 위 문제가 해결된다.
물론, 복사해넣고 난 뒤 UUID 는 해당 root 파티션에 맞게끔 수정해줘야 한다.
또는 복사하지 않고, 아래와 같은 형식으로 파일을 만들어도 된다.
현재 내 refind-linux.conf 내용은 다음과 같다.
"Boot with standard options" "root=UUID=732a1c19-d1e1-48c4-bada-6f04014db9e7 ro rootflags=subvol=@ quiet splash vt.handoff=7""Boot to single-user mode" "root=UUID=732a1c19-d1e1-48c4-bada-6f04014db9e7 ro rootflags=subvol=@ quiet splash vt.handoff=7 single""Boot with minimal options" "ro root=UUID=732a1c19-d1e1-48c4-bada-6f04014db9e7"
btrfs 에서 중요한 부분은 rootflags=subvol=@ 이다.
이 내용은 다음 문서를 참고하라.
그리고 마지막, rEFInd 가 사라져 버리는 경우가 있는데, 다음 내용은 그럴 때 해결법을 담고 있다.
UEFI 에서 Disable 한 디스크를 다시 Enable 하면, rEFInd 가 사라진다?
하드디스크가 여러 개일 때, UEFI 에서 필요한 디스크만 Enable 시키고 다른 것은 Disable 시킬 때가 있다. 만약, Disable 시킨 디스크에 rEFInd 가 설치되어 있었다면, 다시 Enable 될 때 메인보드의 UEFI 가 이것을 삭제한다고 한다.
해당 내용은 다음 글에서 찾아볼 수 있다.
자세한 설명이 나와있는데… 제작자는 그렇게 쓰지 말라고 하고 있지만~ 어쨌든 이것을 막으려면 일단은 리눅스로 부팅을 해야 하는데, 그러기 위해선 rEFInd USB flash drive image 가 필요하다. 이것은, 다음 페이지에서 받을 수 있다.
이것을 받고, USB 드라이브에 설치하고, 이 드라이브로 부팅하면 rEFInd 가 뜬다. 여기에서 부팅할 우분투를 선택하여 진행하면 된다. 또는, 이 드라이브에 MS 윈도우가 있다면 MS 윈도우로 부팅한 다음 명령을 내려도 되긴 하지만, 난 위 방법이 더 맘에 든다~
어쨌든 일단 우분투로 진입하고 나서 다음과 같은 명령을 내리면 된다. (참고로, 아래 명령은 Tab 키를 사용한 자동완성으로는 입력할 수 없다. 그냥 그대로 복사/붙이기 하든가, 아니면 sudo -i 이후에 자동 완성을 사용하면 된다.)
$ sudo mvrefind /boot/efi/EFI/refind/ /boot/efi/EFI/BOOT
이젠 Disable 했다가 다시 사용해도 rEFInd 가 사라지는 문제는 발생하지 않는다.
다만, 메인보드 펌웨어 메뉴에서 보여지는 이름이, reFind 에서 UEFI OS 로 바뀐다.
또, 이 방법은 VirtualBox EFI 문제(부팅이 되지 않고 EFI shell 로 빠져버리는 문제)도 해결해줄 수 있다.
…..
우분투(배포판#1)로 부팅하여 rEFInd 를 설치한 뒤, 쿠분투(배포판#2)를 ubiquity -b 로 설치한 다음, rEFInd 로 부팅했는데, 배포판#1 만 보이고 배포판#2 가 안보인다???
원인은 모르지만, 이런 일이 벌어졌을 때가 있다.
이럴 땐, USB rEFInd 로 부팅해보니 두 배포판이 모두 보였다. 여기서 쿠분투(배포판#2)로 부팅한 뒤, 거기에서 rEFInd 를 다시 설치해준다.
그리고 나면 원래 드라이브로 부팅해도 모든 배포판을 다 볼 수 있다. (적어도 난 그랬다.)
…..
최신판 커널이 설치되었는데(또는 설치했는데) rEFInd 기본 메뉴엔 예전 판이 표시된다?
rEFInd 는 기본으로 날짜에 근거하여 정렬을 한다. 커널 판 번호가 아니라, 가장 최신 날짜를 기본으로 선택한다는 뜻이다.
우분투 update / upgrade 를 하면 가끔 커널 최신판이 설치되고, 당연히 이 커널이 ‘최신’이며, 가장 최근 날짜로 기록되어 있으므로 이것이 선택되겠지만, 만약 임의로 더 높은 커널을 내려받았다면(Ukuu 등을 통해서)이 커널이 우분투 upgrade 에서 받은 커널보다 날짜가 위로 기록되었으리란 가능성이 없으므로, ‘기본’으로 원하는 커널 날짜를 최신으로 해줄 필요가 있다.
/boot 디렉토리에는 커널 이미지들이 들어있는데, vmlinux-xxxxx 라고 된 파일이 바로 그것들이다.
이 파일들 중, rEFInd 에서 ‘기본값’으로 설정하기 원하는 파일을 고른 후, 단순히 touch 명령으로 현재 날짜로 바꿔주면, 어려울 것도 없이 기본값이 된다. 예를 들면 다음과 같다.
$ sudo touch vmlinuz-4.10.6-041006-generic
…..
reFind 해상도가 너무 낮다?
Intel 인 경우는 알아서 해상도를 잡아주는 것 같은데, Nvidia 일 때는 낮은 해상도로 표시되는 듯 하다.
이걸 바꿔주려면, refind.conf
파일을 찾아서 해당 항목을 바꿔줘야 한다.
이 파일은 다음 두 디렉토리 중 한군데서 찾을 수 있다.
/boot/efi/EFI/refind/
/boot/efi/EFI/BOOT
여기에서, resolution 항목을 찾아 원하는 해상도로 바꾼다.
resolution 1920 1080