Btrfs 接收命令是原子的吗?

mru*_*her 5 backup btrfs

简短版本:我在 Btrfssendreceive命令的帮助下进行定期备份。包含待备份数据的快照(SOURCE)为只读快照。使用 Btrfs 创建此快照是原子的。然后使用 Btrfssendreceive命令的组合进行备份。我的问题是:Btrfsreceive命令是否也在目标卷上自动创建备份快照?

长版:对于我的日常备份策略,我使用 Btrfs 将源子卷的更改发送到备份驱动器。我要备份的子卷位于SOURCE,而备份本身将存储在DEST.

在我进行备份之前,我需要一个只读快照SOURCE,我将其存储SOURCE在一个名为.snapshots. 这是通过命令完成的

btrfs subvolume snapshot -r SOURCE SOURCE/.snapshots/current_backup
sync
Run Code Online (Sandbox Code Playgroud)

sync根据 Btrfs-wiki 需要上面的命令才能btrfs send工作。现在我想将调用的快照发送current_backupDEST不同驱动器上的备份卷。我用命令来做到这一点

btrfs send SOURCE/.snapshots/current_backup | btrfs receive DEST
Run Code Online (Sandbox Code Playgroud)

我的问题是关于btrfs receive这个备份过程的一部分:这是否以原子方式发生?换句话说:卷上的备份是否DEST只有在完全接收和写入后才可用?

Emm*_*osa 3

不,它不是原子的。Btrfs receive 确实创建了一个子卷,因此这是原子的,但最初子卷是空的。然后,btrfs receive 用传入的数据填充子卷。

您可以通过在执行备份时 cd'ing 到 DEST 并重复执行 ls 或 find 来测试这一点。