I use Btrfs with Parabola GNU/Linux-libre, a derivative distribution of Arch Linux. I use no snapshot management tools such as Snapper or Timeshift. I keep my system minimal and tidy. Everything is boring and predictable. I do not bork my system by mistake, except when something breaks after an odd update, usually once or twice per year. When it happens, I find a workaround (usually something needs to be downgraded) and file a bug report if there is none.
When I need to tinker with something that can possibly go out of control, like installing a new package for a program that I want to try out and I am not sure I will want to keep it, I take a snapshot of my current “pristine” system and boot into it. In the snapshot copy of my system I do all the dirty stuff I want to try out. When I am satisfied with my findings, I reboot into the main subvolume and delete the snapshot.
It seems to me that most people use Btrfs snapshots preemptively in case of unexpected failure. I use snapshots exactly when I know I am going to do something that can lead to instability or «OS rot». Am I the only one using Btrfs snapshots like this?
“Except when something breaks after an odd update once or twice per year”
You don’t need snapshots, except for the moments when you do. The point of snapshots is that they’re so cheap that you can let them roll on their own and only care about them the day your system breaks.
A broken system is no big deal for me, I can easily get up and running after a failed update. My data is also mirrored to my Nextcloud instance.
You have to reboot yes, however only once. The step where you boot into your snapshot is redundant.
You’re not alone. I do use snapshots for failure protection but I also use it when I know I’m likely to induce a failure by running an experiment.
It’s also just as valid to not use the snapshot feature at all. Perhaps you value data integrity, for example, through the use of full checksums enabled by the design.
Your system and the software it runs belongs to you and is in your service.
You can do (most) of this without rebooting by leveraging the btrfs support built into systemd-nspawn, which allows creating ephemeral data volumes to mess around in. It’s meant for containers, not the semi-Silverblue system you’ve set up, but it may save you time messing about with new tooling.
It should also be noted that although tools often miss support for it, almost any LVM2 filesystem can do snapshots if set up with enough free disk space for them.
I just use a package manager hook to set up btrfs timeshift snapshots whenever I do something to the root partition, but to each their own.
I’ve done that before when debugging system issues. Create a snapshot before and after the issue, and diff the files to see what changed.
I also took a snapshot before updating to a new version of Mint, realised it broke a bunch of stuff and rolled back.
Honestly, I wish btrfs was the default in many places since taking a snapshot is so cheap and easy.
Why not do both?
I use a script in cron that uses timestamps as snapshot names, and deletes old ones. Then I also take a snapshot with a timestamp right before doing anything dumb.
You could even make a script called mksnap
that figures out what zfs/btfs you’re in on the current folder and auto-snaps it.