回滚。分支。共享。每个容器底层的状态模型。
五种文件系统原语加上 BTRFS 写时复制层,让容器状态得以持久化、时光穿梭,并在服务器间迁移——全程无需离开 HTTP。
/hoody/storage · /hoody/databases · /ramdisk · /hoody/shares · BTRFS 快照
/ ├── hoody/ │ ├── storage/ ← persistent, per-container │ ├── databases/ ← concurrent-safe SQLite (FUSE) │ └── shares/ ← inter-container directory mounts ├── ramdisk/ ← RAM-backed, 50% of container memory └── ... ← standard Linux FS (ext4, POSIX)
文件系统地图。
每条路径有不同的持久化与并发特性。选择正确的路径是整个心智模型的核心。各部分详细解析见下方章节。
/hoody/storage
每个容器的持久化目录,重启后保留,快照会捕获它。这是普通的 ext4 目录——无 FUSE,无超出应用自身提供的并发安全保障。
/hoody/databases
FUSE 挂载,自动处理 WAL 锁定。同一服务器上的多进程、多容器可并发安全写入 SQLite——不再出现「数据库已锁定」。仅需改路径:将文件从 /app/data.db 移至 /hoody/databases/data.db。仅限宿主机级别——不支持跨服务器复制。
/ramdisk
速度 10–20 GB/s、延迟 <1µs 的 RAM 支持 tmpfs。上限为容器内存的 50%,按需分配(空时占 0 字节)。容器重启后保留,宿主机重启后清空。使用量与应用内存竞争。
/hoody/shares
通过 Storage Shares API 实现的容器间目录挂载。只读或读写,1 对 1 或项目范围。跨服务器共享自动使用 NFS——无需配置挂载。生命周期管理(接受 / 拒绝 / 挂载 / 撤销)位于 /platform/control-plane。
/ (ext4)
其余所有位置均为标准 Linux 文件系统。POSIX、ext4、完整语义。在 /hoody/* 路径外,行为与任何 VPS 相同。
底层的 BTRFS
磁盘支持路径下的写时复制层。块级快照,容器间数据去重。即时创建,空间高效恢复。(不适用于 /ramdisk——那是 RAM 中的 tmpfs。)
写时复制,块级,即时完成。
BTRFS 只存储自快照点以来发生变化的块。创建快照仅添加一个标记,不复制数据。成本只与容器实际变化量有关——与快照数量或共享同一基础镜像的容器数无关。
t0 — 快照 A
容器文件系统包含块 a、b、c,快照 A 引用所有三块。
t1 — 块 b 发生变化
写修改将 b 复制为 b',原始 b 仍被快照 A 引用。容器现在看到 a、b'、c。
t2 — 快照 B
快照 B 捕获 a、b'、c。A 和 B 共享 a 和 c,只有 b/b' 不同。总存储:4 块而非 6 块。
运行中或已停止——容器状态决定快照类型。
运行中创建快照将同时捕获进程、内存、终端历史、浏览器标签页和网络连接以及文件系统;停止后创建则仅捕获文件系统。API 调用相同,类型自动判断。
运行中 → 有状态
完整机器状态,冻结保存。
- +文件系统(/ 下所有内容,包括 /hoody/*)
- +运行中的进程(PID、父子关系)
- +内存 + RAM 转储
- +终端历史与打开的会话
- +浏览器标签页与活跃显示内容
- +数据库连接状态
- +网络连接(套接字、已建立的 TCP)
- +打开的文件(fd 表)
- +环境变量
已停止 → 无状态
仅文件系统。恢复 = 从该文件系统全新启动。
- ·仅文件系统
- ·无进程——恢复后以冷启动方式启动容器
- ·无内存——快照中无 RAM 转储
- ·无网络状态——连接需重新建立
— 恢复是破坏性操作:它将覆盖当前实时状态。如需保留当前状态,请先创建快照,再恢复目标快照。
让智能体放手去试。保留撤销按钮。
接触认证中间件、数据库迁移或大规模重构的 LLM,最能受益于「运行前先快照」模式。创建成本低,恢复速度快,双向各一次 API 调用。
没有快照
- 1.智能体重构认证中间件,首轮冒烟测试通过。
- 2.合并并部署,数天内一切看似正常。
- 3.生产环境会话开始悄无声息地丢失。
- 4.二分查找近期智能体提交耗时数小时——变更埋在大量 diff 中。
- 5.回滚意味着手动逐一撤销所有已合并的智能体 PR 并重新部署。
使用 Hoody 快照
- 1.在智能体运行前创建容器快照,起个别名,如 pre-auth-refactor。
- 2.让智能体工作:编辑文件、重启服务、运行冒烟测试。
- 3.一周后生产环境出现异常。
- 4.PATCH /snapshots/pre-auth-refactor——容器在 5–15 秒内恢复到智能体运行前的状态。
- 5.服务从快照恢复后,可对损坏状态创建新快照,留待离线调查。
安全网模式正是为何每个 AI 辅助工作流——代码生成、基础设施重构、数据库迁移——都应在已快照的容器中运行。快照成本低廉;发现 AI 引入问题的排查成本则不然。
工作流就是整台机器的提交图。
在风险操作前创建快照,然后持续迭代。如果结果良好,继续推进——快照低廉且可设置过期。如果出现问题,一次 PATCH 调用将容器恢复到原始状态——RAM、进程、打开的文件,一切如初。
t0 — 基线
POST /snapshots——标记为 v1.4.0-pre
t1 — 高风险操作
AI 智能体重构,迁移运行,服务重启
t2 — 出现问题
冒烟测试失败,需要回滚。
t3 — 恢复
PATCH /snapshots/v1.4.0-pre——5–15 秒恢复
t4 — 与 t0 完全一致
RAM、进程、文件系统完全匹配 t0,零偏差。
PATCH /api/v1/containers/ID/snapshots/v1.4.0-pre当 SSD 成为瓶颈时,/ramdisk 是答案。
容器内存的一半,以 /ramdisk 访问,按需分配。使用时占用空间,不用时自动释放。容器重启后保留,宿主机重启后清空。
⚠ /ramdisk 使用量计入容器内存。若容器有 4 GB 内存,/ramdisk 占用 3 GB,则应用仅剩 1 GB 可用。用 `free -h` 监控并在设计中谨慎控制用量。
团队实际使用的五种快照策略。
选定一种,状态管理纪律就变成一行决策,而非一份策略文档。大多数团队并行运行其中两到三种。
1 · 操作前安全保障
在任何破坏性操作前创建快照:数据库迁移、AI 代码生成、事故响应、手动热修复。
2 · 版本里程碑
在发布节点创建别名快照——v1.4.0、v1.5.0-rc,过期时间设为数周后。可即时回滚到任意命名版本。
3 · 每日自动化
定时快照 + 自动过期 = 自剪枝的历史记录。保留七天的每日快照、三十天的每月快照。
4 · Git 风格分支
快照 + 容器复制 = 在不同项目或服务器上的另一条时间线。在副本上尝试高风险路径。如果成功,将基线重建于此;同步是单向的,副本成为新的事实来源。
5 · 黄金镜像模板
种子快照,从快照复制创建每个新开发容器。入职变成一次 POST 调用。
加餐 · 取证保全
当生产环境遭入侵时:对受损状态创建快照用于调查,从早期干净快照恢复生产环境,离线对比两者差异。事故响应,证据不丢失。
否则你需要自行拼凑的东西。
回滚、有状态捕获、并发安全 SQLite、跨容器共享、RAM 支持的暂存空间——传统方案各有应对。以下是真实的并排对比。
| 场景 | Hoody 数据与状态 | 传统方案 |
|---|---|---|
| 回滚整台机器 | PATCH /containers/ID/snapshots/NAME | Tarball + 手动重新部署 + 祈祷 |
| 捕获运行中的内存状态 | Stateful snapshot (automatic) | VMware 挂起 + 自定义工具 |
| 跨容器目录共享 | /hoody/shares + Shares API | 自行运行 NFS 或 SMB 服务器 |
| SQLite 并发写入 | /hoody/databases (FUSE mount) | 将数据层迁移到 Postgres |
| RAM 支持的暂存空间 | /ramdisk (ceiling 50% memory) | tmpfs + 精心配置的 ulimits |
| 相似容器间的存储去重 | BTRFS copy-on-write (built in) | rsync --link-dest + 手动策略 |
| 跨服务器状态复制 | POST /containers/ID/copy + /sync | 自制 rsync 循环 + 服务重启 |
如果已针对特定工作负载使用了托管 VM 快照系统,就继续用于该工作负载。当真正需要的原语是容器级时光机时,Hoody 的状态模型才真正发挥价值。
状态已是提交图。学会用它。
文件系统已就绪,快照已就绪,挂载已就绪。启动一个容器,完整状态模型即刻生效。
另见——/platform/control-plane(快照与复制/同步 API),/kit/files(云后端),/kit/sqlite(SQLite 作为 HTTP)。