ZFS는 주요 파티션에 쓰지 말자 (아니면 이렇게 쓰던가)


개요

이 글에선 리눅스+ZFS를 쓰면서도 불필요한 잡일이 생기지 않는 방법에 대해 논의한다.

배경

리눅스 커널은 어지간한 파일 시스템 구현체는 내장하고 있다. 이를테면 ext4 파일 시스템을 마운트할 때 따로 뭔가를 설치할 필요가 없다. 그런데 오늘 다루는 OpenZFS(편의상 ZFS)는 리눅스 커널에 내장되어 있지 않아서, 추가적인 작업을 거쳐야 쓸 수 있게 된다.

OpenZFS는 CDDL이라는 라이선스를 쓰는데, 이게 리눅스 커널이 사용하는 GPLv2 라이선스와 합쳐졌을 때 법적인 문제가 생길 수 있다. 간단히 말해서, 리눅스 커널에 ZFS 코드를 섞으면 라이선스 상 ZFS 코드 또한 GPLv2로 다시 배포될 수 있어야 하는데, OpenZFS의 코드 저작권자 중에 (악명높은 법무팀을 보유한 것으로 유명한) Oracle이 있어서 걔네가 명시적으로 동의 서한을 보내지 않는 한 법적인 문제가 없다고 장담하기 어려운 상황: https://itsfoss.com/linus-torvalds-zfs/

Ubuntu의 경우 자체적인 법률 판단에 따라 합쳐놓고 그냥 배포하는데, 일단 내가 우분투 안쓰니까 패스. 그 외 리눅스 배포판의 경우 모듈 형태로 ZFS를 쓰는게 가장 보편적인 사용 방법이다. 아니면 BSD 계열 OS를 쓰거나…

문제

리눅스 모듈을 쓰겠다고 맘먹으면 두가지 선택이 있다. DKMS로 매 커널마다 새로 모듈을 빌드하던가, 아니면 특정 리눅스 버전에 맞춰서 빌드된 모듈을 사용하던가…

ZFS가 모든 리눅스 커널에 맞진 않더라

오늘 당한 문제인데 아직 ZFS DKMS가 리눅스 6.3과 호환이 되지 않아서, DKMS 빌드(DKMS는 매번 커널 버전업 할때마다 컴파일 다시 한다고 생각하면 쉽다)하다가 터져나갔고, Arch linux는 DKMS 빌드 깨진걸 무시하고 그냥 설치 완료 때려버려서, 재시작했을 때 ZFS 마운트가 안되는 문제가 생겼다. 그냥 어쩌다 쓰는 데이터 파티션이면 큰 문제가 아닌데, 이게 /var나 /home같이 중요한 데이터를 보관하는 곳이라면 난데없이 부팅실패 파바박!

해결책

커널을 작동하던 버전으로 되돌리기

마운트 가능한 예전 버전으로 리눅스 커널을 되돌리는 것이 가장 손쉬운 선택지. Arch linux의 경우 /var/cache/pacman/pkg에 최근 패키지 파일들을 보관하는데, 평소엔 디스크 낭비의 주범이지만 이런 때에는 최고 효자다.

하나 주의할 점은 linux와 linux-headers를 함께 되돌려야 한다는 것이다. DKMS는 linux-headers를 필요로 하기 때문.

ZFS를 다시 설치

/home이 없어서 GUI 로그인이 안된다고 하더라도 콘솔 로그인은 될 테니까, 이렇게 로그인해서 다시 ZFS 설치를 시도하는 방법. /home이 없으니 /root/tmp에서 잠깐 패키지 빌드를 하고 설치하고 하는 등…

커널을 LTS 버전으로 사용하기

즉 커널 6.3이 나왔다고 바로 바로 깔아서 쓰지 말고 진드근하게 구버전 좀 쓰다가 어느정도 남들이 다 바꾸고 나면 따라가란 소리.

몇가지 당부의 말씀

  • 커널 업데이트 했으면 다른 시스템 건드리지 말고 재시작부터 한번 해봐라
  • 커널 업데이트 해서 망했으면 일단 롤백부터 해봐라
  • 커널 모듈은 어지간하면 빌드 실패해도 문제없다는 마음가짐으로 관리해라