tldr;
세련된 해결책은 아닐 듯 하지만, /var/lib/dpkg 디렉토리를 루트에 포함시키는 방법을 택해봤다.
아직까지 Snapper 를 제대로 쓰고 있진 않지만, 그저 분위기만 보고 있는 상황에선, 예전에 쓴 글 대로 @snapshots 서브볼륨을 따로 만들고 .snapshots 에 마운트해서 사용하는 방법이 제일 좋아 보인다. (이 문장.. 너무 길다.)
또, Btrfs Ubuntu server 에서처럼, 서브볼륨은 Flat 으로 설정(FS Root 아래에 @, @home, @var, @opt 등 생성)하는게 편해보인다.
그런데, 여기서 한가지 문제가 있다. 바로 @var 로 인해 생기는 (아주 사소한) 문제.
Snapshot 을 만들다가, 이전 스냅샷으로 복귀했을 때, 살짝 애매한 상황이 생긴다.
예를 들어, Snapper 를 사용하여 특정 시점으로 복귀를 했다고 가정한다. 마지막 스냅샷 상황에는 꾸러미 cmatrix 가 설치되어 있는 상황이고, 복귀한 스냅샷에는 설치되어 있지 않다.
복귀를 마친 뒤, 터미널에서 cmatrix
를 실행하면, 당연히 설치되어 있지 않다고 투정을 부린다.
$ cmatrix Command 'cmatrix' not found, but can be installed with: sudo apt install cmatrix
그런데, apt policy
결과는??
$ apt policy cmatrix cmatrix: Installed: 1.2a-5build3 Candidate: 1.2a-5build3 Version table: *** 1.2a-5build3 500 500 http://ftp.harukasan.org/ubuntu bionic/universe amd64 Packages 100 /var/lib/dpkg/status
얼레? 설치는 안되어 있는데, 설치돼 있다고 나온다?
원래대로라면 이렇게 나와야 한다.
$ apt policy cmatrix cmatrix: Installed: (none) Candidate: 1.2a-5build3 Version table: 1.2a-5build3 500 500 http://ftp.harukasan.org/ubuntu bionic/universe amd64 Packages
왜 이런 차이가 났을까?
바로 위 apt policy 에 답이 나와 있다. 첫번째 항목엔 100 /var/lib/dpkg/status
가 있고, 두번째엔 없다.
Snapper 는 / 를 복사하도록 설정해놓은 상태이고, /var 는 @var 에 마운트되어 있다. 즉, @var 는 Snapshot 에서 제외된다.
따라서, 특정 시점으로 회귀했다하더라도, @var 는 그대로이기에, /var/lib/dpkg/status 는 이전 정보를 그대로 갖고 있게 된다. 따라서, 실제로는 설치가 되어 있진 않지만, 설치되었다고 나오는 황당한 상황이 연출된다.
@var 를 따로 만든 이유는, Snapshot 에서 빼려는 이유도 있고, NoCoW 때문이기도 한데..
이 문제가 별 건 아니지만, 그래도 뭔가 살짝 아쉬움이 남기도 한다.
회피하려면, 상당히 복잡한 마운트 방식을 택해야 하는데, 굳이 그렇게까지 해야 하나 싶기도 하고..