README.md: update documentation to compley with version 0.5.1

This commit is contained in:
2017-11-17 23:18:51 +01:00
parent 3f3c38d9df
commit 3586d800ec

222
README.md
View File

@@ -1,24 +1,40 @@
<!-- snap-sync README.md -->
<!-- version: 0.5.1 -->
# snap-sync
## About
This bash script sends incremental snapshots to another drive for backing up
data. Plug in and mount any btrfs-formatted device you want your system to be
backed up to (like a USB drive). When you run the script you will be prompted
to select a mounted btrfs device, or you can optionally select the disk using
its UUID on the command line.
`snap-sync` is implemented as a posix shell script.
It takes advantage of the specific functionality of a btrfs file system and
makes it possible to backup data while sending incremental snapshots to another
drive. It's fine to store to dives on a remote host (using ssh).
The script iterates through all snapper configurations by default (this can be
changed using the `-c` flag). For each configuration it creates a new local
snapshot. If you have never synced to the specified device you will be prompted
to enter a directory on the device where the backup snapshots will go.
Additionally you are shown the location of the backed up snapshot. If you have
performed a backup to this device before, only the changes since the last backup
have to be sent.
Plug in and mount any btrfs-formatted device you want your system to be
backed up to (eg. local USB drive, remote RAID drives).
`snap-sync` will support interactive an time scheduled backup runs.
* An interactive run will request you to select a mounted btrfs device.
You can pre-select the target drive via [command line options](https://github.com/wesbarnett/snap-sync#options).
Either use the UUID, the SUBVOLID or it's TARGET (read 'mount point').
* A scheduled run will take all needed parameters from config options.
For a backup run, `snap-sync` will iterate through all defined snapper configurations
found on your source system. If you prefer to just run on a specific configuration,
you can select this using the 'config' option `-c`. For each selected configuration
it will use snapper to create an appropriate local snapshot.
## Requirements
snapper is required.
`snap-sync`relies on external tools to achieve its goal.
At run-time their availability is checked. Following tools are are used:
- snapper
- awk
- sed
- notify-send
## Installation
@@ -30,6 +46,9 @@ configuration file, specify it on the command line with
# make SNAPPER_CONFIG=/etc/conf.d/snapper install
The local snapper configuration will be extended to make use
of a new template 'snap-sync'.
The package is also available in the
[AUR](https://aur.archlinux.org/packages/snap-sync/).
@@ -44,109 +63,85 @@ The package is also available in the
(e.g. -c "root home").
-n, --noconfirm Do not ask for confirmation for each configuration. Will still prompt for backup
directory name on first backup
-u, --UUID <UUID> Specify the UUID of the mounted BTRFS subvolume to back up to. Otherwise will prompt.
If multiple mount points are found with the same UUID, will prompt user.
-u, --uuid <UUID> Specify the UUID of the mounted BTRFS subvolume to back up to. Otherwise will prompt.
--UUID <UUID> If multiple mount points are found with the same UUID, will prompt user.
-s, --subvolid <subvlid> Specify the subvolume id of the mounted BTRFS subvolume to back up to. Defaults to 5.
--remote <address> Send the snapshot backup to a remote machine. The snapshot will be sent via ssh. You
--SUBVOLID
-t, --target <target> Specify the mountpoint of the BTRFS subvolume to back up to.
--TARGET <target>
--remote <address> Send the snapshot backup to a remote machine. The snapshot will be sent via ssh. You
should specify the remote machine's hostname or ip address. The 'root' user must be
permitted to login on the remote machine.
--dry-run perform a trial run with no changes made.
-v, --verbose Be more verbose on what's going on.
## First run
When you run `snap-sync` you will be prompted to choose a disk to back up to.
The first time you run `snap-sync` for a particular disk (new UUID) you will be
prompted to choose a backup location on that disk. If the directory you specify
does not exist, it will be created.
If you have never synced to the paticular target device (first run), `snap-sync`
will take care to create the necessary target file-structure to store the snapshot.
As an option you can prepend a backup-path.
Before the sync job is started, source and target locations will be presented.
You have to confirm any further operation, or use defaults (option: noconfirm).
## Example command line usage
### No arguments
### Snap-sync to local target
#### Default: no selections, run for all snapper configs
# snap-sync
Select a mounted BTRFS device on your local machine to backup to.
1) /mnt (uuid=7360922b-c916-4d9f-a670-67fe0b91143c, subvolid=5)
0) Exit
Enter a number: 1
#### Default: Select two configs, the backupdir and verbose output
You selected the disk with UUID 7360922b-c916-4d9f-a670-67fe0b91143c, subovolid=5.
The disk is mounted at /mnt.
# snap-sync --verbose --config root --config data2 --backupdir=toshiba_r700
Initial configuration...
#### Dry-run: Select config, select Target, as batchjob (--noconfirm)
Creating new snapshot for home...
Will backup /home/.snapshots/4196/snapshot to /mnt/acer-c720/home/4196//snapshot
Continue with backup [Y/n]?
# snap-sync -c root -s 265 --noconfirm --dry-run
Creating new snapshot for root...
Will backup //.snapshots/8455/snapshot to /mnt/acer-c720/root/8455//snapshot
Continue with backup [Y/n]?
Performing backups...
### Snap-sync to remote host
Sending incremental snapshot for home...
At subvol /home/.snapshots/4196/snapshot
At snapshot snapshot
Modifying data for old snapshot for home...
Tagging new snapshot as latest backup for home...
`snap-sync` will rely on ssh access to the target host. For batch usage make sure, that your
public key is accepted for remote login as user 'root'. You may have to adapt /root/.ssh/authorized_keys
on the target host.
Sending incremental snapshot for root...
At subvol //.snapshots/8455/snapshot
At snapshot snapshot
Modifying data for old snapshot for root...
Tagging new snapshot as latest backup for root...
On your target host, you should also verify the availability of a snap-sync config-template for snapper.
A template `snap-sync` is included in the package for your convenience.
Done!
#### Dryrun: Select remote host <ip/fqdn>, interactive, run for all configs
The related snapshots from this on the local machine are for `home`:
snap-sync --dry-run --remote 172.16.0.3
Selecting a mounted BTRFS device for backups on 172.16.0.3.
0) / (uuid=5af3413e-59ea-4862-8cff-304afe25420f,subvolid=257,subvol=/root)
1) /.snapshots (uuid=5af3413e-59ea-4862-8cff-304afe25420f,subvolid=258,subvol=/@snapshots-root)
2) /data2 (uuid=62a45211-9197-4a5f-aeaf-0ab803a42c32,subvolid=261,subvol=/data2)
3) /home (uuid=62a45211-9197-4a5f-aeaf-0ab803a42c32,subvolid=258,subvol=/home)
4) /data2/.snapshots (uuid=62a45211-9197-4a5f-aeaf-0ab803a42c32,subvolid=262,subvol=/@snapshots-data2)
5) /home/.snapshots (uuid=62a45211-9197-4a5f-aeaf-0ab803a42c32,subvolid=259,subvol=/@snapshots-home)
6) /var/lib/machines (uuid=2ba04452-74aa-44df-b1c7-74e0a70c6543,subvolid=260,subvol=/machines)
7) /var/lib/libvirt (uuid=2ba04452-74aa-44df-b1c7-74e0a70c6543,subvolid=261,subvol=/libvirt)
8) /data (uuid=2ba04452-74aa-44df-b1c7-74e0a70c6543,subvolid=257,subvol=/data)
9) /var/lib/machines/.snapshots (uuid=2ba04452-74aa-44df-b1c7-74e0a70c6543,subvolid=2121,subvol=/@snapshots-machines)
10) /data/.snapshots (uuid=2ba04452-74aa-44df-b1c7-74e0a70c6543,subvolid=258,subvol=/@snapshots-data)
11) /var/lib/snap-sync (uuid=753eba7a-41ce-49e0-b2e3-24ee07811efd,subvolid=420,subvol=/snap-sync)
x) Exit
Enter a number: 11
single | 4196 | | Sat 11 Nov 2017 01:37:44 PM EST | root | | latest incremental backup | backupdir=acer-c720, subvolid=5, uuid=7360922b-c916-4d9f-a670-67fe0b91143c
and for `root`:
### Dry-run with given Target for snapper config 'home', no confirmations
single | 8455 | | Sat 11 Nov 2017 01:37:46 PM EST | root | | latest incremental backup | backupdir=acer-c720, subvolid=5, uuid=7360922b-c916-4d9f-a670-67fe0b91143c
#### Sync: Select config 'data2', remote host <ip/fqdn>, target '/data', as batchjob (--noconfirm)
As you can see the userdata column for snapper is used to keep track of these
snapshots for the next time the script is run so that only the changes will need
to be sent.
### With UUID and subvolid specified and no confirmations
# snap-sync --UUID 7360922b-c916-4d9f-a670-67fe0b91143c --subvolid 5 --noconfirm
You selected the disk with UUID 7360922b-c916-4d9f-a670-67fe0b91143c, subovolid=5.
The disk is mounted at /mnt.
Initial configuration...
Creating new snapshot for home...
Will backup /home/.snapshots/4197/snapshot to /mnt/acer-c720/home/4197//snapshot
Creating new snapshot for root...
Will backup //.snapshots/8456/snapshot to /mnt/acer-c720/root/8456//snapshot
Performing backups...
Sending incremental snapshot for home...
At subvol /home/.snapshots/4197/snapshot
At snapshot snapshot
Modifying data for old snapshot for home...
Tagging new snapshot as latest backup for home...
Sending incremental snapshot for root...
At subvol //.snapshots/8456/snapshot
At snapshot snapshot
Modifying data for old snapshot for root...
Tagging new snapshot as latest backup for root...
Done!
# snap-sync --config data2 --remote 172.16.0.3 --target /data --noconfirm
## systemd example
## service
### service
[Unit]
Description=Run snap-sync backup
Description=Run snap-sync backup
[Install]
WantedBy=multi-user.target
@@ -155,7 +150,7 @@ to be sent.
Type=simple
ExecStart=/usr/bin/snap-sync --UUID 7360922b-c916-4d9f-a670-67fe0b91143c --subvolid 5 --noconfirm
## timer
### timer
[Unit]
Description=Run snap-sync weekly
@@ -168,7 +163,60 @@ to be sent.
[Install]
WantedBy=timers.target
## snapper template
###
# template for snap-sync handling
###
# subvolume to snapshot
SUBVOLUME="/var/lib/snap-sync"
# filesystem type
FSTYPE="btrfs"
# users and groups allowed to work with config
ALLOW_USERS=""
ALLOW_GROUPS="adm"
# sync users and groups from ALLOW_USERS and ALLOW_GROUPS to .snapshots
# directory
SYNC_ACL="yes"
# start comparing pre- and post-snapshot in background after creating
# post-snapshot
BACKGROUND_COMPARISON="yes"
# run daily number cleanup
NUMBER_CLEANUP="no"
# limit for number cleanup
NUMBER_MIN_AGE="1800"
NUMBER_LIMIT="10"
NUMBER_LIMIT_IMPORTANT="2"
# use systemd.timer for timeline
TIMELINE_CREATE="no"
# use systemd.timer for cleanup
TIMELINE_CLEANUP="no"
# snap-sync as timer unit
SNAP_SYNC_EXCLUDE="yes"
## Contributing
Help wanted! Feel free to fork and issue a pull request to add features or
tackle an open issue.
## License
<!-- License source -->
[Logo-CC_BY]: https://i.creativecommons.org/l/by/4.0/88x31.png "Creative Common Logo"
[License-CC_BY]: https://creativecommons.org/licenses/by/4.0/legalcode "Creative Common License"
This work is licensed under a [Creative Common License 4.0][License-CC_BY]
![Creative Common Logo][Logo-CC_BY]
© 2016, 2017 James W. Barnett, Ralf Zerres