Linux上 OpenELM 的备份与恢复
一 备份范围与准备
- 明确需要保护的资产:
- 模型权重与检查点(含可能的权重平均产物)、分词器与词表文件、配置文件(训练/推理超参、数据路径、环境依赖等)、脚本与实验记录、以及可选的数据集副本/索引。
- 准备与隔离:
- 选择备份介质(本地盘、NAS、对象存储),遵循三二一法则(至少3份、至少2种介质、至少1份异地),并做定期恢复演练验证可用性。
- 统一存放结构,例如:/backup/openelm/{models,configs,tokenizers,scripts,datasets}/,便于编排与审计。
- 如运行在 LVM/Btrfs/ZFS 上,可先创建快照作为一致性基点,再进行文件级备份,降低运行期变动影响。
二 推荐的备份方法
- 文件级归档(通用、可移植)
- 适用:模型权重、配置、脚本、词表等文件集合。
- 示例(排除易变运行时目录):
- tar -cvpzf /backup/openelm_$(date +%F).tar.gz \
--exclude=/proc --exclude=/sys --exclude=/dev --exclude=/run \
-C /path/to/openelm/ .
- 恢复:
- tar -xvpzf /backup/openelm_YYYY-MM-DD.tar.gz -C /path/to/restore/
- 增量文件同步(轻量、日常)
- 适用:持续迭代的模型目录、日志与实验结果。
- 示例:
- rsync -avz --delete /path/to/openelm/ /backup/openelm/latest/
- 定期将 latest 归档为带时间戳的快照:tar -cvpzf /backup/openelm/$(date +%F).tar.gz -C /backup/openelm/latest/ .
- 块级/快照(一致性优先)
- 适用:在同一台机器上做快速回滚或保护正在写入的缓存/中间产物。
- LVM 快照示例:
- lvcreate --size 10G --snapshot --name snap_openelm /dev/vg0/openelm_data
- 对快照进行文件级备份(tar/rsync),完成后可合并或删除快照:lvconvert --merge /dev/vg0/snap_openelm
- 企业级集中备份(多机/远程)
- 适用:多节点训练/推理、合规与审计要求。
- 方案:部署 Bacula 等服务端/客户端,定义 FileSet/Job/Schedule/Storage/Pool,实现定时与远程存储。
三 恢复流程
- 场景A 文件级备份恢复(tar/rsync)
- 准备空目录并解包:
- mkdir -p /opt/openelm-restored && cd /opt/openelm-restored
- tar -xvpzf /backup/openelm_YYYY-MM-DD.tar.gz
- 校验一致性(可选):对比校验和或清单;核对关键文件是否存在(权重、配置、分词器)。
- 启动服务/推理脚本,验证版本与输出一致性。
- 场景B 快照恢复(LVM)
- 挂载快照并备份为归档,再按“场景A”解包到目标位置;或直接使用快照内容回滚(视变更窗口与业务要求)。
- 场景C 企业级备份恢复(Bacula)
- 通过 Bacula Console/Web UI 选择 Job/时间点,指定恢复目标路径,执行恢复;完成后校验文件与权限。
四 版本升级与回滚的安全做法
- 升级前:
- 停止服务,按“第二节”完成全量备份(权重、配置、脚本、词表、数据集索引等)。
- 升级中:
- 下载并部署新版本(源码/包管理器/容器镜像),保留旧版本目录以便回滚。
- 升级后:
- 校验版本与输出;如异常,立即停服务→恢复备份→回滚版本,确认业务恢复后再行评估。
五 自动化与演练
- 定时任务(示例每日 2 点增量同步 + 每周全量归档):
- 0 2 * rsync -avz --delete /path/to/openelm/ /backup/openelm/latest/
- 0 3 0 tar -cvpzf /backup/openelm/$(date +%F).tar.gz -C /backup/openelm/latest/ .
- 定期恢复演练:
- 每月从备份中抽取样本进行全链路恢复演练(权重加载、推理验证、日志比对),确保备份可用且可用快速。