2025년 5월 4일 일요일

ZFSBootMenu로 ZFS 안의 우분투를 부팅하다가 zpool upgrade로 feature를 추가해버렸다

그리고 다음번 부팅 때 ZBM은 미지원 기능이 있어서 zpool을 읽어줄 수 없다며 진행을 멈췄다.

 

zpool upgrade를 되돌릴 수 있는지 가장 먼저 찾아봤지만 안 된다는 답만 나왔고 논리적으로 생각해봐도 이미 디스크 내부구조가 바뀌었을 테니 되돌리는 게 말이 안 되는 얘기였다.

 

다음으로는 zfsbootmenu github에 찾아가고 IRC도 들어가봤지만 너무 조용했다. 나한테 나타난 증상이면 전세계 ZBM 사용자 중에서 못 해도 천 명 정도는 겪었을 증상일 텐데. IRC도 입장하고 몇 시간 가만히 있어봤지만 그 어떤 대화도 일어나지 않았다. ZFS를 쓰고 그 중에서도 ZBM으로 부팅을 할 정도라면 고인물 중에서도 소수라는 얘기겠지.

 

https://github.com/zbm-dev/zfsbootmenu/issues/624 실제로 같은 경우가 며칠 앞서서 등록되어 있었다. 하지만 '배포되는 ZBM 쓸 거면 너무 앞서가는 feature는 쓰지 마시고, 최신 feature를 쓸 거면 ZBM을 빌드하세요' 라는 답이 끝이었다.

빌드 방법을 여기저기 찾아봤지만 딱히 친절하게 나와있지도 않았다. 공식 웹사이트에 몇 가지 따라하기 문서들이 있었지만 친절하기보다는 '시범은 한 번만 보여준다' 느낌으로 전후과정 설명 없이 진행만 쭉쭉 나가는 것들이 대부분.

 

친절함을 기대하는 건 그만 접고, 예전에 이것저것 멘땅에 헤딩하던 가락을 살려서 git clone 후에 몇 가지 만져보니 겨우 느낌이 왔다. (2일 경과)

빌드는 podman나 docker 안에서 이루어진다. ZBM 자체가 작은 리눅스임을 강조하고 있기도 하고, ZFS 같은 거 모르는 UEFI 다음에 등장해서 ZFS를 인식해서 ZFS 안쪽으로 부팅 절차를 넘겨주는 역할인만큼 여느 앱처럼 컨테이너 안에서 빌드가 가능한 모양이었다. (IRC 채널 주제에 적힌 설명을 보면 무려 '쉘 스크립트로!')

기반이 되는 이미지를 만들 때 커널은 요즘 버전인 6.12, 6.14 등을 지정할 수 있었고, zfs 커널은 따로 지정하지 않았지만 2.3.1 최신으로 모듈 빌드가 들어갔다. 처음엔 우분투 버전에 맞춰 6.14를 지정했지만 dkms ZFS 빌드가 실패했고 6.12로 바꾸니 다행히 빌드가 됐다.

이미지를 만든 다음에는 ZBM 파일을 만들면 되고, 만들어진 vmlinuz.EFI 파일을 USB의 EFI 아래에 복사하고 efibootmgr 명령을 다시 실행해주면 ZFS로 정상 부팅이 진행된다.

 

아래는 사용한 명령들이고, 우분투 25.04 라이브를 사용했다. 처음엔 라이브 환경으로는 부팅마다 초기화가 되어버려서 이미 구성되어 있던 Fedora Asahi Remix에서 실행했는데 이미지 생성 때 amd64가 아니라 arm64로 잡혀서 경고가 난다. 빌드 단계에서 arch를 지정할 수도 있었겠지만 그냥 얌전히 amd64 환경으로 옮겨갔다.

sudo apt install git podman -y

git clone https://github.com/zbm-dev/zfsbootmenu.git

cd zfsbootmenu

sudo releng/docker/image-build.sh -k 6.12 rescue

sudo ./zbm-builder.sh -i rescue

efibootmgr -c -d "$BOOT_DISK" -p "$BOOT_PART" \
  -L "ZFSBootMenu (Backup)" \
  -l '\EFI\ZBM\VMLINUZ-BACKUP.EFI'

efibootmgr -c -d "$BOOT_DISK" -p "$BOOT_PART" \
  -L "ZFSBootMenu" \
  -l '\EFI\ZBM\VMLINUZ.EFI'