{ "info": { "author": "Omry Yadan", "author_email": "omry@yadan.net", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3" ], "description": "[![PyPI version](https://badge.fury.io/py/snapdump.svg)](https://badge.fury.io/py/snapdump)\n\n# Snapdump\n\nThis tool is primarily intended to be used to backup zfs servers to foreign file systems with the offsite backup use case in mind.\nIt's intended to be ran from outside the ZFS box, and uses passwordless ssh login to perform zfs operations.\n\n## Installation\nSimply pip install, after which you will be able to use snapdump\n```\n$ pip install snapdump\n$ snapdump -v\nsnapdump 1.0.6\n```\nYou will need to start by creating a config file, see [config.sample.yml](snapdump/config.sample.yml) for an example.\n\nin addition, you need password-less ssh root access to your server. See [restricted_shell/README.md](restricted_shell/README.md) for details about improving security.\n\n## Features\n* Incremental snapshot dump and restore\n* Taking zfs snapshots automatically\n* Automatic cleanup of both ZFS znapshots and dumped files\n\nScript is intended to be executed from a cron job, at a high frequency. it will not do anything \nif the correct interval has not passed.\n\n## Commands\n### backup\nbackup will create full or incremental snapshots of each dataset mentioend in the config, and will also perform cleanup\nBy default, backup will also verify the integrity of the dumped snapshot, this can be disabled by using --no-verify\n```\n$ snapdump -c /path-to-config/config.yml backup\nCreating incremental snapshot dump for storage/home@2018_12_14__00_23_58 based on 2018_12_14__00_21_47\nCreating incremental snapshot dump for storage/datasets01@2018_12_14__00_23_58 based on 2018_12_14__00_21_47\n```\n\n### list\nListing all current snapshots per dataset.\n```\nsnapdump -c /path-to-config/config.yml list\nstorage/home:\n\t= storage/home@2018_12_10__19_20_34\n\t+ storage/home@2018_12_14__00_21_47\n\t+ storage/home@2018_12_14__00_23_58\nstorage/datasets01:\n\t= storage/datasets01@2018_12_11__04_47_33\n\t+ storage/datasets01@2018_12_14__00_21_47\n\t+ storage/datasets01@2018_12_14__00_23_58\n```\nEach snapshot is prefixed with = or +, to indicate if it's a full (=) or incremental (+) snapshot.\n\n### restore\nRestore will take a snapshot name and optionally a destination dataset and restore it. it will work correctly for incremental snapshots as well.\nif destination dataset name is not provided, a new dataset with the suffix _restore will be created.\n\n```\n$ snapdump -c /path-to-config/config.yml restore -s storage/datasets01@2018_12_14__00_23_58 \nRestoring snapshot storage/datasets01@2018_12_14__00_23_58 to storage/datasets01_restore\n```\n\n### cleanup\nInitiate the cleanup, this is not normally needed because backup is cleaning up automatically\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/omry/snapdump", "keywords": "zfs snapshot dump restore backup off-site", "license": "", "maintainer": "", "maintainer_email": "", "name": "snapdump", "package_url": "https://pypi.org/project/snapdump/", "platform": "", "project_url": "https://pypi.org/project/snapdump/", "project_urls": { "Homepage": "https://github.com/omry/snapdump" }, "release_url": "https://pypi.org/project/snapdump/1.0.7/", "requires_dist": [ "omegaconf (>=1.3.0)", "setuptools" ], "requires_python": "", "summary": "ZFS incremental snapshot dump and restore tool", "version": "1.0.7" }, "last_serial": 5692801, "releases": { "1.0.0": [ { "comment_text": "", "digests": { "md5": "5a206d45a25000a1617c437ab50e3de4", "sha256": "762ceeab747c39dafcd1328a5179fa43148434586349f3163cbbde55266b25c2" }, "downloads": -1, "filename": "snapdump-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5a206d45a25000a1617c437ab50e3de4", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6831, "upload_time": "2018-12-11T02:32:16", "url": "https://files.pythonhosted.org/packages/02/16/3ff8fd9d0d443147ab21121dd66131f6e1ff542e0f4774e15543430d469c/snapdump-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "04bb2d3a686181996267a22c8ba883f2", "sha256": "2b8062fce65072a6d54cf9806b6bd1a010acb996883bbc1a8102f892c0db25f0" }, "downloads": -1, "filename": "snapdump-1.0.0.tar.gz", "has_sig": false, "md5_digest": "04bb2d3a686181996267a22c8ba883f2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5801, "upload_time": "2018-12-11T02:32:18", "url": "https://files.pythonhosted.org/packages/cd/36/915832fe86c8e03846663619368d7bcdf2323bc71e04f2973f7feb102b64/snapdump-1.0.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "3dbe09be81ee61dcfec517937aaf58e8", "sha256": "bbc4f53647b79bd857c43f30d5b08d42e92dac79d94642b86bdd17f85f3a4e85" }, "downloads": -1, "filename": "snapdump-1.0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3dbe09be81ee61dcfec517937aaf58e8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7154, "upload_time": "2018-12-11T02:50:47", "url": "https://files.pythonhosted.org/packages/c8/2c/a33255b2671cac7e711342a6ef23c34d8c30fbbc615897e4e906bc96f0d4/snapdump-1.0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "99af365bab0ba55f2285aa027e9dd8a5", "sha256": "51f7d6dc13f4bf9e442527f0aec89031f4c9dfd5b408157dba836cf873c8e516" }, "downloads": -1, "filename": "snapdump-1.0.1.tar.gz", "has_sig": false, "md5_digest": "99af365bab0ba55f2285aa027e9dd8a5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5957, "upload_time": "2018-12-11T02:50:49", "url": "https://files.pythonhosted.org/packages/b4/16/5df0dcb438434a3c9174f6d44eb13a9d56637116d2ad234548fabcf23775/snapdump-1.0.1.tar.gz" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "cb0c4d6abc89c320215bced91f0c825c", "sha256": "8d80b678000fccb0dafd94fb2553fe57eeebe1fc8d452b7397273e698191460b" }, "downloads": -1, "filename": "snapdump-1.0.2-py3-none-any.whl", "has_sig": false, "md5_digest": "cb0c4d6abc89c320215bced91f0c825c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7278, "upload_time": "2018-12-11T05:15:40", "url": "https://files.pythonhosted.org/packages/6f/07/dfb5dbbdfc0b8e2530080f4845121457118fb888f91da125db248d86d4b8/snapdump-1.0.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "71b7e2fced7debb8e17da1d887790d80", "sha256": "db77b4b7d913cdd5c1f61c698e9dc4fb5b2844f27bfd867bd9f482c598997223" }, "downloads": -1, "filename": "snapdump-1.0.2.tar.gz", "has_sig": false, "md5_digest": "71b7e2fced7debb8e17da1d887790d80", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6050, "upload_time": "2018-12-11T05:15:41", "url": "https://files.pythonhosted.org/packages/17/31/d167541114433c802f34d8fcd81a3d9c6cdaf83669131cae31a446b34fe6/snapdump-1.0.2.tar.gz" } ], "1.0.3": [ { "comment_text": "", "digests": { "md5": "9e38aed6488734d5021635757ed11f47", "sha256": "05559b7987803c47ce8eaead54aeb50269ff46bc739c6191ee41d7089a76dd34" }, "downloads": -1, "filename": "snapdump-1.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "9e38aed6488734d5021635757ed11f47", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7279, "upload_time": "2018-12-11T20:55:23", "url": "https://files.pythonhosted.org/packages/08/5a/ae2b138dbb762b616c257eca9e9a0cae385efeaaf70ec11cc3b1f2d37c15/snapdump-1.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0c90e1729059bd48aa21a715e0777750", "sha256": "9e55fe280177f5a5f09128052d0aa286be7b168551c6da9334e36c1fe450962a" }, "downloads": -1, "filename": "snapdump-1.0.3.tar.gz", "has_sig": false, "md5_digest": "0c90e1729059bd48aa21a715e0777750", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6087, "upload_time": "2018-12-11T20:55:24", "url": "https://files.pythonhosted.org/packages/bc/92/7a4184c79c939ef3bfd6d500c96ed0af3d63169c20d84c80d3a3ac0e28c4/snapdump-1.0.3.tar.gz" } ], "1.0.4": [ { "comment_text": "", "digests": { "md5": "44ab863b80d3fbf393477775d5cc6758", "sha256": "38a8178ff00eab0feba497ae96019f3d888d849c00c0f9361256f0191256850a" }, "downloads": -1, "filename": "snapdump-1.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "44ab863b80d3fbf393477775d5cc6758", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7560, "upload_time": "2018-12-15T02:10:53", "url": "https://files.pythonhosted.org/packages/9a/53/39371290119b8c29e4d82ca49af1e07b199d4f92ec122f3975bfdf610b5d/snapdump-1.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "dd5c093eb0f6430a9f6a0e72d025089c", "sha256": "83a78cde788931ffed8552fdfeb7c66d7b0ef23311443cdfd5fa0d66e897d2f1" }, "downloads": -1, "filename": "snapdump-1.0.4.tar.gz", "has_sig": false, "md5_digest": "dd5c093eb0f6430a9f6a0e72d025089c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6416, "upload_time": "2018-12-15T02:10:55", "url": "https://files.pythonhosted.org/packages/14/43/17b7dddc8a286564228798c951385b17e32ecf4e620707573c3eea9871dc/snapdump-1.0.4.tar.gz" } ], "1.0.5": [ { "comment_text": "", "digests": { "md5": "5c85c2c00f5a7ec73f8141b41a910c63", "sha256": "2004166984692569073e1e0c5513671918a433c56d70ff76bf6243e7a8daa27e" }, "downloads": -1, "filename": "snapdump-1.0.5-py3-none-any.whl", "has_sig": false, "md5_digest": "5c85c2c00f5a7ec73f8141b41a910c63", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8219, "upload_time": "2018-12-31T22:46:03", "url": "https://files.pythonhosted.org/packages/44/f9/cb1a8a4180bcf36983513474474e08386b10f792a14c6feca05fcba74940/snapdump-1.0.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "295ff85d5fe44fc57d7b0630b9db643f", "sha256": "bbae1ed15932f4d6a8c2b5ad744bdcc0350f059192fe9e94588bf263d916ef3c" }, "downloads": -1, "filename": "snapdump-1.0.5.tar.gz", "has_sig": false, "md5_digest": "295ff85d5fe44fc57d7b0630b9db643f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7150, "upload_time": "2018-12-31T22:46:04", "url": "https://files.pythonhosted.org/packages/6e/f8/a0c154ddf0963eb11b778043813c1318e0b8cbb4d3523d4e1ea433d52887/snapdump-1.0.5.tar.gz" } ], "1.0.6": [ { "comment_text": "", "digests": { "md5": "044941da26827968b221bf7a8d785d6c", "sha256": "c8460f9f64f016b63bd1e2f30d2ced5753cd95b20f4b5f5b4be8e619345a05e4" }, "downloads": -1, "filename": "snapdump-1.0.6-py3-none-any.whl", "has_sig": false, "md5_digest": "044941da26827968b221bf7a8d785d6c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8374, "upload_time": "2019-01-03T19:54:15", "url": "https://files.pythonhosted.org/packages/e9/b8/b59110dd59a1859d462578397bc854bf6c489358557af7182b58d058e761/snapdump-1.0.6-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "56a9e5fdfc3a6db504bbbd4f06bec53c", "sha256": "6673cbc328c6c194ab873c3b1d3ab8bbdb05dc7552fb2b9fed27c32089393900" }, "downloads": -1, "filename": "snapdump-1.0.6.tar.gz", "has_sig": false, "md5_digest": "56a9e5fdfc3a6db504bbbd4f06bec53c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7275, "upload_time": "2019-01-03T19:54:16", "url": "https://files.pythonhosted.org/packages/22/4f/67b2d2280e1377527bd1c595d2bb95ea81b849cfde574eff4f86e2e5eb26/snapdump-1.0.6.tar.gz" } ], "1.0.7": [ { "comment_text": "", "digests": { "md5": "27378c4ddafb75e01e1106f4978bf1a8", "sha256": "cc6bb8cfb0de9edb775f1eeadd8af02b0ab07c33165f4952171260bb6b1c9d20" }, "downloads": -1, "filename": "snapdump-1.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "27378c4ddafb75e01e1106f4978bf1a8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8328, "upload_time": "2019-08-17T21:05:05", "url": "https://files.pythonhosted.org/packages/cd/82/5a7c3c2c3c8053797540510f5e1c970d92e237a711f1f8b906b5e4e16882/snapdump-1.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe73ed0f71b035036ffd177d1de3bd53", "sha256": "1e0f705db1e62664a6225810c85840684f50cf1ccd81d7588849fb565063d916" }, "downloads": -1, "filename": "snapdump-1.0.7.tar.gz", "has_sig": false, "md5_digest": "fe73ed0f71b035036ffd177d1de3bd53", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7134, "upload_time": "2019-08-17T21:05:07", "url": "https://files.pythonhosted.org/packages/09/a7/86ec44c4b18963a02e6751c5e5f3fd222e2c855f9a4f0d715df7c316604c/snapdump-1.0.7.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "27378c4ddafb75e01e1106f4978bf1a8", "sha256": "cc6bb8cfb0de9edb775f1eeadd8af02b0ab07c33165f4952171260bb6b1c9d20" }, "downloads": -1, "filename": "snapdump-1.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "27378c4ddafb75e01e1106f4978bf1a8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8328, "upload_time": "2019-08-17T21:05:05", "url": "https://files.pythonhosted.org/packages/cd/82/5a7c3c2c3c8053797540510f5e1c970d92e237a711f1f8b906b5e4e16882/snapdump-1.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fe73ed0f71b035036ffd177d1de3bd53", "sha256": "1e0f705db1e62664a6225810c85840684f50cf1ccd81d7588849fb565063d916" }, "downloads": -1, "filename": "snapdump-1.0.7.tar.gz", "has_sig": false, "md5_digest": "fe73ed0f71b035036ffd177d1de3bd53", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7134, "upload_time": "2019-08-17T21:05:07", "url": "https://files.pythonhosted.org/packages/09/a7/86ec44c4b18963a02e6751c5e5f3fd222e2c855f9a4f0d715df7c316604c/snapdump-1.0.7.tar.gz" } ] }