Docker 发送/接收带有快照的子卷(btrfs)

Docker 发送/接收带有快照的子卷(btrfs),docker,snapshot,btrfs,Docker,Snapshot,Btrfs,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_datet

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限制吗?

让我们先将btrfs子卷视为“普通”分区,然后看一个示例:

  • 硬盘的一个分区安装在
    /mnt/HDD
    上,第二个分区安装在
    /mnt/HDD/nested
  • 如果对第一个分区(例如
    .img
    .iso
    )进行完整备份,这将不包括第二个分区,因为它当前安装在第一个分区的“内部”
即使第一个分区未装入,也可以对其进行备份

由于BTRFS子卷的处理方式与分区类似,因此递归BTRFS发送(包括当前“装入”的子卷)更加复杂

据我所知,没有内置函数只需一个命令即可完成此操作

我曾经翻阅过wiki上提到的BTRFS备份工具,据我记忆所及,其中一个工具正好具有该功能:


现在对于BTRFS(据我所知):

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

  • 以及位于装入的BTRFS子卷内的所有子卷(通过与顶级子卷具有子-父关系),也会在相对子路径上自动“装入”

  • 尽管并非一个BTRFS设备的所有子卷都必须始终可见:如果使用装载选项
    subvolid=
    ,则只有子卷会自动“装载”在相对子路径上


(我多次在引号中加上“mounted”,因为子卷没有真正装入-它们不像普通的Linux装入那样可见)

简而言之:不,嵌套子卷不包括在其父卷的快照中,而是如您在父卷快照中看到的空目录所示,请参阅


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

这是否回答了您的问题?