PolarDB Agent LakeBase的克隆(Clone)功能以写时复制(Copy-on-Write)的方式秒级创建卷中已有目录或文件的独立副本:仅复制元数据,底层数据块以引用计数与源共享、不重复占用存储,且副本独立、完整、可写,与源互不影响。Clone适用于工作空间的版本管理、状态回滚、模板克隆快速初始化等场景。PolarDB Agent LakeBase提供OpenAPI和命令行工具(lakebase-client)两种Clone方式。
功能特性
Clone对应PolarDB Agent LakeBase的秒级目录快照核心能力,具备以下特性:
-
快速完成:仅复制元数据、不拷贝数据,耗时只与目录内文件或子目录的数量相关,与数据体量无关。常见规模的目录可秒级完成,远快于
cp等逐字节拷贝。 -
零额外存储:副本的底层数据块以引用计数方式与源共享,公共数据只存一份,不因Clone重复占用存储。
-
独立可写、写时复制:副本是完整、独立、可写的目录树。任一副本或源发生写入时,只有新增或改动的部分写入新数据块,其余继续与对方共享,源与各副本之间互不影响。
适用范围
-
源路径(被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
参数说明
|
参数 |
说明 |
|
|
被Clone的源路径,为挂载点内已存在的文件或目录。执行Clone的用户需对该路径有读权限。 |
|
|
副本的目标路径,须与 |
|
|
保留源的uid、gid和mode。不指定时,副本归执行命令的用户所有,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。
操作步骤:
-
管理员构建模板工程(一次性操作)。
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> -
Agent以
--subdir挂载后Clone模板工程。由于Agent以--subdir挂载、看不到位于subdir之外的模板目录,Clone有两种执行方式:-
方式一:通过OpenAPI执行Clone
直接通过ClonePolarFsBasicSnapshot - 克隆文件指定源路径与目标路径完成Clone。
-
方式二:先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 install无manifest可用。
-
-
Agent在Clone出的副本上安装额外依赖。
cd <MOUNT_POINT>/project-x && npm install <额外包>
注意事项
-
SRC与DST必须位于同一挂载点,且DST的父目录必须已存在、目标本身不能已存在、且不能位于SRC之下。 -
Clone仅复制元数据、与源共享底层数据块,本身不占用额外存储。副本后续写入产生的新数据块按实际写入量占用存储。
-
在以
--subdir挂载的场景下,命令行Clone看不到subdir之外的目录,需先通过--bind将源映射进来,或改用OpenAPI方式Clone。