Hello,
I'd like to announce my PoC for incremental file-based backup for Qubes VMs. It 
is not a completely new backup system, it just wires together some existing 
software with Qubes principles to provide convenient and secure way to backup 
many VMs with minimum overhead and encrypt them by one password. I have tried 
hard not to expose dom0 to untrusted inputs from VMs. Design is described in 
README, though I will probably break README to multiple parts. Sources are here:

https://github.com/v6ak/qubes-incremental-backup-poc/

Now, I'd like to collect feedback on this. Whether you want to try it or just 
discuss or review the design without trying, you are welcome. Even if you think 
that the design is a complete crap, you are welcome: You might have a good 
point that I would like to know in this early stage.

Short QA:

Q: Why should I prefer this way to current Qubes backup mechanism?
A:
* Efficiency. Incremental backups can lower the backup size dramatically. 
File-based backups skip unused space, so it is even more efficient. And last 
but not least, file-based backup allows you to exclude ~/.cache and other stuff 
you don't want to backup.
* Comfort: The builtin backup does not handle storage. My approach allows you 
to automatically upload it to various storages.

Q: How much is it stable?
A: Well, I just got it working. Don't rely on it too much, please. The backup 
format also might change a bit, so using it in production might require 
reviewing commit messages.

Q: How much is it secure?
A: There was nontrivial effort to design it securely and implement it securely. 
In both areas are some improvable places (e.g., non-processing UTF-8 in dom0 or 
better authentication of files), but I hope it is reasonably secure. There are 
some potential minor leaks, mostly through error messages.

Q: I don't like Duplicity for some reason. Can I use something else instead?
A: Well, the code is modular enough, so that implementing some other backup 
backend should not be hard. On the other hand, no other current backend is 
implemented at the moment. If you have some suggestion, you are welcome. If you 
want to write some other backend, you are also welcome, but maybe you will want 
to wait a while until things are more stable.

Q: What backup backends are suitable for this scheme?
A: The most crucial part is splitting the backup process into two parts. One 
process runs in a DVM, but it does not have the access to the backup storage. 
Second process runs in a BackupStorageVM, but it does not have access to the 
filesystem you want to backup. Those two processes are connected through qrexec.

Q: Can I backup VM that is running?
A: If you have LVM-based private.img, you can. (See README for details.) If you 
have standard file-based private.img, you cannot. I don't plan to implement 
this feature for file-based private.img, because Qubes 4.0 will use LVM, so 
they don't seem to have a long future.

Q: What is the code quality?
A: Short answer: PoC. Long answer: Some parts look like a Bash script rewritten 
to Python (which is in few cases how it actually has happened), but I believe I 
can iteratively improve the suboptimal cases. Especially exception handling is 
something neglected – I am aware of Exceptions and the code expects them to 
some degree (using finally blocks etc.), but they are rarely reported to user 
in a friendly way. They usually bubble to the top level, so stacktrace is 
dumped.

Regards,
Vít Šesták

-- 
You received this message because you are subscribed to the Google Groups 
"qubes-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to qubes-users+unsubscr...@googlegroups.com.
To post to this group, send email to qubes-users@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/qubes-users/901b82dc-f781-4c13-ad00-33b4337fc84a%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to