Before this commit, since restic backup exits with status 3 if it
cannot read one or more files, the LVM snapshot wasn't being cleaned
up.
Now, specially handle the 3 exit status; also, unequivocally perform
the LVM cleanup when finished.
This commit causes an LVM backup target of / to be treated as /rootfs
instead.
Note that this will conflict with a path called /rootfs if we *do* try
to back that up.
Also, while we're at it, drop the -m option from mount. Not all
systems have this option.
This commit implements the needs of #75[^1]: it allows for the
creation of atomic backups when the backup target is a file/dir whose
fs rests on LVM. This ensures the snapshot will be atomic.
By using a mount namespace, the LVM snapshot can be done in the same
directory -- so existing LVM-based applications of ansible_role_restic
can be migrated to this implementation without any discontinuity in
what appears to be backed up.
This combination of LVM's snapshotting layer and mount namespaces
comes with some caveats:
- you cannot backup / due to namespace issues
- subdirs with a separate fs won't be correctly detected
- not all filesystems are happy about LVM snapshots -- btrfs, e.g.
- LVM snapshots come with a performance penalty when active
- fstrim and LVM snapshots don't like each other whatsoever
[^1]: https://github.com/roles-ansible/ansible_role_restic/issues/75
--
Changes in v2:
- Use `findmnt -v` to find snapshot when cleaning up
- Check for _snap before `lvremove -y`
Signed-off-by: Martin Kennedy <hurricos@gmail.com>
* Added support for basic logging of backup result
* Added changelog entry
* Added full output logging
* Changed logging date format to include the time as well as the date
* Fixed error on backup script creation if enable_logging was not specified for a backup job
* Improved backup script by removing duplicate code
* Added variable restic_log_dir to the readme