Am 27.06.2018 um 13:39 schrieb Lennart Poettering:
On Mi, 27.06.18 13:02, Ignaz Forster ([email protected]) wrote:

Hello,

when using systemd-tmpfiles' feature to create subvolumes it will always
create the new subvolume as a child of the subvolume of the given path. This
however may not always be the expected parent, especially when using btrfs
snapshots to switch between various system states.

Example layout:
===============

Let's assume the following subvolume layout (a simplified openSUSE layout):

ID      parent  top level       path    
--      ------  ---------       ----
257     5       5               <FS_TREE>/@
258     257     257             <FS_TREE>/@/var
259     257     257             <FS_TREE>/@/.snapshots/1/snapshot
260     257     257             <FS_TREE>/@/.snapshots/2/snapshot
261     257     257             <FS_TREE>/@/.snapshots/3/snapshot

A corresponding /etc/fstab could look like this:

/dev/sdx        /       btrfs   defaults        0       0
/dev/sdx        /var    btrfs   subvol=@/var    0       0

with the default btrfs subvolume set to "261".
The third snapshot would thus be the root file system, with /var mounted on
top of it.


The problem:
============

Creating "/var/test" would create a new entry like
262     258     258             @/var/test
as expected.
However creating "/opt" would create an entry similar to the following:
263     261     261             @/.snapshots/3/snapshot/opt

This is not good, as two things will happen now:
* When changing the snapshot (e.g. by reverting back to an old snapshot or
creating a new one) /opt won't be visible any more (without manually
mounting it), as it is not nested into the existing structure any more
* The third snapshot cannot be deleted without removing the
subvolume first

I am not sure I follow here fully. but isn't this just a shortcoming because
you are not doing recursive snapshots? why not just fix that?

With "recursive snapshots" I assume you mean putting the snapshot below the original root file system?

If so that's not how the btrfs subvolumes are organized in this case: The "@" subvolume itself is almost empty and only contains further subvolumes. During *SUSE setup everything will be installed to "@/.snapshots/1/snapshot" instead, and this subvolume will be set as the default btrfs subvolume (which would be equivalent to using the mount options 'subvol=@/.snapshots/1/snapshot' for '/').

After installation a tool called Snapper (default on *SUSE, but also available on several other distributions) will take care of snapshot management (e.g. by creating a new snapshot on system changes). Now if a user wants to do a rollback, the default btrfs subvolume will just be set to that specific snapshot and makes that one the new root file system.

This design is intentional by relying on btrfs' feature to change the default subvolume, and thus imho works a designed.
--
Ignaz Forster <[email protected]>
Research Engineer
SUSE Linux GmbH, Maxfeldstr. 5, D-90409 Nürnberg
Tel: +49-911-74053-281;  https://www.suse.com/
SUSE Linux GmbH, GF: Felix Imendörffer, Jane Smithard,
Graham Norton, HRB 21284 (AG Nürnberg)
_______________________________________________
systemd-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to