docker - 发送/接收带有快照的子卷(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_datetime | btrfs receive /mnt/drive2/snapshots/

在docker文件夹中,有一个btrfs文件夹,其中充满了子卷。我希望快照内的文件夹也可以是子卷,但它们似乎只是常规文件夹。

; TLDR
因此,问题是,如果我对子卷中嵌套了子卷的快照进行快照,那么在快照中它们是否也应该是子卷?我在这里达到btrfs限制吗?

最佳答案

让我们先将BTRFS-Subvolumes视为“常规”分区,然后看一个示例:

  • HDD的一个分区安装在/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),则默认情况下,其顶级Subvolume挂载在所需位置。
  • 和驻留在已安装的BTRFS子卷中的所有子卷(通过与顶层子卷具有子代父关系),也会自动在相对子路径上“装载”。
  • 尽管并非所有BTRFS设备的所有子卷都必须始终可见:如果使用挂载选项subvolid=<ID-of-some-Subvolume>,则只有子子卷会自动“挂载”在相对的子路径中。

  • (由于子子卷未真正安装,我多次在引号中加上“mount”,因为它们在普通的Linux安装中不可见)

    关于docker - 发送/接收带有快照的子卷(btrfs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57654388/

    相关文章:

    docker - 没有可用于调度 Pod 的节点 - 在没有 VM 的情况下本地运行 Kubernetes

    google-compute-engine - Google Compute Engine 磁盘快照与可重用镜像

    c - 用于在 btrfs 中的文件和目录上设置时间戳的 API

    networking - docker:如何轻松获得 veth 桥接接口(interface)对?

    Git 在 Docker 容器中运行太慢

    maven - 无法通过maven使用org.apache.hbase 3.0.0-SNAPSHOT

    docker - 没有人拥有的孤立子体积无法对其进行任何处理

    ubuntu - 如何使用命令行为 ubuntu 安装 ffmpeg?

    php - 使用 php 从快照获取 Azure 文件