Using snbk for automated Snapper backups with Btrfs send/receive
I hope this is useful to someone.
I’ve been testing the new snbk tool for automated backups of Snapper snapshots using Btrfs send/receive.
I have to say that, if this can be useful to anyone else, it is actually quite straightforward to configure.
- Create a backup configuration
First, you need to create a configuration file telling snbk which Snapper configuration to use and where the backup should be stored.
For example, for my root configuration:
sudo nano /etc/snapper/backup-configs/root.json
My Snapper configurations are:
emanu@fedora ~> sudo snapper list-configs
Configuration │ Subvolume
──────────────┼──────────
home │ /home
root │ /
var │ /var
In this example, root is the name of the Snapper configuration associated with the / subvolume.
I then created the following snbk backup configuration:
{
"config": "root",
"target-mode": "local",
"automatic": true,
"source-path": "/",
"target-path": "/media/emanu/hdd_pool/Backup_OS/Fedora_Desktop/root"
}
"automatic": true
This enables automatic transfers and cleanup for the backup configuration through a systemd timer.
There are several other configuration options available. See the snapper-backup-configs documentation for the complete list.
- Check the available snapshots
Before starting a transfer, you can use snbk list to see the snapshots associated with the backup configuration:
emanu@fedora ~> sudo snbk list
# │ Date │ Source status │ Target status
──┼────────────────────────────┼───────────────┼──────────────
1194 │ Fri 31 Jul 2026, 12:16:52 │ read-only │
1197 │ Sat 1 Aug 2026, 14:44:02 │ read-only │
1210 │ Sun 2 Aug 2026, 15:29:06 │ read-only │
1211 │ Mon 3 Aug 2026, 14:00:47 │ read-only │
1212 │ Mon 3 Aug 2026, 14:15:14 │ read-only │
1213 │ Tue 4 Aug 2026, 13:38:16 │ read-only │
1214 │ Tue 4 Aug 2026, 14:00:46 │ read-only │
1215 │ Tue 4 Aug 2026, 21:29:27 │ read-only │
1216 │ Wed 5 Aug 2026, 14:00:42 │ read-only │
1217 │ Wed 5 Aug 2026, 14:15:21 │ read-only │
1220 │ Thu 6 Aug 2026, 00:00:18 │ read-only │
1225 │ Thu 6 Aug 2026, 23:19:52 │ read-only │
1226 │ Fri 7 Aug 2026, 13:33:41 │ read-only │
1227 │ Fri 7 Aug 2026, 14:00:58 │ read-only │
1228 │ Sat 8 Aug 2026, 14:00:50 │ read-only │
1229 │ Sat 8 Aug 2026, 14:15:46 │ read-only │
1236 │ Sun 9 Aug 2026, 00:00:09 │ read-only │
1237 │ Sun 9 Aug 2026, 10:00:14 │ read-only │
1238 │ Sun 9 Aug 2026, 10:01:30 │ read-only │
- Perform a manual transfer
I first tested the transfer manually by using the snapshot number reported by snbk list.
For example, to transfer snapshot 1238:
sudo snbk transfer 1238
The command reports:
Executing transfer for backup configuration 'root'.
Transferring snapshot 1238.
After the transfer completes, running snbk list again shows the snapshot as valid on the target:
1238 │ Sun 9 Aug 2026, 10:01:30 │ read-only │ valid
So the snapshot has successfully been transferred to the backup target.
I’ve only tested the manual part so far. I still need to test it over time to make sure that everything works correctly with the automatic mode.
For example, I still need to verify whether snbk automatically creates a backup whenever a new snapshot is created with Snapper (for example, through Btrfs Assistant), and whether it automatically keeps a certain number of snapshots on the destination.
As mentioned, these are all things I still need to test and understand better.
- Backing up the
/homesubvolume
The same approach can be used for other Snapper configurations.
For example, I also have a home configuration:
sudo nano /etc/snapper/backup-configs/home.json
The configuration is:
{
"config": "home",
"target-mode": "local",
"automatic": true,
"source-path": "/home",
"target-path": "/media/emanu/hdd_pool/Backup_OS/Fedora_Desktop/home"
}
Running:
sudo snbk list
now shows the snapshots for the home backup configuration:
Backup-config:home, config:home, source-path:/home, target-mode:local
# │ Date │ Source status │ Target status
──┼────────────────────────────┼───────────────┼──────────────
687 │ Wed 5 Aug 2026, 14:00:42 │ read-only │
690 │ Thu 6 Aug 2026, 00:00:18 │ read-only │
696 │ Fri 7 Aug 2026, 14:00:58 │ read-only │
701 │ Sat 8 Aug 2026, 14:00:50 │ read-only │
703 │ Sat 8 Aug 2026, 18:00:11 │ read-only │
704 │ Sat 8 Aug 2026, 19:00:11 │ read-only │
705 │ Sat 8 Aug 2026, 20:00:11 │ read-only │
706 │ Sat 8 Aug 2026, 21:00:09 │ read-only │
707 │ Sat 8 Aug 2026, 22:00:09 │ read-only │
708 │ Sat 8 Aug 2026, 23:00:09 │ read-only │
709 │ Sun 9 Aug 2026, 00:00:09 │ read-only │
710 │ Sun 9 Aug 2026, 10:00:14 │ read-only │
I can then transfer a specific snapshot in exactly the same way:
sudo snbk transfer 710
which gives:
Executing transfer for backup configuration 'home'.
Transferring snapshot 710.
Conclusion
So far, snbk looks quite simple to configure and provides a convenient way to automate Btrfs snapshot replication using btrfs send/receive, while integrating directly with Snapper configurations.
For a system using separate Snapper configurations for /, /home, /var, etc., each configuration can have its own snbk backup configuration and target path.
I haven’t tested the automatic systemd timer extensively yet, but the manual transfers work as expected.