使用 Btrfs 快照进行增量备份

[ad_1]

快照是 Btrfs 的一个有趣功能。 快照是子卷的副本。 立即拍摄快照。 但是,拍摄快照不像执行 rsync 或 cp,并且快照不会在创建后立即占用空间。

编者注:从 BTRFS 维基 – 快照只是一个子卷,它使用 Btrfs 的 COW 功能与其他一些子卷共享其数据(和元数据)。

占用的空间将随着原始子卷或快照本身(如果可写)中的数据更改而增加。 子卷中添加/修改的文件和删除的文件仍然驻留在快照中。 这是执行备份的便捷方式。

使用快照进行备份

快照驻留在子卷所在的同一磁盘上。 您可以像浏览常规目录一样浏览它,并恢复执行快照时的文件副本。 顺便说一句,快照子卷的同一磁盘上的快照不是理想的备份策略:如果硬盘坏了,快照也会丢失。 快照的一个有趣功能是能够将它们发送到另一个位置。 快照可以通过 SSH 发送到外部硬盘驱动器或远程系统(目标文件系统也需要格式化为 Btrfs)。 为此,使用命令 btrfs send 和 btrfs receive。

拍摄快照

为了使用发送和接收命令,将快照创建为只读非常重要,并且默认情况下快照是可写的。

以下命令将拍摄 /home 子卷的快照。 请注意 -r 标志为只读。

sudo btrfs 子卷快照 -r /home /.snapshots/home-day1

快照名称可以是当前日期,而不是 day1,例如 home-$(date +%Y%m%d)。 快照看起来像常规的子目录。 你可以把它们放在任何你喜欢的地方。 目录 /.snapshots 可能是保持它们整洁并避免混淆的好选择。

编者注:快照不会对自身进行递归快照。 如果创建子卷的快照,则子卷包含的每个子卷或快照都会映射到快照内的同名空目录。

使用 btrfs 发送备份

在此示例中,USB 驱动器中的目标 Btrfs 卷挂载为 /run/media/user/mydisk/bk 。 将快照发送到目的地的命令是:

sudo btrfs 发送 /.snapshots/home-day1 | sudo btrfs 接收 /run/media/user/mydisk/bk 这称为初始引导,它对应于完整备份。 此任务将需要一些时间,具体取决于 /home 目录的大小。 显然,后续增量发送将花费更短的时间。

增量备份

快照的另一个有用功能是以增量方式执行发送任务的能力。 让我们再拍一张。

sudo btrfs 子卷快照 -r /home /.snapshots/home-day2

为了增量执行发送任务,您需要指定前一个快照作为基础,并且该快照必须存在于源和目标中。 请注意 -p 选项。

sudo btrfs send -p /.snapshot/home-day1 /.snapshot/home-day2 | sudo btrfs 接收 /run/media/user/mydisk/bk 再次(后天):

sudo btrfs 子卷快照 -r /home /.snapshots/home-day3

sudo btrfs send -p /.snapshot/home-day2 /.snapshot/home-day3 | sudo btrfs 接收 /run/media/user/mydisk/bk

清理

操作完成后,您可以保留快照。 但是,如果您每天执行这些操作,最终可能会执行很多操作。 这可能会导致混乱,并可能导致磁盘上的大量已用空间。 因此,如果您认为不再需要某些快照,最好删除它们。

请记住,为了执行增量发送,您至少需要最后一个快照。 此快照必须存在于源和目标中。

sudo btrfs 子卷删除 /.snapshot/home-day1

sudo btrfs 子卷删除 /.snapshot/home-day2

sudo btrfs 子卷删除 /run/media/user/mydisk/bk/home-day1

sudo btrfs 子卷删除 /run/media/user/mydisk/bk/home-day2

注意:第 3 天的快照保留在源和目标中。 这样,明天(第4天),就可以执行一次新的增量btrfs发送。

最后的一些建议是,如果 USB 驱动器有大量空间,您可以考虑在目的地维护多个快照,而在源磁盘中您只保留最后一个。

[ad_2]

Related Posts