简体中文
备份与恢复
备份就是整个 config/ 目录打成一个 .tar.gz。把它在一台新机器上还原,再跑一遍安装器,这台设备就回来了。
备份里只有 config/,没有共享里的文件,没有仓库,没有容器卷,也没有数据集,想备份数据的同学请到数据所在的那台机器上想办法。存档本身不加密,里面的凭据由保险库主口令封存,config/ 的其余部分谁拿到文件谁就能看。恢复会覆盖 config/ 下的每一个文件,并让面板重启。换口令不会追到已经下载好的存档上,旧存档认的还是旧口令。没有迁移这回事,版本换了 config/ 的形状可以变,跨版本的存档不一定应用得上。
备份里有什么
- 整个
config/,一个普通的.tar.gz,没有别的。 - 存档第一个成员是
neutrino_backup.json,说明这是什么;第二个是SHA256SUMS,列出后面每个成员的摘要;再往后是config/这棵树。 - 保险库文件在里面的
credentials/vault.json。 - 存档能明文传输,是因为
config/里没有未封存的秘密:保险库的数据密钥只以主口令包住的形式存在。 - 上传恢复的文件最大 32 MiB。
| 备份里没有的 | 它在哪 |
|---|---|
| Samba 共享里的文件 | 提供共享的那台机器上的磁盘 |
| Gitea 仓库 | 那台机器上 Gitea 自己的数据目录 |
| 容器卷 | 跑 podman 的那台机器 |
| ZFS 数据集 | 存储池里 |
/etc/neutrino/agent | 每台机器上的被控端包 |
下载
1. 打开「设置」页,找到「配置存档」。
预期:说明是「包含整个 config/ 目录。里面的凭据以保险库主口令封存,恢复时会要求输入。」
2. 点「下载备份」。
预期:浏览器下载目录里多一个 .tar.gz,页面上写「备份已下载。」

TIP
存档是明文的。里面的内容能读,凭据是封存的。同时拿到存档和口令的人,就等于拿到了那些凭据。
保管好口令
保险库主口令是初始化第二屏里填的那一句,和面板密码是两回事。
1. 要换口令时,在中枢那台机器上跑。
bash
sudo nhub vault rekey预期:它问一遍新口令,然后打印 rekeyed,说明保险库现在用新口令打开。换口令只是把数据密钥重新用新口令包一次,已经封存的东西不会重新加密,数据密钥本身也没变。
2. 脚本里不想交互时用这一条。
bash
printf '%s' "$NEW_PASSPHRASE" | sudo nhub vault rekey --stdin预期:没有任何提示,直接换好。
DANGER
换口令之前下载的存档,只认旧口令。
旧存档还没清掉之前,两个口令都要留着。
恢复
1. 在设置页点「从文件恢复」,选中存档。
预期:弹出「恢复 {name}」,正文是「config/ 下的每个文件都会被存档里的覆盖,配置随即应用,面板自行重启。」,下面有「保险库主口令」一栏。

2. 填这份存档所属那台机器的主口令,点「恢复」。
预期:先是恢复中,再是「正在应用恢复的配置,重服务重新渲染时这可能要几分钟。」,最后是「面板正在重启,本页会自行刷新。请用恢复后的密码登录。」
| 被拒绝 | 什么意思 |
|---|---|
| 备份是 .tar.gz 文件,这个文件不是 | 后缀不对 |
| 这不是 Neutrino 的备份 | 没有那个说明成员 |
backup_corrupt | SHA256SUMS 里有摘要对不上 |
vault_passphrase_needed、vault_passphrase_wrong | 存档里的保险库用你填的口令打不开 |
backup_too_large | 超过 32 MiB |
WARNING
文件已经覆盖好了,应用那一步仍然可能失败,面板会把原因打在上面。
文件既然在了,就照它说的做:在终端里跑 sudo nhub apply,修掉原因再跑一次。面板自己没回来时也一样,跑完再刷新页面。
恢复之后
bash
# 1. 每个模块还渲染得出来吗。应该没有报错,也没有差异。
sudo nhub apply --dry-run
# 2. 服务起来了吗。应该看到面板正在运行。
systemctl status neutrino_hub_web- 面板密码是恢复出来的那个,不是这台机器原来那个。
- 保险库口令是这份存档被取走时的那个,直到你再换一次。
- 被控端会自己连回来;hub 身份变了的那些会被要求重新加入,它们那边的说法是 hub 的身份变了,被重置或者重装过。
