Questions re: btrfs snapshots

I’m learning btrfs so I can take snapshots of my system (hourly, in my case). I’m using btrbk.

% sudo btrfs subvolume list /
ID 256 gen 23409 top level 5 path root
ID 257 gen 23411 top level 5 path home

% cat /etc/btrbk/btrbk.conf
snapshot_create  always
timestamp_format long-is
volume /
  snapshot_dir /home/.snapshots
  subvolume home
    group              home-hourly
    snapshot_name      home-hourly
    preserve_hour_of_day 16

I get snapshots at /home/.snapshots as intended, but then I wondered if I had created a recursive backup unintentionally, but thankfully the /home/.snapshots directory is empty in each snapshot, which I believe is because of how the subvolumes are being mounted? It still feels… not right, even if it’s technically fine.

I also noticed that each snapshot is its own subvolume?

% sudo btrfs subvolume list /
...
ID 263 gen 23336 top level 257 path home/.snapshots
ID 266 gen 22249 top level 263 path home/.snapshots/home-hourly.20251223T110802-0500
ID 267 gen 22260 top level 263 path home/.snapshots/home-hourly.20251223T111349-0500
ID 266 gen 22249 top level 263 path home/.snapshots/home-hourly.20251223T110802-0500
ID 267 gen 22260 top level 263 path home/.snapshots/home-hourly.20251223T111349-0500
ID 268 gen 22275 top level 263 path home/.snapshots/home-hourly.20251223T112148-0500
ID 269 gen 22318 top level 263 path home/.snapshots/home-hourly.20251223T115355-0500

Should that be the case? Is each snapshot in fact a new subvolume? It does have me worried I configured something incorrectly.

My only goal in all of this is just to make sure I have snapshots of the /home directory; I consider the rest of the system disposable since I can bring it back up quickly with a re-install and an Ansible playbook.

Thank you!

This is because when you take a snapshot, you are taking a snapshot of that subvolume only. The things under .snapshots are nested subvolumes so they are not included in the snapshot. This is because snapshots are, themselves, subvolumes in btrfs. Because of this they are not included in your snapshot.

You could take a recursive snapshot that would include those but you probably don’t want that in this case.

Yes, that is correct. That is how it is intended to work.

3 Likes

Thank you @dalto

1 Like