QubesOS currently defaults to using LVM2 for storage, but it also
supports using BTRFS and XFS via the reflink storage pool. How have
people’s experiences with reflink been, and how have they compared to
the default LVM2 pool?
Additionally, reading the linux-lvm mailing list has made me question
if the performance characteristics of LVM2 are a good fit for QubesOS.
LVM2 seems to focus on high throughput at the expense of ease of
recovery, checksumming, and the time needed to create a snapshot. In
Qubes OS, however, the time needed to create a snapshot is absolutely
critical, as three of them are needed for each qube start.
There are obviously several options here:
- Stick with LVM2
- Switch the default to BTRFS + reflink.
- Switch the default to XFS + reflink on top of LVM2.
- Use XFS + reflink on top of Stratis [1].
- Write our own pool on top of device-mapper.
- Use ZFS; this cannot be the default, but it could be available as
a contrib package.
- Something else that I have not listed, or not considered.
What are the advantages and disadvantages of each of them, and what
would be the best default going forward?
[1]:
https://stratis-storage.github.io
--
Demi Marie Obenour
she/her/hers
QubesOS Developer, Invisible Things Lab