{"action":"created","issue":{"url":"https://api.github.com/repos/borgbackup/borg/issues/729","repository_url":"https://api.github.com/repos/borgbackup/borg","labels_url":"https://api.github.com/repos/borgbackup/borg/issues/729/labels{/name}","comments_url":"https://api.github.com/repos/borgbackup/borg/issues/729/comments","events_url":"https://api.github.com/repos/borgbackup/borg/issues/729/events","html_url":"https://github.com/borgbackup/borg/issues/729","id":139796208,"number":729,"title":"Show which distinct versions of a file exist","user":{"login":"bwurst","id":10293974,"avatar_url":"https://avatars.githubusercontent.com/u/10293974?v=3","gravatar_id":"","url":"https://api.github.com/users/bwurst","html_url":"https://github.com/bwurst","followers_url":"https://api.github.com/users/bwurst/followers","following_url":"https://api.github.com/users/bwurst/following{/other_user}","gists_url":"https://api.github.com/users/bwurst/gists{/gist_id}","starred_url":"https://api.github.com/users/bwurst/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/bwurst/subscriptions","organizations_url":"https://api.github.com/users/bwurst/orgs","repos_url":"https://api.github.com/users/bwurst/repos","events_url":"https://api.github.com/users/bwurst/events{/privacy}","received_events_url":"https://api.github.com/users/bwurst/received_events","type":"User","site_admin":false},"labels":[],"state":"open","locked":false,"assignee":{"login":"ThomasWaldmann","id":356103,"avatar_url":"https://avatars.githubusercontent.com/u/356103?v=3","gravatar_id":"","url":"https://api.github.com/users/ThomasWaldmann","html_url":"https://github.com/ThomasWaldmann","followers_url":"https://api.github.com/users/ThomasWaldmann/followers","following_url":"https://api.github.com/users/ThomasWaldmann/following{/other_user}","gists_url":"https://api.github.com/users/ThomasWaldmann/gists{/gist_id}","starred_url":"https://api.github.com/users/ThomasWaldmann/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ThomasWaldmann/subscriptions","organizations_url":"https://api.github.com/users/ThomasWaldmann/orgs","repos_url":"https://api.github.com/users/ThomasWaldmann/repos","events_url":"https://api.github.com/users/ThomasWaldmann/events{/privacy}","received_events_url":"https://api.github.com/users/ThomasWaldmann/received_events","type":"User","site_admin":false},"milestone":null,"comments":26,"created_at":"2016-03-10T06:08:31Z","updated_at":"2016-06-04T14:02:21Z","closed_at":null,"body":"We do backup with attic (as attic is frozen by now, we think about switching to borg) and there's one thing that really bugs me. I cannot see which distinct versions of a specific file exists. I can mount and extract a daily snapshot and the file is there but I cannot see if this file is the same as the day before.\r\n\r\nWe operate rdiff-backup in parallel mostly because of this feature. It's really useful if a web app has been hacked for example. Normally, files don't change too much, if some files are changed when no upgrade has been done, we pay stronger attention to this. For this to work, we need to know which file has been changed in which snapshot or, other approach, which versions of a file really exists.\r\n\r\nDoes borg, internally, know this? Is there some kind of file checksum list that can be used for this? I'd do some coding if the data structure does provide this kind of information but I did not find it by now..."},"comment":{"url":"https://api.github.com/repos/borgbackup/borg/issues/comments/223757272","html_url":"https://github.com/borgbackup/borg/issues/729#issuecomment-223757272","issue_url":"https://api.github.com/repos/borgbackup/borg/issues/729","id":223757272,"user":{"login":"anarcat","id":796623,"avatar_url":"https://avatars.githubusercontent.com/u/796623?v=3","gravatar_id":"","url":"https://api.github.com/users/anarcat","html_url":"https://github.com/anarcat","followers_url":"https://api.github.com/users/anarcat/followers","following_url":"https://api.github.com/users/anarcat/following{/other_user}","gists_url":"https://api.github.com/users/anarcat/gists{/gist_id}","starred_url":"https://api.github.com/users/anarcat/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/anarcat/subscriptions","organizations_url":"https://api.github.com/users/anarcat/orgs","repos_url":"https://api.github.com/users/anarcat/repos","events_url":"https://api.github.com/users/anarcat/events{/privacy}","received_events_url":"https://api.github.com/users/anarcat/received_events","type":"User","site_admin":false},"created_at":"2016-06-04T14:02:21Z","updated_at":"2016-06-04T14:02:21Z","body":"I looked a bit more into this: there are several versionned filesystems out there [according to wikipedia](https://en.wikipedia.org/wiki/Versioning_file_system), the most proeminent being Git, which doesn't quite apply to our use case, obviously, unless we want to implement a git compatibility layer on top of borg, which could be interesting, but there's `bup` that already does that, somewhat.\r\n\r\nThere's also [wayback](http://wayback.sourceforge.net/) which seems to be abandoned and doesn't explicitly state on their homepage how previous versions are accessed.\r\n\r\nThen there's the more recent [fuse-copyfs](https://github.com/cognusion/fuse-copyfs) that creates new copies of files on write, and keeps history. The way they implement version discovery is with a special tool:\r\n\r\n```\r\ncpy-fs $ copyfs-fversion somedir/file-1\r\nFile file-1 ('*' is active) :\r\n  v1.0  : -rw-r--r--  widan    users             3 Fri Dec 10 14:21:41 2004\r\n  v2.0  : -rw-r--r--  widan    users             3 Fri Dec 10 14:21:43 2004 [*]\r\n  v3.0  : -rw-r--r--  widan    users             3 Fri Dec 10 14:21:45 2004\r\n```\r\n\r\nThis seems like an interesting approach to me: the filesystem could look perfectly normal, but then borg commands could inspect history of a given file (say `borg list-versions` or simply overloading `borg list`). `borg diff` could also be extended to do the right thing with specific version markers (e.g. `file@archive`).\r\n\r\nThis could be implemented on top of the normal fuse mount, without modifying the file layout. For a more hands-on direct approach, the multiple files per directory approach of #1129 could still be implemented as a toggle..."}}
{"actor":{"display_login":"anarcat"}}