Yet another rsync incremental backup utility
Project description
Yet another rsync based incremental backup utility.
Purpose
An utility to maintain incremental backups in differnet directories.
The backups in each directory will contain entire image, but the incremental nature comes from the fact that unchanged files will be hard linked sharing the same space across backups.
Quick Start
# Install.
sudo pip3 install yaribak
# Make a directory for backups.
mkdir -p /path/to/abc_backups
# Create a new backup in a subdir of destination.
# If run again, will hard link unchanged files from previous backups.
yaribak /path/to/abc /path/to/abc_backups
Setup and Usage
Installing
Run the following -
sudo pip3 install yaribak
You can leave out the sudo in most distributions, or if you don't want to
backup with super-user privileges.
Usage
yaribak --help
yaribak \
--source /path/to/source \
--backup-path /path/to/backups
# Optional args (run with --help to view description) -
# --dryrun
# --verbose
# --only-if-changed
# --max-to-keep=3
# --exclude source_subdir1 --exclude source_subdir2 ...
Note: Care must be taken to use different backup directories for different source directories.
Example Usage
Maintain backups of the home directory -
# Create the backup directory.
mkdir -p /path/to/homdir_backups
# Call this every time you want to backup, or put it in cron.
# Past backups will be kept.
yaribak \
--source ~ \
--backup-path /path/to/homedir_backups \
--verbose \
--exclude .cache
The following structure will be generated in the backup directory (for this example, after 3 calls) -
$ ls path/to/homedir_backups
_backup_20220306_232441
_backup_20220312_080749
_backup_20220314_110741
Each directory will have a full copy of the source.
Yaribak features
Conserving Space
The primary reason to use this over a simple cp -r is that it saves space.
Any file that remains unchanged will be hard linked, effectively resulting in very little space consumption for multiple invocation if the source remains largely unchanged.
$ # Size of source directory.
$ du -sh ~
6.5G /home/user1
$ # Say following backups were created by multiple invocations -
$ ls path/to/homedir_backups
_backup_20220314_110741
_backup_20220314_110815
_backup_20220314_110903
$ # Assuming multiple backups were created with no change in source,
$ # total size of backup will not increase (by much).
$ du -h /path/to/homedir_backups
6.5G /path/to/homedir_backups
Fault Tolerance
If a backup is stopped abruptly in the middle, yaribak will recover next time you run it.
Testing
From the package root, run -
./runtests.sh
Alternatives
Comparison with Timeshift
Timeshift is an excellent utility to do one thing: backing up system.
It however cannot be used to backup any other directory, or to back up in user-selected destination.
This is an alternative to allow more control, but without conveniences like a GUI and out-of-the-box automated backups.
FAQ
How do I set up periodic backups?
You will need to add the backup command to cron. There are many excellent tutorials, for example this one.
Does it create hard links to original files?
No, even if they are on the same filesystem, backups will never be hard linked to source by design. Creating hard link to original files will result in the backups being modified if the original file is modified - that's something we do not want.
Can I use the same destination for different sources?
Using the same destination for different sources will result in the algorithm not evaluating unchanged files correctly across invocations. So it is strongly discouraged to use the same directory for different sources. Instead, assign different destination directories for different sources.
How do I restore?
You will need to manually copy all files from any of the backups to the source directory.
This can be done either by cp -ar -
# Save the existing files.
mv /path/to/source /path/to/source_old
# Restore.
cp -ar /path/to/backups/ysnap_20220314_110903/payload /path/to/source
Or using rsync -
# Warning: Existing files will be irrevokably modified or deleted.
rsync -aAXHv --delete \
/path/to/backups/ysnap_20220314_110903/payload \
/path/to/source
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file yaribak-0.0.5.tar.gz.
File metadata
- Download URL: yaribak-0.0.5.tar.gz
- Upload date:
- Size: 12.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.8.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4fbf596551f5e0de48819e40e4359cf185c210e646a296a5b4c7fff1f727aaf9
|
|
| MD5 |
db59eaf09a7ebb3753c0b84b278f4bdf
|
|
| BLAKE2b-256 |
a953d1492155a46cc0e2a6884d5b1adf24dc1ab23202ab425e5aba9d8fd5053b
|
File details
Details for the file yaribak-0.0.5-py3-none-any.whl.
File metadata
- Download URL: yaribak-0.0.5-py3-none-any.whl
- Upload date:
- Size: 14.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/34.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.63.0 importlib-metadata/4.8.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.10.2
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e8299829df317c930e57e25d8c970eba3e18f375a5b056f056d7ecdbef6cd62d
|
|
| MD5 |
68fa6654365146596f092e71e77493fc
|
|
| BLAKE2b-256 |
a683bc8fd33159420934d9564a2b666685006bdea31f1d539e948a636329705e
|