From 9cf5ce188a0fac5eb1f4afeb38f891d1bacf69e5 Mon Sep 17 00:00:00 2001 From: Edwin Eefting Date: Sun, 29 Mar 2020 23:23:47 +0200 Subject: [PATCH] added thinner documentation. fixes #21 --- README.md | 91 ++++++++++++++++++++++++++++++++++++++++++------ doc/thinner.odg | Bin 0 -> 11925 bytes doc/thinner.png | Bin 0 -> 26715 bytes 3 files changed, 81 insertions(+), 10 deletions(-) create mode 100644 doc/thinner.odg create mode 100644 doc/thinner.png diff --git a/README.md b/README.md index 481256e..65dd7bb 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ * Better property management (--set-properties and --filter-properties) * Better resume handling, automaticly abort invalid resumes. * More robust error handling. -* Prepared for future enhanchements. +* Prepared for future enhancements. * Supports raw backups for encryption. * Custom SSH client config. @@ -31,7 +31,7 @@ Since its using ZFS commands, you can see what its actually doing by specifying An imporant feature thats missing from other tools is a reliable `--test` option: This allows you to see what zfs-autobackup will do and tune your parameters. It will do everything, except make changes to your zfs datasets. -Another nice thing is progress reporting with `--progress`. Its very usefull with HUGE datasets, when you want to know how many hours/days it will take. +Another nice thing is progress reporting with `--progress`. Its very useful with HUGE datasets, when you want to know how many hours/days it will take. zfs-autobackup tries to be the easiest to use backup tool for zfs. @@ -235,14 +235,85 @@ Its also possible to let a server push its backup to the backup-server. However ### Automatic backups -Now everytime you run the command, zfs-autobackup will create a new snapshot and replicate your data. +Now every time you run the command, zfs-autobackup will create a new snapshot and replicate your data. -Older snapshots will evertually be deleted, depending on the `--keep-source` and `--keep-target` settings. (The defaults are shown above under the 'Settings summary') +Older snapshots will eventually be deleted, depending on the `--keep-source` and `--keep-target` settings. (The defaults are shown above under the 'Settings summary') Once you've got the correct settings for your situation, you can just store the command in a cronjob. Or just create a script and run it manually when you need it. +### Thinning out obsolete snapshots + +The thinner is the thing that destroys old snapshots on the source and target. + +The thinner operates "stateless": There is nothing in the name or properties of a snapshot that indicates how long it will be kept. Everytime zfs-autobackup runs, it will look at the timestamp of all the existing snapshots. From there it will determine which snapshots are obsolete according to your schedule. The advantage of this stateless system is that you can always change the schedule. + +Note that the thinner will ONLY destroy snapshots that are matching the naming pattern of zfs-autobackup. If you use `--other-snapshots`, it wont destroy those snapshots after replicating them to the target. + +#### Thinning schedule + +The thinner is specified by a comma separated string. The default thinning schedule is: `10,1d1w,1w1m,1m1y`. + +If you run zfs-autobackup with the `--verbose` option it will show you what this means: + +```console + [Source] Keep the last 10 snapshots. + [Source] Keep oldest of 1 day, delete after 1 week. + [Source] Keep oldest of 1 week, delete after 1 month. + [Source] Keep oldest of 1 month, delete after 1 year. +``` + +* The plain number 10 means: keep at least the 10 most recent snapshots, regardless how old they are. +* 1d1w means: Keep a daily snapshot, for one week. +* 1w1m means: Keep a weekly snapshot, for a month etc. +* These are the time units you can use: + * `y`: Years + * `m`: Months + * `d`: Days + * `h`: Hours + * `min`: Minutes + * `s`: Seconds + +You can specify as many rules as you need. The order of the rules doesn't matter. + +Keep in mind its up to you to actually run zfs-autobackup often enough: If you want to keep hourly snapshots, you have to make sure you at least run it every hour. + +However, its no problem if you run it more or less often than that: The thinner will still do its best to choose an optimal set of snapshots to choose. + +If you want to keep as few snapshots as possible, just specify 0. (`--keep-source=0` for example) + +If you want to keep ALL the snapshots, just specify a very high number. + +#### More details about the Thinner + +We will give a practical example of how the thinner operates. + +Say we want have 3 thinner rules: + +* We want to keep daily snapshots for 7 days. +* We want to keep weekly snapshots for 4 weeks. +* We want to keep monthly snapshots for 12 months. + +So far we have taken 4 snapshots at random moments: + +![thinner example](doc/thinner.png) + +For every rule, the thinner will divide the timeline in blocks and assign each snapshot to a block. + +A block can only be assigned one snapshot: If multiple snapshots fall into the same block, it only assigns it to the oldest that we want to keep. + +The colors show to which block a snapshot belongs: + +* Snapshot 1: This snapshot belongs to daily block 1, weekly block 0 and monthly block 0. However the daily block is too old. +* Snapshot 2: Since weekly block 0 and monthly block 0 already have a snapshot, it only belongs to daily block 4. +* Snapshot 3: This snapshot belongs to daily block 8 and weekly block 1. +* Snapshot 4: Since daily block 8 already has a snapshot, this one doesn't belong to anything and can be deleted right away. (it will be keeped for now since its the last snapshot) + +zfs-autobackup will re-evaluate this on every run: As soon as a snapshot doesn't belong to any block anymore it will be destroyed. + +Snapshots on the source that still have to be send to the target wont be destroyed off course. (If the target still wants them, according to the target schedule) + ## Tips * Use ```--debug``` if something goes wrong and you want to see the commands that are executed. This will also stop at the first error. @@ -334,7 +405,7 @@ optional arguments: --no-snapshot Dont create new snapshots (usefull for finishing uncompleted backups, or cleanups) --no-send Dont send snapshots (usefull for cleanups, or if you - want a serperate send-cronjob) + want a separate send-cronjob) --min-change MIN_CHANGE Number of bytes written after which we consider a dataset changed (default 200000) @@ -361,11 +432,11 @@ optional arguments: (recommended, prevents mount conflicts. same as --set- properties canmount=noauto) --filter-properties FILTER_PROPERTIES - List of propererties to "filter" when receiving + List of properties to "filter" when receiving filesystems. (you can still restore them with zfs inherit -S) --set-properties SET_PROPERTIES - List of propererties to override when receiving + List of properties to override when receiving filesystems. (you can still restore them with zfs inherit -S) --rollback Rollback changes to the latest target snapshot before @@ -401,7 +472,7 @@ You forgot to setup automatic login via SSH keys, look in the example how to do This usually means you've created a new snapshot on the target side during a backup: -* Solution 1: Restart zfs-autobackup and make sure you dont use --resume. If you did use --resume, be sure to "abort" the recveive on the target side with zfs recv -A. +* Solution 1: Restart zfs-autobackup and make sure you don't use --resume. If you did use --resume, be sure to "abort" the receive on the target side with zfs recv -A. * Solution 2: Destroy the newly created snapshot and restart zfs-autobackup. ### It says 'internal error: Invalid argument' @@ -430,13 +501,13 @@ Put this command directly after the zfs_backup command in your cronjob: zabbix-job-status backup_smartos01_fs1 daily $? ``` -This will update the zabbix server with the exitcode and will also alert you if the job didnt run for more than 2 days. +This will update the zabbix server with the exit code and will also alert you if the job didn't run for more than 2 days. ## Backuping up a proxmox cluster with HA replication Due to the nature of proxmox we had to make a few enhancements to zfs-autobackup. This will probably also benefit other systems that use their own replication in combination with zfs-autobackup. -All data under rpool/data can be on multiple nodes of the cluster. The naming of those filesystem is unique over the whole cluster. Because of this we should backup rpool/data of all nodes to the same destination. This way we wont have duplicate backups of the filesystems that are replicated. Because of various options, you can even migrate hosts and zfs-autobackup will be fine. (and it will get the next backup from the new node automaticly) +All data under rpool/data can be on multiple nodes of the cluster. The naming of those filesystem is unique over the whole cluster. Because of this we should backup rpool/data of all nodes to the same destination. This way we wont have duplicate backups of the filesystems that are replicated. Because of various options, you can even migrate hosts and zfs-autobackup will be fine. (and it will get the next backup from the new node automatically) In the example below we have 3 nodes, named h4, h5 and h6. diff --git a/doc/thinner.odg b/doc/thinner.odg new file mode 100644 index 0000000000000000000000000000000000000000..f6a12b3d976bf37319ab490c30b96238aafe4296 GIT binary patch literal 11925 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 aVRe<4hImn50RTuZKiU@!u` literal 0 HcmV?d00001 diff --git a/doc/thinner.png b/doc/thinner.png new file mode 100644 index 0000000000000000000000000000000000000000..e67701f58aec8c09f804d370bbaa729b25c51185 GIT binary patch literal 26715 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