PolarDB Agent LakeBase 目录克隆(Clone)

更新时间:
复制 MD 格式

PolarDB Agent LakeBase的克隆(Clone)功能以写时复制(Copy-on-Write)的方式秒级创建卷中已有目录或文件的独立副本:仅复制元数据,底层数据块以引用计数与源共享、不重复占用存储,且副本独立、完整、可写,与源互不影响。Clone适用于工作空间的版本管理、状态回滚、模板克隆快速初始化等场景。PolarDB Agent LakeBase提供OpenAPI和命令行工具(lakebase-client)两种Clone方式。

功能特性

Clone对应PolarDB Agent LakeBase秒级目录快照核心能力,具备以下特性:

  • 快速完成:仅复制元数据、不拷贝数据,耗时只与目录内文件或子目录的数量相关,与数据体量无关。常见规模的目录可秒级完成,远快于cp等逐字节拷贝。

  • 零额外存储:副本的底层数据块以引用计数方式与源共享,公共数据只存一份,不因Clone重复占用存储。

  • 独立可写、写时复制:副本是完整、独立、可写的目录树。任一副本或源发生写入时,只有新增或改动的部分写入新数据块,其余继续与对方共享,源与各副本之间互不影响。

适用范围

  • 创建PolarDB Agent LakeBase

  • 源路径(被Clone的文件或目录)在卷中已存在。

  • 使用OpenAPI时,已在PolarDB Agent LakeBase实例的基本信息页面中获取MetaUrl信息;使用命令行工具时,已挂载PolarDB Agent LakeBase

使用方法

通过OpenAPI执行Clone

OpenAPI方式无需挂载,直接指定源路径与目标路径即可发起Clone,适合在Agent调度、自动化编排等服务端场景中使用。

执行Clone:ClonePolarFsBasicSnapshot - 克隆文件

通过命令行工具执行Clone

准备工作

下载lakebase-client工具,并完成PolarDB Agent LakeBase的挂载。

curl -o lakebase-client https://lakebase-client.oss-cn-beijing.aliyuncs.com/lakebase-client-latest
chmod +x lakebase-client

执行Clone

在已挂载的目录内,将源路径Clone到目标路径:

lakebase-client clone <SRC> <DST>

例如,将模板工程Clone为一份独立可写的副本:

lakebase-client clone /mnt/pfs/templates/project-base /mnt/pfs/project-x

参数说明

参数

说明

SRC

Clone的源路径,为挂载点内已存在的文件或目录。执行Clone的用户需对该路径有读权限。

DST

副本的目标路径,须与SRC位于同一挂载点。其父目录必须已存在,目标本身不能已存在,且不能位于SRC之下。若DST/结尾,则按目录处理,自动在其下拼接SRC的名称。

--preserve-p

保留源的uid、gidmode。不指定时,副本归执行命令的用户所有,mode按当前umask取值。

典型应用场景

版本管理与状态回滚

Agent在多轮任务中不断修改工作空间,需要在关键节点保存可回退的版本。通过Clone为工作空间目录创建秒级快照,即可在后续误操作或需要对比时回到任意历史版本。由于Clone仅复制元数据、不占用额外存储,可以低成本地为每个重要节点留存快照。

# 在关键节点为工作空间打一份快照
lakebase-client clone /mnt/pfs/agents/agent-x/workspace /mnt/pfs/agents/agent-x/snapshots/v1

工作空间快速初始化(模板克隆)

Agent上线时需要快速准备工作环境,例如项目模板、Skill文件、预装依赖等。将预先构建好的模板目录Clone给新Agent,即可秒级完成初始化。仅复制元数据、无需拷贝实际数据,大幅降低启动延迟与存储开销。

# 由模板秒级初始化新Agent的工作空间
lakebase-client clone /mnt/pfs/templates/agent-base /mnt/pfs/agents/agent-x

公共依赖 + 运行时额外安装

存在一套常用的依赖包集合(如node_modules),但各Agent在运行期还要各自安装额外的包,且改动需相互隔离。此时使用Clone:由模板工程Clone出独立副本,公共依赖与基座共享、不重复占用存储,且各Agent在副本上安装增量时,只有新增或改动的部分写入新数据块,互不影响。

说明

该场景与共享目录中的共享npm依赖相对应:若依赖固定、Agent只读消费,使用共享目录(只读Bind)。若运行期各自安装额外的包且需隔离,则使用本节的Clone。

操作步骤

  1. 管理员构建模板工程(一次性操作)。

    lakebase-client mount <META_URL> <MOUNT_POINT>
    mkdir -p <MOUNT_POINT>/shared/npm-template/v1
    cd <MOUNT_POINT>/shared/npm-template/v1 && npm install next ...
    lakebase-client umount <MOUNT_POINT>
  2. Agent--subdir挂载后Clone模板工程。由于Agent--subdir挂载、看不到位于subdir之外的模板目录,Clone有两种执行方式:

    1. 方式一:通过OpenAPI执行Clone

      直接通过ClonePolarFsBasicSnapshot - 克隆文件指定源路径与目标路径完成Clone。

    2. 方式二:先Bind进来,再本地Clone

      lakebase-client mount <META_URL> <MOUNT_POINT> --subdir /agents/agent-x \
          --bind /shared/npm-template/v1:/agents/agent-x/.npm-template
      lakebase-client clone <MOUNT_POINT>/.npm-template <MOUNT_POINT>/project-x
      说明

      Clone的是整个模板工程目录,而不仅是node_modules,否则后续npm installmanifest可用。

  3. AgentClone出的副本上安装额外依赖。

    cd <MOUNT_POINT>/project-x && npm install <额外包>

注意事项

  • SRCDST必须位于同一挂载点,且DST的父目录必须已存在、目标本身不能已存在、且不能位于SRC之下。

  • Clone仅复制元数据、与源共享底层数据块,本身不占用额外存储。副本后续写入产生的新数据块按实际写入量占用存储。

  • 在以--subdir挂载的场景下,命令行Clone看不到subdir之外的目录,需先通过--bind将源映射进来,或改用OpenAPI方式Clone。