0

The OpenSuse Docs say this about /usr/local:

"This directory is used when manually installing software. It is excluded to avoid uninstalling these installations on rollbacks."

However I want to snapshot it so I can easily roll it back when I rollback zypper installs (specifically cuda).

I tried adding a snapper config for /usr/local but got this error:

$ sudo snapper list-configs
Config | Subvolume
-------+----------
root   | /
$ sudo snapper create-config /usr/local
Creating config failed (config already exists).

Here's my current root config, which says nothing about /usr/local.

$ sudo cat /etc/snapper/configs/root

subvolume to snapshot

SUBVOLUME="/"

filesystem type

FSTYPE="btrfs"

btrfs qgroup for space aware cleanup algorithms

QGROUP="1/0"

fraction or absolute size of the filesystems space the snapshots may use

SPACE_LIMIT="0.5"

fraction or absolute size of the filesystems space that should be free

FREE_LIMIT="0.2"

users and groups allowed to work with config

ALLOW_USERS="" ALLOW_GROUPS=""

sync users and groups from ALLOW_USERS and ALLOW_GROUPS to .snapshots

directory

SYNC_ACL="no"

start comparing pre- and post-snapshot in background after creating

post-snapshot

BACKGROUND_COMPARISON="yes"

run daily number cleanup

NUMBER_CLEANUP="yes"

limit for number cleanup

NUMBER_MIN_AGE="1800" NUMBER_LIMIT="2-10" NUMBER_LIMIT_IMPORTANT="4-10"

create hourly snapshots

TIMELINE_CREATE="no"

cleanup hourly snapshots after some time

TIMELINE_CLEANUP="yes"

limits for timeline cleanup

TIMELINE_MIN_AGE="1800" TIMELINE_LIMIT_HOURLY="10" TIMELINE_LIMIT_DAILY="10" TIMELINE_LIMIT_WEEKLY="0" TIMELINE_LIMIT_MONTHLY="10" TIMELINE_LIMIT_YEARLY="10"

cleanup empty pre-post-pairs

EMPTY_PRE_POST_CLEANUP="yes"

limits for empty pre-post-pair cleanup

EMPTY_PRE_POST_MIN_AGE="1800"

  • PS this root config is just for the root subvolume (/@/ which is mounted to / by using the BTRFS default mount ID), not to be confused with the BTRFS-ROOT subvolume (subvolid=5, /) – paladin Dec 28 '23 at 19:02

1 Answers1

0

In default /usr/local is not being added to snapper (auto snapshot mechanic).

I suggest to manually create snapshots, it's really not that hard.

btrfs subvolume snapshot -r /usr/local /usr/local.read-only-snapshot-01

...creates a read-only snapshot from local and names it local.read-only-snapshot-01.

Important, BTRFS subvolumes can be created/mounted in different ways, usually opensuse creates all subvolumes in a super subvolume just called @ and uses the /etc/fstab to mount the different subvolumes. Another aproach would be to just create the subvolumes right at their place where they shall belong, using the btrfs subvolume create command.

To be able to directly access the super subvolume you need to mount the BTRFS-ROOT subvolume using its subvolid, which is always 5.

mount -t btrfs -o subvolid=5 /dev/BTRFS_DEVICE /mnt/

When you want to revert to a previous snapshot, you can achive this by:

btrfs subvolume delete /usr/local
btrfs property set -ts /usr/local.read-only-snapshot-01 ro false
mv /usr/local.read-only-snapshot-01 /usr/local

Please take note that this approach might collide with your settings in your /etc/fstab (this depends how your BTRFS was setup), an easy workaround would be to just delete the entry belonging to /usr/local/ in your fstab.

paladin
  • 263