Skip to main content

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 or RemoteConfig object will fail if source_dir or destination_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 symlink destination_dir/latest pointing to the latest backup.
    • The contents of source_dir are compared to destination_dir/latest during the incremental backup and the changes are written to destination_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 the destination_dir/latest symlink to continue incrementally.

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pisync-0.0.9.tar.gz (22.3 kB view details)

Uploaded Source

Built Distribution

pisync-0.0.9-py3-none-any.whl (20.6 kB view details)

Uploaded Python 3

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

Hashes for pisync-0.0.9.tar.gz
Algorithm Hash digest
SHA256 de1a21df5efd43d3fce2aced6b621dbe99b7c0631ff9f01247aacdf52bbb4d36
MD5 6ed657a352a3e7bc9ef41cd602c9bc63
BLAKE2b-256 aaef8810edd32c2b814d82c4a62ff7b3ec65252882519a949dd23ff71c8fb307

See more details on using hashes here.

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

Hashes for pisync-0.0.9-py3-none-any.whl
Algorithm Hash digest
SHA256 50cfcaaeb9effef8cd3f1b038d8d79b6839f13dcec31b8abaa3b3a01cd88e76f
MD5 fa17eed6524e3137697e75792e3a9c8a
BLAKE2b-256 1a65f47a005a42a75930d077fee75955b68a6e67b16d3cfc748f885f38a10837

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page