{"id":17326217,"url":"https://github.com/edu4rdshl/rusnapshot","last_synced_at":"2025-04-14T17:10:20.866Z","repository":{"id":115952604,"uuid":"357468820","full_name":"Edu4rdSHL/rusnapshot","owner":"Edu4rdSHL","description":"Simple and handy btrfs snapshoting tool. Supports unattended snapshots, tracking, restoring, automatic cleanup and more. Backed with SQLite.","archived":false,"fork":false,"pushed_at":"2024-02-07T06:05:46.000Z","size":140,"stargazers_count":35,"open_issues_count":0,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-28T05:41:21.684Z","etag":null,"topics":["btrfs","btrfs-snapshots","btrfs-subvolume","linux","linux-backup","snapshot-backup","snapshots"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Edu4rdSHL.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2021-04-13T07:52:24.000Z","updated_at":"2025-02-01T18:57:54.000Z","dependencies_parsed_at":"2023-08-31T02:50:13.877Z","dependency_job_id":null,"html_url":"https://github.com/Edu4rdSHL/rusnapshot","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Edu4rdSHL%2Frusnapshot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Edu4rdSHL%2Frusnapshot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Edu4rdSHL%2Frusnapshot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Edu4rdSHL%2Frusnapshot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Edu4rdSHL","download_url":"https://codeload.github.com/Edu4rdSHL/rusnapshot/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248923764,"owners_count":21183954,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["btrfs","btrfs-snapshots","btrfs-subvolume","linux","linux-backup","snapshot-backup","snapshots"],"created_at":"2024-10-15T14:15:20.610Z","updated_at":"2025-04-14T17:10:20.832Z","avatar_url":"https://github.com/Edu4rdSHL.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Description\nSimple and handy btrfs snapshoting tool. Supports unattended snapshots, tracking, restoring, automatic cleanup and more. Backed with SQLite.\n\n# Documentation\n\nSee the [docs folder](https://github.com/Edu4rdSHL/rusnapshot/blob/master/docs/).\n\n# Features\n\n- Allows you to specify the origin and destination of snapshots at will of the user.\n- Track snapshots using SQLite as backend database.\n- Easy setup using small templates instead of confusing long files.\n- Ability to create snapshots of the volumes you want simply by using different configuration templates.\n- Ability to create read-only or read-write snapshots.\n- Ability to use the same SQLite database for everything.\n- Ability to specify the prefix of the name for the snapshots for better identification.\n- Ability to specify a `kind` identifier to differentiate them in the database. Useful if you plan to have hourly, weekly, monthly or more \"kind\" of snapshots of the same subvolume(s).\n- Ability to specify the maximum number of snapshots to keep for automatic cleanup.\n- Supports restoration of snapshots in the original directory or a specific one.\n- Supports machine name identification for better tracking when using the same database in multiple machines.\n- Nice CLI output to see the status and details of snapshots.\n\n# Known limitations\n\nDue to SQLite limitations to handle concurrent database operations, we need to make use of SQLite's [busy_timeout](https://www.sqlite.org/c3ref/busy_timeout.html), which was initially implemented in [ce44bf6](https://github.com/Edu4rdSHL/rusnapshot/commit/ce44bf679c73d221811ac775561916a8c5761243). Without it you will get the error: `Error: database is locked (code 5)` if you try to make concurrent snapshots exactly at the same time. The default timeout is 5 seconds which is more than enough time so that no problem occurs even in the most demanding scenarios.\n\nIn summary, `busy_timeout` is the maximum time that SQLite will retry the failed transaction. Considering that Rusnapshot's database operations are small and shouldn't take long, 5 seconds is a decent time. If you continue to get the mentioned error, try increasing `--timeout`, remember that the value must be in milliseconds.\n\n# Screenshots\n\n## List snapshots\n\n![2021-04-23_11-11](https://user-images.githubusercontent.com/32582878/115900337-59bf1a00-a44f-11eb-8834-cbd52bbe9a6b.png)\n\n## Create and restore snapshot\n\n![2021-04-23_11-15](https://user-images.githubusercontent.com/32582878/115900363-63488200-a44f-11eb-8f62-9796d782c786.png)\n\n## Delete snapshot\n\n![2021-04-23_11-17](https://user-images.githubusercontent.com/32582878/115900425-79564280-a44f-11eb-960d-1a2a95a95f57.png)\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedu4rdshl%2Frusnapshot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fedu4rdshl%2Frusnapshot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fedu4rdshl%2Frusnapshot/lists"}