{ "info": { "author": "Sean Hammond", "author_email": "snapshotter@seanh.cc", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "License :: OSI Approved :: GNU General Public License v3 (GPLv3)", "Programming Language :: Python :: 2.7" ], "description": "[![Build Status](https://travis-ci.org/seanh/snapshotter.svg)](https://travis-ci.org/seanh/snapshotter)\n[![Coverage Status](https://img.shields.io/coveralls/seanh/snapshotter.svg)](https://coveralls.io/r/seanh/snapshotter)\n\nSnapshotter\n===========\n\nSnapshotter provides a simple, configuration-free `snapshotter SRC DEST`\ncommand that makes incremental, snapshot backups of directories. It uses rsync\nto do the actual copying and has high test coverage.\n\n\nRequirements\n------------\n\n[rsync](https://rsync.samba.org/) and [Python](https://www.python.org/) 2.7,\n3.2, 3.3, 3.4 or 3.5.\n\n\nInstallation\n------------\n\n sudo pip install snapshotter\n\n\n### Upgrading\n\nTo upgrade to a newer version of Snapshotter do:\n\n```bash\nsudo pip install --upgrade snapshotter\n```\n\nTo see what version of Snapshotter you currently have installed do:\n\n```bash\npip freeze | grep snapshotter\n```\n\nUsage\n-----\n\nTo backup a local source directory to a local target directory:\n\n snapshotter /path/to/source/dir/to/backup /path/to/backup/destination\n\nTo backup a remote directory to a local directory:\n\n snapshotter you@yourdomain.org:/path/to/source /path/to/backup/destination\n\nTo backup a local directory to a remote directory:\n\n snapshotter /path/to/source you@yourdomain.org:/path/to/snapshots\n\nSee `man rsync` for complete documentation of the syntax for specifying local\nand remote paths.\n\nYou don't need to worry about whether local or remote source or destination\npaths have a trailing `/` or not - Snapshotter will do the right thing.\n\nEach time you want to make another backup just run the same snapshotter command\nagain. Snapshotter will create snapshots like this in the destination\ndirectory:\n\n /path/to/backup/destination/\n latest.snapshot/\n 2011-04-03T23_55_37.snapshot/\n 2011-03-03T23_36_50.snapshot/\n 2011-02-03T23_35_13.snapshot/\n\n`latest.snapshot` is a symlink to the most recent snapshot directory, in this\ncase `2011-04-03T23_55_37.snapshot`.\n\nEach snapshot directory contains a complete copy of the source directory, but\nany files that had not changed since the previous snapshot are *hard linked* to\ntheir corresponding files in the previous snapshot. This means that:\n\n* The amount of new disk space used by each new snapshot is only equal to the\n size of the files that have changed or are new since the last snapshot.\n\n* The amount of data transferred to make each new snapshot is only equal to the\n size of the files that have changed or are new since the last snapshot,\n compressed.\n\n* Old snapshots can be deleted without harming new snapshots at all -\n each snapshot is an independent complete copy.\n\n (But _don't modify files in snapshots_, not even their metadata such as permissions,\n as this will also modify the file in any other snapshots that have hardlinks to it.)\n \nBackups don't cross filesystem boundaries. For each mount-point encountered in\nthe source directory there'll be just an empty directory in the snapshot.\nThis means you can backup your entire filesystem to an external drive with a\ncommand like `sudo snapshotter / /media/SNAPSHOTS` and it won't try to\nrecursively backup `/media/SNAPSHOTS` into `/media/SNAPSHOTS`.\n\nIf symlinks are encountered in the source directory the symlinks themselves are\ncopied to the snapshot, not the files or directories that the symlinks refer\nto.\n\n\n### Recovering Files from Snapshots\n\nTo restore selected files just copy them back from a snapshot directory to the\nlive system. To restore an entire snapshot just copy the entire snapshot\ndirectory back to the live system.\n\n\n### Resuming Backups\n\nIf a `snapshotter` command is interrupted for any reason (e.g. you `Ctrl-c` it)\njust run the same command again to resume making the snapshot where you left\noff.\n\nSnapshots are written to an `incomplete.snapshot` directory in the destination\ndirectory first and then moved to a `YYYY-MM-DDTHH_MM_SS.snapshot` directory\nwhen complete. If a snapshot is interrupted the `incomplete.snapshot` directory\nwill be left behind and used to resume the snapshot if you run it again.\n\n\n### Suspend After Backup\n\nYou can put your computer to sleep automatically after a backup finishes simply\nby chaining two commands in a shell:\n\n snapshotter [OPTIONS] ; suspend\n \nWhere `suspend` is a script on your `PATH` that suspends your computer without\nrequiring sudo powers. On Ubuntu 14.04 this works for me:\n\n #!/bin/sh -e\n dbus-send --system --print-reply --dest=\"org.freedesktop.UPower\" /org/freedesktop/UPower org.freedesktop.UPower.Suspend\n\n\nOptions\n-------\n\nTo do a dry-run (just print out what would be done, but don't actually copy any\nfiles) do:\n\n snapshotter --dry-run SRC DEST\n\nSnapshotter automatically deletes your oldest snapshots when necessary to make\nspace for a new snapshot. By default it will always keep at least 3 snapshots.\nTo change this number use the `--min-snapshots` argument:\n\n snapshotter --min-snapshots 10 SRC DEST\n\nYou can pass any rsync options to snapshotter and it will pass them on to\nrsync. For example:\n\n snapshotter --exclude='*~' SRC DEST\n\nSee `man rsync` for all the available options.\n\nFor complete documentation of Snapshotter's command-line interface run:\n\n snapshotter -h\n\n* * *\n\nSnapshotter is inspired by Michael Jakl's\n\"Time Machine for every Unix out there\":\n\n \n", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/seanh/snapshotter", "keywords": "", "license": "GPLv3", "maintainer": null, "maintainer_email": null, "name": "snapshotter", "package_url": "https://pypi.org/project/snapshotter/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/snapshotter/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/seanh/snapshotter" }, "release_url": "https://pypi.org/project/snapshotter/1.0.4/", "requires_dist": null, "requires_python": null, "summary": "Very easy incremental snapshot backups using rsync", "version": "1.0.4" }, "last_serial": 2016963, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "f8c0b6e58c5a1f7be505b01341ddbaa4", "sha256": "8929166d731056c43c2cc85a0f4e609e634f08b4c9856b67deb4ddf1ad8a15b1" }, "downloads": -1, "filename": "snapshotter-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f8c0b6e58c5a1f7be505b01341ddbaa4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11727, "upload_time": "2015-03-06T14:34:39", "url": "https://files.pythonhosted.org/packages/f5/dc/1e682283c073d95b1c1f089c644e0c39b9b601595b018defec465af8d351/snapshotter-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "e0d0c0c5672dbf6cb75f9f224513ca5a", "sha256": "92e80aa86f88d1b79b3335daafeb9445864d01b684a473d216abb2d82f928b2a" }, "downloads": -1, "filename": "snapshotter-1.0.1.tar.gz", "has_sig": false, "md5_digest": "e0d0c0c5672dbf6cb75f9f224513ca5a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12319, "upload_time": "2015-04-07T00:01:58", "url": "https://files.pythonhosted.org/packages/c3/34/c7ffd19f9feed6836d31237e8c6e15a44739ecf74f019d9a6861005d407c/snapshotter-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "ad58195c6ea37e0662e4b1c5c4b744da", "sha256": "96c2fd57f3545996ea274261ec92811fbdca78a8fc2fc28989a1988a980d1bc6" }, "downloads": -1, "filename": "snapshotter-1.0.2.tar.gz", "has_sig": false, "md5_digest": "ad58195c6ea37e0662e4b1c5c4b744da", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12359, "upload_time": "2015-10-06T20:03:54", "url": "https://files.pythonhosted.org/packages/6f/fa/2fbd6237de7b0aedb9a48cf5e1a2b9f7e264363755b242ba72dbd868a277/snapshotter-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "ab585eab802d454dbf5c38550164e273", "sha256": "6cf6b17b98b97433dc04a26780e7cb8d5c56bc2ec92561b43589b19cec882395" }, "downloads": -1, "filename": "snapshotter-1.0.3.tar.gz", "has_sig": false, "md5_digest": "ab585eab802d454dbf5c38550164e273", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 15436, "upload_time": "2016-03-13T14:32:32", "url": "https://files.pythonhosted.org/packages/d7/68/0f5856bb6be697266efbdefa21f7e7e98d911473722df801f8427de76c4e/snapshotter-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "092cc40929cee9620a8bcfa94d9972af", "sha256": "af431a6bd8630504d414d700a87e2ba6503c567ef59147a5759faa6e09e4fb95" }, "downloads": -1, "filename": "snapshotter-1.0.4.tar.gz", "has_sig": false, "md5_digest": "092cc40929cee9620a8bcfa94d9972af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16212, "upload_time": "2016-03-20T15:19:57", "url": "https://files.pythonhosted.org/packages/80/01/b7b6eca54c81fe385e65635b0ff8bfa9cf7fecf8264043b82970751b8d04/snapshotter-1.0.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "092cc40929cee9620a8bcfa94d9972af", "sha256": "af431a6bd8630504d414d700a87e2ba6503c567ef59147a5759faa6e09e4fb95" }, "downloads": -1, "filename": "snapshotter-1.0.4.tar.gz", "has_sig": false, "md5_digest": "092cc40929cee9620a8bcfa94d9972af", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16212, "upload_time": "2016-03-20T15:19:57", "url": "https://files.pythonhosted.org/packages/80/01/b7b6eca54c81fe385e65635b0ff8bfa9cf7fecf8264043b82970751b8d04/snapshotter-1.0.4.tar.gz" } ] }