Btrfs 接收命令是原子的吗?

Btrfs 接收命令是原子的吗?

简洁版本:send我正在 Btrfs和命令的帮助下进行定期备份receive。包含要备份的数据的快照 ( SOURCE) 是只读快照。使用 Btrfs 创建此快照是原子的。然后使用 Btrfssend和命令的组合进行备份receive。我的问题是:Btrfsreceive命令是否还会在目标卷上自动创建备份快照?

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

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

btrfs subvolume snapshot -r SOURCE SOURCE/.snapshots/current_backup
sync

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

btrfs send SOURCE/.snapshots/current_backup | btrfs receive DEST

我的问题是关于btrfs receive此备份过程的部分:这是自动发生的吗?换句话说:卷上的备份是否DEST只有在完全接收和写入后才可用?

答案1

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

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

相关内容