btrfs 자동 스냅샷 및 기타등등.

** 원래 이글루스에 있던 글. 아주 살짝 수정했다.


TL;DR

배포판 판올림 시에 생긴 스냅샷(@apt-snapshot-release-upgrade….) 파일을 지우려면, 다음 두가지 방법을 쓴다.

  • 이 스냅샷이 있는 드라이브를 마운트하고, btrfs subvolume delete xxx 사용.
  • apt-btrfs-snapshot 꾸러미 설치 후 실행하여 삭제.

Kubuntu 를 업그레이드 하려고 하는데, 업그레이드 중에 용량이 부족하다는 경고 문구가 떴다. 또, KDE Neon 시에도 Btrfs Snapshot 파일이 생성된다.
용량은 충분하다고 생각했는데, 왜 이런 일이??
일단 /var 디렉토리를 다른 쪽으로 마운트하여 해결하긴 했는데, 그래도 또 오류가 발생했다.

뭔가, 내가 모르는 게 용량을 먹고 있었다.
뭘까… ㅎㅎ

(다음 글도 참고하라.)


관련 된 글을, 딱 하나 찾을 수 있었다. Btrfs 사용자가 그렇게 적은가?

그 이전에, 잠시 언급할 게 있다.
Btrfs 는 Oracle 의 ZFS 를 따라한(?) 파일시스템이다. ZFS 가 저작권 문제로 리눅스/우분투에서는 사용되지 못하고 있는데, 조만간 사용할 길이 열릴 듯 하다는 기사를 본 적이 있다. 그리고 Redhat 에서는 Btrfs 를 더 이상 지원하지 않겠다는 발표도 있었다.

그냥 그렇단 거고..
위 글에 따르면, apt upgrade 를 할 때면 자동으로 스냅샷이 생성된다고 한다. (원래 이랬었나?)
Btrfs 를 사용한 게 벌써 꽤 됐는데, 왜 이걸 모르고 있었나.

** 위 작업은, 적어도 내가 알기로는 snapper 를 사용할 때만 적용된다.

왜 몰랐느냐하면, 이 snapshot 이 내가 볼 수 없는 곳에 생성되기 때문이다.
예를 들자면 이렇다. /dev/sda2 에 root(/) 디렉토리를 생성했다고 한다면, 우분투에선 우선 /dev/sda2 에 subvolume ‘@’ 을 만들고, 이 서브볼륨에 / 를 할당한다. (이 서브볼륨 @ 을 fstab 에서 / 로 마운트한다.)

이 상태에선, 부팅한 시스템에서는 /dev/sda2 아래에 있는 @ 서브볼륨만을 볼 수 있다.

그런데, snapshot 은 어디에 만들어지는고 하니, 바로 /dev/sda2 아래인데, 여기에 새로운 서브볼륨 (@apt-snapshot-2017-xx-xx-xxxx)이 만들어지면서 생긴다.
이러니, 내가 알아챌 수가 있나.

이걸 보려면 /dev/sda2 를 따로 마운트를 해야만 한다.
지우려면, btrfs subvolume delete xxx 를 사용해야 한다.

여기까지는 어디까지나 ‘기본 사용법’에 입각한 설명이었다.

물론, 좀 더 발전된/편한 사용 방법도 있다.

먼저 설치를 해야 한다.

$ sudo apt install apt-btrfs-snapshot

현재 시스템에 snapshot 이 얼마나 생성되어 있는지 알아보려면, 간단히 다음 명령으로 확인할 수 있다. 마운트는 필요없다.

$ sudo apt-btrfs-snapshot list

간단하지? 지우려면 이렇게 한다.

$ sudo apt-btrfs-snapshot delete xxxx

스냅샷이 여러 개일 경우, 일(日) 단위로, 며칠 이전 날짜에 생성된 스냅샷은 모두 지우도록 할 수도 있다.
예를 들어, 2일 전까지 만들어진 스냅샷은 모두 지우라는 명령은 다음과 같다.

$ sudo apt-btrfs-snapshot delete-older-than 2d

일 단위로만 되는 듯 하다. 시간 단위는 안된다.

그런데, apt upgrade 시에 snapshot 을 만들지 않게 할 수는 없으려나?? (지금 껏 용량 문제로 고민한 적은 없으니까 없어도 그냥 내버려둬도 될 듯은 한데..) 이건 좀 더 찾아봐야 하겠다.
뭔가 좀 뒤엉킨 듯 한데, apt-btrfs-snapshot 을 설치했을 때 apt 후에 snapshot 이 생성된다.
따라서, apt-btrfs-snapshot 을 삭제하면, 더 이상 자동 snapshot 은 만들어지지 않는다.

만약, 어떤 이유에서든 apt-btrfs-snapshot 이 작동하지 않는다면, 수동으로 snapshot 을 지워야 한다.

먼저, lsblk -f 명령을 내려서 root 디렉토리가 포함된 파티션을 알아낸다. 이 파티션에 스냅샷이 생성되기 때문이다.
이것이 /dev/sda2 라고 한다면, 이 파티션을 새로 마운트 한다.
마운트 후엔, 여기에 있는 subvolume 을 확인하고, 불필요한 볼륨(스냅샷)을 삭제한다.

$ sudo mount /dev/sda2 /mnt
$ sudo btrfs subvolume list /mnt
ID 257 gen 105731 top level 5 path @ID 309 gen 105164 top level 5 path @apt-snapshot-2017-11-24_00:07:35
$ sudo btrfs subvolume delete @apt-snapshot-2017-11-24_00:07:35

이런 식이면 된다.

…..
같은 이가 쓴 글로, Snapshot 을 사용해서 이전 상태로 돌아가는 법을 기술한 것도 있다.


그리고..
btrfs 파일시스템에서, 파일이 차지하고 있는 용량을 정확히 알려면 df -h 보다는 전문적인 프로그램(?)이 더 좋다고 한다.
Arch 문서 참고.

그런데 큰 차이는 없어 보인다.

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