Snapshots¶
We use Sanoid https://github.com/jimsalterjrs/sanoid to automatically create and prune ZFS snapshots. Note this is a backup server, so we don’t need hourly snapshots for the users because we’re only fed their stuff once a day anyway.
Sanoid is not part of the Ubuntu distribution, so we need to set it up from the GitHub repository.
sudo apt install libconfig-inifiles-perl
cd /opt
sudo git clone https://github.com/jimsalterjrs/sanoid
sudo ln /opt/sanoid/sanoid /usr/sbin/
sudo mkdir /etc/sanoid
sudo cp /opt/sanoid/sanoid.conf /etc/sanoid/sanoid.conf
sudo cp /opt/sanoid/sanoid.defaults.conf /etc/sanoid/sanoid.defaults.conf
In /etc/sanoid.conf
we have the templates and the datasets they refer to.
[tank/coldstore]
use_template = archive
[tank/h_user3]
use_template = slacker
[tank/h_user2]
use_template = backup
[tank/h_user1]
use_template = busybee
[tank/h_user4]
use_template = slacker
[tank/media]
use_template = archive
[tank/pictures]
use_template = archive
[tank/storage]
use_template = archive
[tank/texts]
use_template = archive
### TEMPLATES ####
# User who only occasionally logs in. We want to be able to catch when they
# come the next day and says "dude, I lost my file"
[template_slacker]
frequently = 0
hourly = 0
daily = 7
weekly = 4
monthly = 4
yearly = 1
autosnap = yes
autoprune = yes
# User who does a lot of work and could lose a lot
[template_busybee]
frequently = 0
hourly = 0
daily = 31
weekly = 0
monthly = 12
yearly = 1
autosnap = yes
autoprune = yes
# Backup for people whose data comes from outside and is transferred by rsync.
[template_backup]
frequently = 0
hourly = 0
daily = 7
weekly = 4
monthly = 12
yearly = 1
autosnap = yes
autoprune = yes
# Backup for media files and other archived data. We usually don't
# delete anything in these datasets, but only add stuff, so we want
# to avoid cryptolocker attacks and catch "oops" accidents.
[template_archive]
frequently = 0
hourly = 0
daily = 3
weekly = 1
monthly = 3
yearly = 0
autosnap = yes
autoprune = yes
Edit /etc/crontab
by hand (we don’t care about skipping one hour during
daylight savings transition):
*/5 * * * * root /usr/sbin/sanoid --cron
After about five minutes, you’ll see snapshots appearing when you run zfs list
-t snapshot
.
Note
The datasets used for Time Backups are not snapshotted.
Deleting snapshots¶
Use the -n
switch to test what we do before we do it. Format is
zfs destroy -vn <FIRST-SNAPSHOT>%<LAST-SNAPSHOT>
Where last snapshot is only the part after the @
. For example:
zfs destroy -vn tank/h_user1@auto-20190303.0900-3m%auto-20190601.0900-3m
This will also tell you how much space will be freed. Do this with without
-vn
to pull the trigger.