rsnapshot 是建立在 rsync 之上的文件系统快照工具,可以为本机和多台远程主机保存增量备份。它大量使用硬链接:不同快照中没有变化的文件可以共用底层数据,而不是为每次备份重新占用一份完整空间。这里的“快照”是按目录组织的备份版本,不等同于存储系统的原子快照。
本文依据 Canonical / Ubuntu Server documentation contributors 的 How to install and configure rsnapshot 翻译整理。核对日期为 2026-10-05,源页显示最后更新于 2026-06-26;这不是已确认的首次发表日期。文中标为“编者补充”的内容用于说明部署与恢复边界,所有命令均未实际执行。

安装与访问条件
在 Ubuntu 上,原文使用软件仓库中的 rsnapshot:
sudo apt-get install rsnapshot
如果备份源在远程主机上,运行 rsnapshot 的备份服务器必须能够通过 SSH 非交互登录该主机;只备份本地目录时,不需要额外配置 OpenSSH。原文中的“无需密码”指计划任务不依赖人工输入密码,不意味着应该取消账户保护或跳过主机身份校验。
编者补充:为备份配置专用 SSH 密钥和最小必要读取权限,保留主机密钥校验,保护备份端的私钥。是否需要 root 取决于备份目录的读取权限;不要为了复制普通用户文件而直接开放全权限远程 root 登录。备份本身也可能包含配置、凭据和个人数据,需要受控的目录权限与独立保存策略。
确定备份根目录与保留层级
主要配置文件是 /etc/rsnapshot.conf。原文将所有快照放在以下目录:
snapshot_root /var/cache/rsnapshot/
配置格式提示:rsnapshot 配置项之间应使用制表符 Tab,不能简单把网页里的对齐空格当成配置分隔符。本稿配置代码保留了 Tab。修改前应保存原配置,并核对当前系统随包提供的注释和手册。
在 BACKUP LEVELS / INTERVALS 部分设置每类快照保留多少份。例如:
retain daily 6
retain weekly 7
retain monthly 4
这一组设置表示保留 6 个日级版本、7 个周级版本和 4 个月级版本。它们指导 rsnapshot 的轮转行为;名字本身不会创建定时任务,还需要后文的 cron 调度。保留份数也不能直接理解成一定覆盖最近多少自然日:任务失败或漏跑会改变实际覆盖范围。
编者补充:硬链接通常要求链接两端处于同一文件系统,快照空间仍会随着新增和改动文件增长。备份目录若与源目录共用一块磁盘,无法抵御该磁盘损坏;也不应把备份根目录包含进自己的备份源。不要直接编辑快照里的文件,因为硬链接关联的多个版本可能受到影响。
配置远程端口与备份目录
如果远程 SSH 服务没有使用默认的 22 端口,可以设置附加 SSH 参数:
ssh_args -p 22222
本地备份使用 backup 指令:先指定源目录,再指定快照根目录中的目标分类目录。以下配置把三个目录归入 localhost/:
backup /home/ localhost/
backup /etc/ localhost/
backup /usr/local/ localhost/
远程备份采用 用户@主机:路径 的写法。以下保留原文示例中的 root 账户和示例域名,用于解释语法,并不是建议直接用于生产环境:
backup root@example.com:/home/ example.com/ +rsync_long_args=--bwlimit=16,exclude=core
backup root@example.com:/etc/ example.com/ exclude=mtab,exclude=core
每条规则都可以附加 rsync 参数或排除规则。+rsync_long_args 前面的加号表示在默认长参数列表后追加;删除加号会替换整个默认列表,可能同时丢掉原来依赖的行为。例子里的 exclude=core 与 exclude=mtab 分别排除匹配项。--bwlimit=16 是原文的限速示例,应按当前 rsync 手册理解其单位并依据链路调整,不能当作通用推荐值。
更多参数请查看随安装包提供的 /etc/rsnapshot.conf 注释,以及 rsnapshot(1) 和 rsync(1)。不同 Ubuntu 版本可能随附不同版本的工具,最终以本机手册为准。
先检查配置,再执行第一次备份
原文给出了三个不同层级的操作,它们的含义不能混为一谈:
sudo rsnapshot configtest
sudo rsnapshot -t daily
sudo rsnapshot daily
configtest 检查配置语法;-t daily 展示该备份层级计划执行的操作;没有 -t 的 daily 才会真正复制和轮转快照。配置检查成功并不能证明文件读取权限、可用空间、远端连通性或恢复结果都正确。正式执行前,应检查预演输出中的源路径、目标路径和轮转操作。
编者补充:先在专用测试目录建立少量可识别的文件,完成一次备份后修改其中一部分,再做下一次备份。确认前后版本能分别读取、文件权限符合预期。数据库或仍在写入的应用文件未必能通过逐文件复制得到一致状态,需要应用原生导出、停写协调或合适的快照机制;rsnapshot 不会自动解决这些一致性问题。
用 cron 调度备份
当手动备份的行为符合预期后,再设置定时执行。rsnapshot 包提供 /etc/cron.d/rsnapshot,其中包含被注释的参考条目。原文示例为:
0 4 * * * root /usr/bin/rsnapshot daily
0 3 * * 1 root /usr/bin/rsnapshot weekly
0 2 1 * * root /usr/bin/rsnapshot monthly
它依次表示:每天 04:00 运行日级快照,每周一 03:00 运行周级快照,每月 1 日 02:00 运行月级快照。这里是系统 cron 文件,包含执行用户 root 这一列;不能原样当成用户自己的 crontab 格式。时间采用执行主机的 cron 时区。
编者补充:原文错开三个层级的启动时间,但一小时的间隔并不保证上一个长任务已经结束。需要结合实际耗时、锁文件行为、失败通知与日志检查安排调度,并监控磁盘容量。保留规则会淘汰旧版本,调整前先确认现有恢复窗口是否仍满足需求。
补上恢复演练
原文止于备份调度;以下为本稿补充的验证流程。选择一个明确的快照版本,把测试文件复制到全新的隔离恢复目录,核对内容、文件类型、权限和必要的符号链接。应用数据还需在隔离实例中验证能否被应用读取。先恢复到旁路目录,确认后再制定生产恢复步骤,避免直接覆盖现用文件。
至少记录一次演练使用的源版本、恢复范围、校验结果和耗时,并定期重复。本文没有执行备份、轮转或恢复;提供的是经静态核对的操作指南,而不是对任何现有备份可恢复性的承诺。












暂无评论内容