{"id":17766483,"url":"https://github.com/pythonnut/virtualbox-remote-snapshots","last_synced_at":"2026-01-20T19:32:14.789Z","repository":{"id":82963781,"uuid":"77956403","full_name":"PythonNut/virtualbox-remote-snapshots","owner":"PythonNut","description":":clock4: A snapshot system for VirtualBox which supports remote storage","archived":false,"fork":false,"pushed_at":"2017-02-08T22:18:16.000Z","size":28,"stargazers_count":3,"open_issues_count":12,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-07T11:38:35.437Z","etag":null,"topics":["borgbackup","snapshot","virtual-machine","virtualbox"],"latest_commit_sha":null,"homepage":"","language":"PowerShell","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/PythonNut.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,"publiccode":null,"codemeta":null}},"created_at":"2017-01-03T21:49:57.000Z","updated_at":"2022-06-12T17:48:20.000Z","dependencies_parsed_at":null,"dependency_job_id":"91da7964-e88d-42ac-ace6-c7befba6996f","html_url":"https://github.com/PythonNut/virtualbox-remote-snapshots","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/PythonNut/virtualbox-remote-snapshots","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PythonNut%2Fvirtualbox-remote-snapshots","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PythonNut%2Fvirtualbox-remote-snapshots/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PythonNut%2Fvirtualbox-remote-snapshots/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PythonNut%2Fvirtualbox-remote-snapshots/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PythonNut","download_url":"https://codeload.github.com/PythonNut/virtualbox-remote-snapshots/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PythonNut%2Fvirtualbox-remote-snapshots/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28610608,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-20T18:56:40.769Z","status":"ssl_error","status_checked_at":"2026-01-20T18:54:26.653Z","response_time":117,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["borgbackup","snapshot","virtual-machine","virtualbox"],"created_at":"2024-10-26T20:30:34.641Z","updated_at":"2026-01-20T19:32:14.780Z","avatar_url":"https://github.com/PythonNut.png","language":"PowerShell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# VirtualBox Remote Snapshots\n\nAn attempt at creating a new external snapshot system for VirtualBox, leveraging the following existing projects:\n\n* [`borg` backup](https://github.com/borgbackup/borg)\n* [`rsync`](https://rsync.samba.org/)\n\n## Motivation\n\nThe native VirtualBox snapshot system has the following properties:\n\n#### 1. Snapshot space requirements\n\nFor a quickly changing virtual machine, the required space for virtual machine snapshots in VirtualBox can be quite large. \nThis is at odds with the small amounts of available solid state storage on inexpensive laptops.\nTo accommodate these storage needs, snapshots are kept for short periods of time, so they won't have time to increase in size, and are taken infrequently, leading to poor snapshot coverage.\n\nIn this system, snapshots are kept on inexpensive bulk storage on a separate machine, which can host an order of magnitude more snapshots without consuming precious local resources.\n\n#### 2. Snapshot crash consistency\n\nIf a VirtualBox host goes down during a snapshot operation, the guest's disk may be left in an inconsistent state, rendering it unusable.\n\nIn this system, snapshots operations are incremental and resumable. \nIf the host goes down, a snapshot restore can simply continue where it left off.\n\n#### 3. Snapshot performance implications\n\nThe CoW magic that makes VirtualBox snapshots effectively instantaneous incurs a performance penalty on future disk I/O in the guest. \nThe performance penalty increases with the number of snapshots.\n\nIn this system, there is generally no runtime penalty as long as a snapshot is not _currently being taken_. \nIf no snapshot is being taken, this snapshot system does not even need to be running. \n\n## Architecture \n\nSnapshots are stored remotely in a `borg` repository. \nSince `borg` only transmits changed blocks which are then compressed, a full snapshot can often be taken in under a minute, even over a slow WiFi connection. \n\nSnapshots can be taken while the guest is online. \nTransient online VirtualBox snapshots ensure that the entire running state of the VM can be restored.\n\nSnapshot restores are incremental and resumable using a combination of `rsync` and `borg mount`. \nSince only modified blocks are transmitted, a recent snapshot can often be restored in under a minute, even over a slow WiFi connection.\n\nSince `borg` is a forever-incremental system, snapshot restores run in constant time with respect to the total number of snapshots.\n\nSnapshots can be pruned with no interaction from the host at all, online or offline.\n\n# Disclaimer \n\nThis system is still in a very early state. Lots of important functionality is missing, and many design decisions still need to be made. The code is TBH pretty horrifying (maybe because it's in PowerShell). However, the system is already battle-tested, and will see continuous use from me over the next few years.\n\nIt might also be a good idea to configure the VM to expose a portable CPU using `VBoxManage modifyvm \u003cVMName\u003e --cpuid-portability-level 3` if snapshots are restored to a different machine.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpythonnut%2Fvirtualbox-remote-snapshots","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpythonnut%2Fvirtualbox-remote-snapshots","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpythonnut%2Fvirtualbox-remote-snapshots/lists"}