btrfs 계의 auto-snapshot
zfs auto snapshot을 대체할 수 있는 서비스를 찾아보다가 찾았습니다.
아직은 fedora에서만 되는 것 같더군요.
기능1: 자동 스냅샷
주기적으로 스냅샷을 찍어줍니다.
얼마나 저장할지 설정할 수 있고, 매 시간 마다 찍은 스냅샷도 일정 기간이 지나면 하루에 한개로 줄여서 보관할 수도 있습니다.
기능2: 스냅샷 읽기 전용 마운트
마운트까지 해줍니다.
파일 잘못 건드려서 날라갔다면
심플하게 스냅샷 디렉토리로 가서 복사해주면 됩니다.
zfs는 스냅샷을 클론하고 마운트를 해줘야 하지만, btrbk는 완벽 그 자체입니다.ㅎㅎ
btrbk setup
btrfs 풀 마운트
기본적으로 /etc/fstab
에는 btrfs의 서브 볼륨 /
와 /home
이 마운트 되어있습니다.
하지만 스냅샷을 찍기 위해서 btrfs pool을 마운트 해줘야 합니다.
pool 마운트 할 directory 생성
sudo mkdir /_btrfs_pool
fstab 수정
sudo nano /etc/fstab
/etc/fstab은 기본적으로 다음과 같은 꼴로 되어있습니다.
#
# /etc/fstab
# Created by anaconda on Sat Nov 5 08:34:02 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=2a456084-c10e-4dc3-a528-d8b6c1b78b8e / btrfs subvol=root,compress=zstd:1 0 0
UUID=3bd26cdc-a335-4f3e-a590-f334762002bd /boot ext4 defaults 1 2
UUID=FF3A-A35D /boot/efi vfat defaults,uid=0,gid=0,umask=077,shortname=winnt 0 2
UUID=2a456084-c10e-4dc3-a528-d8b6c1b78b8e /home btrfs subvol=home,compress=zstd:1 0 0
그러면 가장 아래에 다음을 추가해줍니다.
UUID=2a456084-c10e-4dc3-a528-d8b6c1b78b8e /_btrfs_pool btrfs subvolid=5,compress=zstd:1 0 0
subvolid=5가 pool을 의미합니다.
어떤 pool이던 5가 pool의 최상단입니다.
sudo mount -a
로 btrfs_pool을 마운트합니다.
btrbk 설치
dnf 패키지 설치
sudo dnf install btrbk
btrbk config 설정
/etc/btrbk/btrbk.conf
를 편집합니다.
sudo nano /etc/btrbk/btrbk.conf
설정을 채워넣습니다.
transaction_log /var/log/btrbk.log
lockfile /var/lock/btrbk.lock
timestamp_format long
snapshot_dir _snapshot
volume /_btrfs_pool
snapshot_create always
subvolume root
snapshot_preserve_min 5d
snapshot_preserve 36h 20d 12w 12m 2y
subvolume home
snapshot_preserve_min 1d
snapshot_preserve 12h 14d 2w 1m
snapshot_dir은 /_btrfs_pool 아래에 생성됩니다.
즉, subvolume이랑 같은 수준의 디렉토리에 생성이 되요.
(_glusterfs는 기본으로 포함되지 않은 서브볼륨입니다.)
각 서브볼륨마다 보관 기간을 다르게 한 예를 작성해보았습니다.
스냅샷 찍는 주기 설정
systemd의 타이머 파일을 수정합니다.
sudo nano /lib/systemd/system/btrbk.timer
daily를 *:0/15- 로 변경해줍니다.
[Unit]
Description=btrbk daily backup
[Timer]
OnCalendar=*:0/15
AccuracySec=10min
Persistent=true
[Install]
WantedBy=timers.target
btrbk 작동 테스트
sudo btrbk dryrun
실행하면 아래와 같은 결과가 나옵니다.
(glusterfs는 기본으로 없는 디렉토리입니다.)
서비스를 enable하고 시작합니다.
systemctl daemon-reload
systemctl enable --now btrbk.timer btrbk.service
btrbk 설정 끝!
이제 매 15분마다 찍히고 48개의 스냅샷이 preserve 되었다가 삭제 될 것입니다.
또한 아래 이미지처럼 스냅샷들이 directory 형태로 나열되고, 이 폴더에 접근할 수 있는 것을 볼수 있습니다.
답글 남기기