Snapshot/Snapper: var 디렉토리 처리 문제.

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 때문이기도 한데..

이 문제가 별 건 아니지만, 그래도 뭔가 살짝 아쉬움이 남기도 한다.
회피하려면, 상당히 복잡한 마운트 방식을 택해야 하는데, 굳이 그렇게까지 해야 하나 싶기도 하고..

Leave a Reply