longhorn快照非备份,仅存本地增量;必须执行backup操作才能上传至s3/nfs等远程存储;snapshot与backup是独立对象,backup依赖snapshot但可单独保留;recurringjobs需用标准utc cron且注意时区换算。

Longhorn 卷的快照不是备份,snapshot create 只存增量差量
很多人在 longhorn-ui 点完 Create Snapshot 就以为数据“已备份”,结果节点宕机后发现快照全丢了。因为 Longhorn 的快照默认只存在本地磁盘(对应 volume 所在节点的 /var/lib/longhorn/replicas/),不跨节点复制,也不上传到任何外部存储。
实操建议:
- 快照必须配合
backup操作才真正落盘到 S3/NFS 等远程后端;单独调用longhorn backup create或在 UI 点 “Create Backup” 才会触发上传 -
snapshot和backup是两个独立对象:一个在内存+本地磁盘,一个在远程存储;backup依赖某次snapshot作为源,但删掉 snapshot 不一定删 backup(取决于是否启用backupStorePollInterval自动清理) - 注意
backupTarget配置路径末尾必须带/,比如s3://longhorn-backup@cn-north-1/,少斜杠会导致静默失败,日志里只报failed to list backups
设置 recurrentBackup 时,cron 格式不支持秒级,且时区是 UTC
想每 5 分钟自动备份?写成 */5 * * * * 是对的;但写成 *\/5 * * * * 或 0 */5 * * *(想每 5 小时)就完全不会触发——Longhorn 的 cron 解析器只兼容标准 vixie-cron,不支持秒字段,也不识别 0 */5 这种写法(它会当成 0 分、每 5 小时一次,实际是每天 0:00、5:00、10:00…)。
实操建议:
- 所有
recurrentBackup的时间都按 UTC 解析,和集群节点本地时区无关;如果集群在东八区,想每天凌晨 2 点备份,得设成0 2 * * *(UTC 时间 2 点 = 北京时间 10 点),所以应填0 18 * * * - 通过
kubectl edit volumes.longhorn.io <vol-name></vol-name>直接改recurringJobs字段最可靠;UI 上编辑容易丢参数,尤其当同时配 retention 和 labels 时 - Retention 数值设为
0不代表“保留全部”,而是“不清理”,长期运行会导致 backup 对象堆积,S3 费用和 list 延迟上升
从 backup 恢复 volume 时,restore 不等于 clone,不能直接替换原 volume
看到 backup 列表里有个可用的 backup-xxx,就想点 “Restore” 回原 volume?不行。Longhorn 的 restore 操作本质是创建一个全新 volume(名字带 -restore- 后缀),并把 backup 数据拉取回来;它不会覆盖、卸载或停用原 volume,也不会自动绑定 PVC。
实操建议:
- 恢复前先确认目标 backup 的
state是Completed,且messages为空;Failed或Deleting状态下 restore 会卡住或报backup is not ready - 恢复后的 volume 默认是
detached状态,需手动attach;如果原 PVC 还绑着旧 volume,Kubernetes 不会自动切换,得先kubectl delete pvc再重建,或用clone方式新建 PVC 指向新 volume - 跨集群 restore 要求目标集群的 Longhorn 版本 ≥ 源集群版本,否则可能因
backupConfig字段不兼容而报cannot restore from backup created by newer version
使用 NFS 作 backup target 时,mountOptions 必须含 nfsvers=4.1,且服务端要开 rpcbind
很多用户用 NAS 挂 NFS 当 backup target,配置完却一直卡在 Connecting to backup target...,longhorn-manager 日志反复刷 failed to ping backup target。根本原因常是 NFS 协议协商失败:Longhorn 3.x+ 默认要求 NFSv4.1+,而多数 NAS 默认开的是 v3 或 v4.0。
实操建议:
- 在 Longhorn Settings 里设
backupTarget为nfs://192.168.1.100:/longhorn-backup/,再额外加backupTargetCredentialSecret(哪怕空 secret,用来触发 mount) - 必须在
Settings → General → backup-target-credential-secret下挂一个 Secret,内容至少含mountOptions: nfsvers=4.1,hard,intr,rsize=1048576,wsize=1048576;缺nfsvers=4.1就连不上 - NAS 服务端除了共享目录,还要确保
rpcbind服务运行(NFSv4.1 仍依赖它做初始端口映射),CentOS/RHEL 上执行systemctl enable --now rpcbind
快照链深度、backup target 权限、跨节点网络 MTU —— 这些地方不出错时没人提,一出就是恢复不了。盯紧 longhorn-backup 这个 namespace 里的 pod 日志,比看 UI 红绿灯管用。










