Minimal incremental backup script using rsync
Project description
pisync
is a simple library to aid in writing incremental backup scripts to
local or remote machines. The only dependencies are rsync,
python >= v3.6, fabric, and ssh keys copied over to a unix
machine if doing a remote backup. Note: no dependencies are required on the
remote machine.
Installation
pip install pisync
Example Usage
from pisync import LocalConfig, RemoteConfig, backup
local_docs = LocalConfig(
source_dir="/home/ethan/Documents", # local machine
destination_dir="/tmp/backup_test", # local machine
exclude_file_patterns=[
"**/node_modules",
"junk/",
],
log_file="/tmp/backup-logs/backups.log" # local machine
)
remote_docs = RemoteConfig(
user_at_hostname="ethan@hydrogen.local", # remote machine
source_dir="/home/ethan/Documents", # local machine
destination_dir="/tmp/backup_test", # remote machine
exclude_file_patterns=[
"**/node_modules",
"junk/",
],
log_file="/tmp/backup-logs/backups.log" # local machine
)
backup(local_docs)
backup(remote_docs)
Also see an example config for how I backup my home server both locally and to an offsite raspberry pi.
Notes
Safety
- Creating a
LocalConfig
orRemoteConfig
object will fail ifsource_dir
ordestination_dir
do not exist or are not directories. - If
destination_dir
is not empty, it is assumed that a previous backup exists.- The backup will not run if
destination_dir
is not empty and there is not a symlinkdestination_dir/latest
pointing to the latest backup. - The contents of
source_dir
are compared todestination_dir/latest
during the incremental backup and the changes are written todestination_dir/<current date/time>
. - Therefore, you need to ensure that
destination_dir
is empty which will start a fresh complete backup, or you can manually create thedestination_dir/latest
symlink to continue incrementally.
- The backup will not run if
Logging
- By default, a default log file will be created (if it does not exists) and
appended to at
~/.local/share/backup/rsync-backups.log
. - NOTE: If you run your script as
sudo
, the home directory of the root user is probably/root
rather than your~/
directory. - If you want the log file to still go the your home directory when you run as
root, use this
sudo -E python3 ./run_backups.py
- You can also specify the log file location in your config.
- Hard coding the log file path solves some of the quirks that you can run into when using a cron job.
Running tests
The unit/integration tests require password-less login to localhost as the "remote" machine.
ssh-copy-id $USER@localhost
git clone https://github.com/erietz/pisync
cd pisync
pip install -e .
make test
Project details
Release history Release notifications | RSS feed
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
File details
Details for the file pisync-0.0.9.tar.gz
.
File metadata
- Download URL: pisync-0.0.9.tar.gz
- Upload date:
- Size: 22.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.27.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | de1a21df5efd43d3fce2aced6b621dbe99b7c0631ff9f01247aacdf52bbb4d36 |
|
MD5 | 6ed657a352a3e7bc9ef41cd602c9bc63 |
|
BLAKE2b-256 | aaef8810edd32c2b814d82c4a62ff7b3ec65252882519a949dd23ff71c8fb307 |
File details
Details for the file pisync-0.0.9-py3-none-any.whl
.
File metadata
- Download URL: pisync-0.0.9-py3-none-any.whl
- Upload date:
- Size: 20.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: python-httpx/0.27.0
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 50cfcaaeb9effef8cd3f1b038d8d79b6839f13dcec31b8abaa3b3a01cd88e76f |
|
MD5 | fa17eed6524e3137697e75792e3a9c8a |
|
BLAKE2b-256 | 1a65f47a005a42a75930d077fee75955b68a6e67b16d3cfc748f885f38a10837 |