Short Version: I'm doing regular backups with help of Btrfs send
and receive
commands. The snapshot which contains the data to be backed up (SOURCE
) is a read-only snapshot. Creating this snapshot with Btrfs is atomic. The backup then is made using a combination of Btrfs send
and receive
commands. My question is: Does the Btrfs receive
command also create the backup snapshot atomically on the destination volume?
Long Version: For my daily backup strategy I use Btrfs to send changes of a source sub-volume to a backup-drive. The sub-volume I want to backup is located in SOURCE
, while the backup itself will be stored in DEST
.
Before I can make a backup, I need a read-only snapshot of SOURCE
which I will store below SOURCE
itself in a sub-directory called .snapshots
. This is done with the commands
btrfs subvolume snapshot -r SOURCE SOURCE/.snapshots/current_backup
sync
The sync
command above is needed according to the Btrfs-wiki to make btrfs send
work. Now I want to send the snapshot called current_backup
to a backup volume DEST
on a different drive. I do this with the command
btrfs send SOURCE/.snapshots/current_backup | btrfs receive DEST
My question is about the btrfs receive
part of this backup process: Does this happen atomically? In other words: Is the backup on volume DEST
only available if it has been completely received and written?