首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将BTRFS分区复制到外部硬盘BTRFS分区,包括快照

将BTRFS分区复制到外部硬盘BTRFS分区,包括快照
EN

Unix & Linux用户
提问于 2015-06-04 07:00:14
回答 1查看 6.1K关注 0票数 4

我有一个关于备份BTRFS分区的问题。

假设我在/dev/sda1 1上有一个BTRFS分区,在/dev/sdb1 1上有一个带有BTRFS的外部硬盘驱动器。

我已经发现可以通过发出以下命令来进行初始备份:

代码语言:javascript
复制
btrfs replace start /dev/sda1 /dev/sdb1

之后,我改变了两件事:

  • 我在SDA1上创建了一个新的常规文件
  • 我在SDA1上创建了一个新的BTRFS快照

现在我想把我的外部硬盘SDB1 ('backup')与SDA1对齐。所以这两个文件都是BTRFS特定的东西(快照)。

我该怎么做?

因此,我正在寻找rsync等价物,它还同步BTFS功能(快照):

代码语言:javascript
复制
rsync -avr --delete <mount point sda1> <mount point sdb1>

谢谢

EN

回答 1

Unix & Linux用户

发布于 2015-06-26 06:19:51

replace命令不对sda1进行备份,它在文件系统中用sdb1替换sda1,但是由于它是一个设备文件系统,而btrfs在替换它时不会费心从sda1删除数据,因此它们最终成为文件系统的独立副本。但是,您不希望这样做,因为这两个系统都将具有相同的UUID,而且目前使用相同的UUID挂载两个btrfs文件系统是不安全的,因为它可能导致大规模的数据损坏(见btrfswiki的Gotchas页面)。如果您想使用btrfs的增量备份功能,您应该将备份驱动器/dev/sdb1 1格式化为一个新的btrfs文件系统。然后,您应该创建watever子卷(S)的只读快照,您希望通过以下方法在文件系统上进行备份:

代码语言:javascript
复制
btrfs su sn -r @subvolume-name @subvolume-name-RO

在每个子卷上。然后,您应该挂载空白的btrfs文件系统并运行。

代码语言:javascript
复制
btrfs send /path/to/@subvolume-name-RO | btrfs rec /path/to/backup-directory/

这将是第一次发送,而btrfs这次必须传输所有数据。下次要向此驱动器发送备份时,可以使用增量发送只发送自上次发送备份以来更改的数据。它也会在写的时候使用拷贝,这样你也会节省很多空间。只需确保在两个文件系统上都保留了最新的快照。完成后,您可以将发送的快照重命名为您想要的任何内容。

现在,如果您想要发送另一个快照,只需重命名原始快照,并使用以下内容获取一个新快照

代码语言:javascript
复制
mv @subvolume-name-RO @subvolume-name-RO-old
btrfs su sn -r @subvolume-name @subvolume-name-RO

然后,可以使用send发送最新的快照。

代码语言:javascript
复制
btrfs send -p @subvolume-name-RO-old @subvolume-name-RO | btrfs rec /path/to/backup-directory/

如果备份驱动器上仍然存在以前的快照,则只需复制自上一次更改以来所做的任何更改即可发送新快照。

票数 3
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/207453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档