When listing mounted devices, list the subvolid of the mountpoint, since a single btrfs disk can be mounted multiple times using subvolumes. Additionally tag snapshots with subvolid to keep track of this. This will break current usage, but users can manually tag old snapshots with subvolid's in order to migrate them. Add -s/--subvolid command line parameter to pass specified subvolid to program. Cf. #45.
137 lines
5.5 KiB
Markdown
137 lines
5.5 KiB
Markdown
# 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.
|
|
|
|
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.
|
|
|
|
## Requirements
|
|
|
|
snapper is required.
|
|
|
|
## Installation
|
|
|
|
# make install
|
|
|
|
If your system uses a non-default location for the snapper
|
|
configuration file, specify it on the command line with
|
|
`SNAPPER_CONFIG`. For example, for
|
|
Arch Linux use:
|
|
|
|
# make SNAPPER_CONFIG=/etc/conf.d/snapper install
|
|
|
|
The package is also available in the
|
|
[AUR](https://aur.archlinux.org/packages/snap-sync/).
|
|
|
|
## Options
|
|
|
|
Usage: snap-sync [options]
|
|
|
|
Options:
|
|
-d, --description <desc> Change the snapper description. Default: "latest incremental backup"
|
|
-c, --config <config> Specify the snapper configuration to use. Otherwise will perform for each snapper
|
|
configuration. Can list multiple configurations within quotes, space-separated
|
|
(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.
|
|
-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
|
|
should specify the remote machine's hostname or ip address. The 'root' user must be
|
|
permitted to login on the remote machine.
|
|
|
|
## 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.
|
|
|
|
## Systemd unit and timer
|
|
|
|
A systemd unit and timer are included. These are instantiated units. You need to
|
|
specify the UUID of the disk to back up to in the `systemctl` call. Note, once
|
|
again, the disk **must** be mounted, and it **must** only be mounted in one
|
|
place. Example:
|
|
|
|
# systemctl start snap-sync@7360922b-c916-4d9f-a670-67fe0b91143c
|
|
|
|
The timer included is weekly. Edit both files to your taste.
|
|
|
|
You can exclude a configuration from backup by setting `SNAP_SYNC_EXCLUDE=yes`
|
|
in your snapper configuration file. Additionally you should run snap-sync at
|
|
least once for a new disk without using the service so you can be prompted for
|
|
the backup location.
|
|
|
|
## Example command line usage
|
|
|
|
### No arguments
|
|
|
|
# snap-sync
|
|
|
|
Select a mounted BTRFS device to backup to.
|
|
1) 43cedfb6-8775-43be-8abc-ee63bb92e10e (/)
|
|
2) 43cedfb6-8775-43be-8abc-ee63bb92e10e (/.snapshots)
|
|
3) 43cedfb6-8775-43be-8abc-ee63bb92e10e (/home)
|
|
4) 7360922b-c916-4d9f-a670-67fe0b91143c (/run/media/wes/backup)
|
|
0) Exit
|
|
Enter a number: 4
|
|
|
|
You selected the disk with UUID 7360922b-c916-4d9f-a670-67fe0b91143c.
|
|
The disk is mounted at /run/media/wes/backup.
|
|
|
|
Will backup /home/.snapshots/1097/snapshot to /run/media/wes/backup/acer-c720/home/1097//snapshot
|
|
Continue with backup [Y/n]? y
|
|
At subvol /home/.snapshots/1097/snapshot
|
|
|
|
Will backup //.snapshots/2288/snapshot to /run/media/wes/backup/acer-c720/root/2288//snapshot
|
|
Continue with backup [Y/n]? y
|
|
At subvol //.snapshots/2288/snapshot
|
|
|
|
Done!
|
|
|
|
The related snapshots from this on the local machine are for `home`:
|
|
|
|
single | 1097 | | Sat 01 Oct 2016 07:48:40 AM CDT | root | | latest incremental backup | backupdir=acer-c720, uuid=7360922b-c916-4d9f-a670-67fe0b91143c
|
|
|
|
and for `root`:
|
|
|
|
single | 2288 | | Sat 01 Oct 2016 07:50:56 AM CDT | root | | latest incremental backup | backupdir=acer-c720, uuid=7360922b-c916-4d9f-a670-67fe0b91143c
|
|
|
|
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 specified and no confirmations
|
|
|
|
This is essentially what the systemd service does.
|
|
|
|
# snap-sync --UUID 7360922b-c916-4d9f-a670-67fe0b91143c --noconfirm
|
|
You selected the disk with UUID 7360922b-c916-4d9f-a670-67fe0b91143c.
|
|
The disk is mounted at /run/media/wes/backup.
|
|
|
|
Will backup /home/.snapshots/1379/snapshot to /run/media/wes/backup/acer-c720/home/1379//snapshot
|
|
At subvol /home/.snapshots/1379/snapshot
|
|
|
|
Will backup //.snapshots/2782/snapshot to /run/media/wes/backup/acer-c720/root/2782//snapshot
|
|
At subvol //.snapshots/2782/snapshot
|
|
|
|
Done!
|
|
|
|
## Contributing
|
|
|
|
Help wanted! Feel free to fork and issue a pull request to add features or
|
|
tackle an open issue.
|