【问题标题】:send/receive subvolume with snapshots (btrfs)发送/接收带有快照的子卷 (btrfs)
【发布时间】:2019-08-26 08:33:14
【问题描述】:

btrfs 子卷很棒,可以嵌套。 Docker 支持 btrfs 并大量使用嵌套快照。

我正在尝试将我的 /var/lib/docker 移动到新驱动器。

程序“应该”是。
1- 制作 /var/lib/docker 的 ro 快照

btrfs sub snap create /var/lib/docker /var/snapshots/docker_some_datetime

源和目标都在同一个 fs 上。

2.- 将快照发送到新驱动器

btrfs send /var/snapshots/docker_some_datetime | btrfs receive /mnt/drive2/snapshots/

在 docker 文件夹内,有一个 btrfs 文件夹,里面装满了子卷。我希望快照中的文件夹也是子卷,但它们似乎只是普通文件夹。

;TLDR
所以,问题是,如果我拍摄一个子卷的快照,其中嵌套了子卷,它们不应该是快照中的子卷吗?我在这里遇到了 btrfs 限制吗?

【问题讨论】:

标签: docker snapshot btrfs


【解决方案1】:

让我们暂时将 BTRFS-Subvolumes 视为“普通”分区并看一个示例:

  • 硬盘的一个分区挂载到/mnt/hdd,第二个分区挂载到/mnt/hdd/nested
  • 如果您对第一个分区进行完整备份(例如 .img.iso),这将包含第二个分区,因为它当前安装在“内部”第一个分区。

即使第一个分区未挂载,您仍然可以对其进行备份。

由于 BTRFS-Subvolumes 的处理方式与分区类似,因此递归 btrfs-send(包括当前“挂载”的 Subvolumes)更加复杂。

据我所知,没有内置函数可以仅使用一个命令来执行此操作。

我曾经深入研究过 wiki 上提到的 BTRFS 备份工具,据我记得其中一个工具正是具有该功能:https://btrfs.wiki.kernel.org/index.php/Incremental_Backup#Available_Backup_Tools


现在是 BTRFS(据我了解):

  • 如果你挂载了一个 BTRFS 分区(例如通过/etc/fstab),默认情况下它的顶级子卷会挂载在所需的位置。

  • 所有位于已挂载的 BTRFS 子卷内的子卷(通过与顶级子卷具有父子关系)也会自动“挂载”在相对子路径中。

  • 尽管并非一个 BTRFS 设备的所有子卷都必须始终可见:如果您使用挂载选项 subvolid=<ID-of-some-Subvolume>,则只有子子卷会自动“挂载”在相对子路径中。

(当子子卷没有真正安装时,我多次将“mounted”放在引号中 - 它们在普通 Linux 安装时不可见)

【讨论】:

    【解决方案2】:

    简而言之:不,嵌套子卷不包含在其父级的快照中,而是如您所见在父级快照中以空目录表示,请参阅BTRFS Wiki

    要对嵌套子卷布局进行快照,您必须手动递归地对所有包含的子卷进行快照。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多