OpenSuse Tumbleweed; rEFInd 인식 불가 돌아가기

OpenSuse Tumbleweed 를 설치할 때, Grub 을 빼버리고 rEFInd 로만 부팅하려하면, 적어도 2021년 11월에 나온 이미지로는 부팅에 실패하게 된다.

틀림없이 예전(2019년)에 설치했을 땐 이렇지 않았었는데, 오랜만에 다시 해보니 문제가 생겼다.
뭣 때문일까? 한참을 고민했다. Btrfs(Set Default) 문제일까 싶어서 다른 파일시스템을 선택해보기도 했는데, 결과는 마찬가지였다.

뭔가.. 내 선에선 해결이 되지 않을 정도로 복잡한 상황일까 싶었는데..

 
/boot> ll
-rw-r--r-- 1 root root     1725 Sep 26 07:38 boot.readme
lrwxrwxrwx 1 root root       43 Nov 21 20:54 config-5.14.14-2-default -> ../usr/lib/modules/5.14.14-2-default/config
lrwxrwxrwx 1 root root       42 Nov 22 21:55 config-5.15.2-1-default -> ../usr/lib/modules/5.15.2-1-default/config
drwxr-xr-x 7 root root     6144 Jan  1  1970 efi
lrwxrwxrwx 1 root root       23 Nov 22 21:55 initrd -> initrd-5.15.2-1-default
-rw------- 1 root root 17392980 Nov 22 22:27 initrd-5.14.14-2-default
-rw------- 1 root root 22102756 Nov 22 22:27 initrd-5.15.2-1-default
lrwxrwxrwx 1 root root       48 Nov 21 20:54 sysctl.conf-5.14.14-2-default -> ../usr/lib/modules/5.14.14-2-default/sysctl.conf
lrwxrwxrwx 1 root root       47 Nov 22 21:55 sysctl.conf-5.15.2-1-default -> ../usr/lib/modules/5.15.2-1-default/sysctl.conf
lrwxrwxrwx 1 root root       47 Nov 21 20:54 System.map-5.14.14-2-default -> ../usr/lib/modules/5.14.14-2-default/System.map
lrwxrwxrwx 1 root root       46 Nov 22 21:55 System.map-5.15.2-1-default -> ../usr/lib/modules/5.15.2-1-default/System.map
-rw-r--r-- 1 root root 11433488 Nov 22 22:00 vmlinuz -> vmlinuz-5.15.2-1-default
lrwxrwxrwx 1 root root       44 Nov 21 20:54 vmlinuz-5.14.14-2-default -> ../usr/lib/modules/5.14.14-2-default/vmlinuz
lrwxrwxrwx 1 root root       43 Nov 22 21:55 vmlinuz-5.15.2-1-default -> ../usr/lib/modules/5.15.2-1-default/vmlinuz

답은 여기에 있었다.

아래는 kernel 5.6 시절에 머물고 있는 텀블위드의 /boot.

/boot> ll                                                                                                                                                                                                                
-rw-r--r-- 1 root root 4.6M 2020-02-18 21:40 System.map-5.5.4-1-default
-rw-r--r-- 1 root root 4.6M 2020-04-02 02:38 System.map-5.6.0-1-default
-rw-r--r-- 1 root root 1.7K 2019-12-03 03:27 boot.readme
-rw-r--r-- 1 root root 226K 2020-02-18 20:55 config-5.5.4-1-default
-rw-r--r-- 1 root root 227K 2020-04-02 02:27 config-5.6.0-1-default
drwxr-xr-x 1 root root    0 2019-04-29 16:18 efi
drwxr-xr-x 1 root root   12 2020-04-05 00:45 grub2
lrwxrwxrwx 1 root root   22 2020-04-05 00:45 initrd -> initrd-5.6.0-1-default
-rw------- 1 root root  17M 2020-04-05 16:22 initrd-5.5.4-1-default
-rw------- 1 root root  18M 2020-04-05 16:22 initrd-5.6.0-1-default
-rwxr-xr-x 1 root root  166 2019-04-29 16:28 perl-BL_delayed_exec
-rw-r--r-- 1 root root 1.3M 2020-04-03 04:32 symtypes-5.6.0-1-default.gz
-rw-r--r-- 1 root root 423K 2020-02-18 21:46 symvers-5.5.4-1-default.gz
-rw-r--r-- 1 root root 424K 2020-04-02 02:40 symvers-5.6.0-1-default.gz
-rw-r--r-- 1 root root  484 2020-02-18 21:46 sysctl.conf-5.5.4-1-default
-rw-r--r-- 1 root root  484 2020-04-02 02:40 sysctl.conf-5.6.0-1-default
-rw-r--r-- 1 root root 9.7M 2020-02-18 21:54 vmlinux-5.5.4-1-default.xz
-rw-r--r-- 1 root root 9.6M 2020-04-02 02:43 vmlinux-5.6.0-1-default.xz
lrwxrwxrwx 1 root root   23 2020-04-05 00:45 vmlinuz -> vmlinuz-5.6.0-1-default
-rw-r--r-- 1 root root 8.8M 2020-02-18 22:40 vmlinuz-5.5.4-1-default
-rw-r--r-- 1 root root 8.8M 2020-04-02 03:10 vmlinuz-5.6.0-1-default

이 둘간 차이는, 리눅스 커널파일(vmlinuz)이 실재하고 있느냐, 아니면 심볼릭링크로 존재하느냐에 있다.
적어도 5.6 시절까지는 vmlinuz 가 /boot 디렉토리에 위치해 있었다. 물론, 5.6 에서도 vmlinuz 가 vmlinuz-5.6.0-1-default 등에 링크돼 있긴 하지만, 어쨌든 같은 디렉토리에서 파일을 찾을 순 있었다.

허나, 5.14 에서 보면, 실제 커널 파일 위치가 /usr/lib/modules/ 이하로 바뀌어버렸다. 이렇기 때문에 rEFInd 가 저 위치까지 훑어내지 못하여, 결국 아예 부팅 메뉴 영역에 표시가 안되는 사태가 발발(?)하게 된다.
rEFInd 포럼에서 이 내용을 찾아봤지만, 답은 없었다. 그만큼, rEFInd 사용자도, Tumbleweed 사용자도 적다는 얘기가 아닐런지.
하여, 이 시점에서 Tumbleweed 에 대한 관심은 접도록 하는게 맞지 않을까? 차라리, 그야말로 하드코어한 Arch 로 관심을 트는게??

아무튼, 이 문제를 돌아가기 위해선 두가지 방법이 있다. (만약 좀 더 쉬운 방법이 있는데 이렇게 ‘또’ 꽃삽을 푸고 있었다면.. 그래도 이거 하느라 이런 저런 잡지식을 얻었다는데 만족해야만 하겠지?)

첫번째 방법

단순 무식. vmlinuz 파일을 /boot 로 복사해주면 된다. 현재 사용 중인 최신 커널 vmlinuz 파일을 /boot 로 복사한다.
위와 같은 상황이라면 이런 식으로.

# cp /usr/lib/modules/5.15.2-1-default/vmlinuz /boot

끝. 아무 문제없이 Tumbleweed 로 진입할 수 있다.

두번째 방법

/boot/efi/EFI/refind/refind.conf 에서 menu entry 를 이런 식으로 넣어주면 된다.

menuentry "OpenSuse Tumbleweed try" {
    icon EFI/refind/icons/os_opensuse.png
    #volume 2a07028b-135b-41c0-a9fb-f1f4f64152a8 #UUID 는 인식불가
    #volume "tumbleweed" #LABEL
    volume "a2d0210e-5fe2-4b24-80d7-f622b97d2d94" #PARTUUID
    loader /usr/lib/modules/5.15.2-1-default/vmlinuz
    initrd /boot/initrd-5.15.2-1-default
    options "ro root=UUID=2a07028b-135b-41c0-a9fb-f1f4f64152a8 quiet splash"
    enabled
}

간단하게 설명해본다면..

  • icon : refind 에서 보여질 아이콘 선택
  • volume : 커널이 위치한 파티션의  LABEL, PARTLABEL, 또는 PARTUUID 를 넣어줘야 한다. 다시 말해, UUID 는 안된다는 얘기. 고마워요 Arch!
  • loader : vmlinuz 파일 경로
  • initrd : initrd 파일 경로
  • option : 커널 옵션. 여기선 UUID 를 사용해도 된다.
  • enabled : ‘enabled’ 라야 refind 메뉴에 나타난다. ‘disabled’? 당연히 안보임!

volume 에 UUID 를 넣었다가 안돼서 또 살짝 꽃삽질. 역시 Arch 의 힘으로 풀어냈다.

이 방식의 문제점?

이거다 저거다 말씀마시고, 두 방식 모두 새롭게 설치된 커널을 인식하지 못한다는 약점(?)이 있다.
커널이 새로 설치되면, 수작업이 반드시 필요하다.
첫번째 방식은 새 커널이 설치됐을 때 아예 refind 에서 항목이 사라진다. vmlinuz 파일을 심볼릭링크로 교체하기 때문이다. 따라서, 이 파티션으로 접근할 다른 OS 가 반드시 필요하다. PC에 다른 리눅스가 설치돼 있다면 이 방법도 그런대로 쓸만은 하다. 아니면 USB 드라이브(라이브 리눅스 이미지)로 부팅해서 vmlinuz 파일을 복사해줘야 한다. (이건 귀찮다.)

두번째 방식은 새커널을 인식하지 못하고, 설정해놓은 커널로만 부팅할 수 있다.
어쨌든 부팅은 가능하므로, 일단 구커널로 시작한 뒤 새 커널로 바꿔주는 작업을 해줘야 한다.

이렇게 보면 두번째가, 작성하는데 조금 귀찮음은 있어도 아예 부팅불가가 돼 버리는 상황보다는 나아보이지만..
둘 다 즐거운 PC 생활과는 거리가 멀다.

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.