Hey there, folks! Currently playing around with a laptop that’s got three SSDs. Running Arch but that isn’t quite related. I have everything configured on one SSD, the other two are totally fresh. What do I need to do to setup one of those fresh SSDs for Timeshift backups? Please walk me through it from the very start- I think I understand some parts but I’m not too certain.
I can format the drives using mkfs.btrfs without any issues, but I’m confused about how I can add subvolumes and configure their root permissions properly to allow Timeshift snapshots.
EDIT: I see now that I misunderstood what Timeshift does. New question- which tool can I use to make a backup of my entire filesystem onto another drive such that it can be restored?
The command you’re looking for is
btrfs send
. Seeman btrfs-send
.I know of at least one tool, btrbk, which automates both automatic periodic snapshots and incremental sync, but here’s an example manual process so you can know the basic idea. Run all this in a root shell or sudo.
As initial setup:
btrfs subvolume create /mnt/mybtrfs/stuff
on the sender, substituting the actual mount point of your btrfs filesystem and the name you want to use for a subvolume under it.-o subvol=stuff
if you want to treat the subvolume as its own separate mount from its parent.mkdir /mnt/mybtrfs/snapshots; btrfs subvolume snapshot /mnt/mybtrfs/stuff /mnt/mybtrfs/snapshots/stuff-20250511
.btrfs send /mnt/mybtrfs/snapshots/stuff-20250511 | btrfs receive /mnt/backup
. You can runbtrfs receive
through SSH if the receiver is a separate system.For incremental syncs after that:
btrfs subvolume snapshot /mnt/mybtrfs/stuff /mnt/mybtrfs/snapshots/stuff-20250518
.-p
option to specify a subvolume of the last successful sync to make it incremental.btrfs send -p /mnt/mybtrfs/snapshots/stuff-20250511 /mnt/mybtrfs/snapshots/stuff-20250518 | btrfs receive /mnt/backup
.If you want to script a process like this, make sure the receiver stores the name of the latest synced snapshot somewhere only after the receive completes successfully, so that you aren’t trying to do incremental syncs based on a parent that didn’t finish syncing.