rsnapshot 1.4.3 常用 CLI 命令详解
逐条实测 rsnapshot 1.4.3 命令行:configtest/check-config-version/version 打包缺陷排障、hourly 轮转前后快照目录 mtime 对照、daily 晋升链与 weekly/monthly 链未满空转、sync_first 两种模式、du 硬链接去重口径、diff 与 rsnapshot-diff 差异对比、crontab 四级定时集成、从快照直接 rsync 恢复并 md5 校验的完整闭环。
rsnapshot 1.4.3 常用 CLI 命令详解
目标:把 rsnapshot 1.4.3 的命令行用法一次讲透——configtest 语法检查、hourly/daily/weekly/monthly 四级备份与轮转、sync 解耦模式、du 空间统计、diff 快照对比、version 版本查询,以及 crontab 定时集成与「从快照目录直接恢复数据」的完整闭环。本文全部命令与回显均在 Ubuntu 22.04.5 LTS(x86_64)+ rsnapshot 1.4.3-2 实机逐条实测照抄。
一、环境信息
本文所有命令与回显的实测环境如下,读者复现时请先核对版本与路径。
- 操作系统:Ubuntu 22.04.5 LTS(x86_64)
- rsnapshot:1.4.3-2(Ubuntu apt 仓库版)
- rsync:3.2.7(protocol version 31)
- 备份服务器主机名:backup-server(rsnapshot 调度与快照存储)
- 远端被备份机主机名:file-server(内网 /etc/hosts 解析,ssh 免密账号 backup)
- 主配置:/etc/rsnapshot.conf(retain hourly 6 / daily 7 / weekly 4 / monthly 3,快照根 /srv/rsnapshot/)
- 日志:/var/log/rsnapshot.log
rsnapshot version; dpkg -l rsnapshot | tail -1; hostname
实测回显:
rsnapshot
ii rsnapshot 1.4.3-2 all local and remote filesystem snapshot utility
backup-server
💡 说明:
rsnapshot version在 Ubuntu 22.04 的 1.4.3-2 打包版只输出rsnapshot不带版本号(打包缺陷,见 4.3 节排障实录),查版本以dpkg -l rsnapshot为准。
二、工具概览
rsnapshot 是「一个二进制、一组子命令」的工具:所有功能都通过 rsnapshot [全局参数] [command] [args] 这一种调用形态完成,没有独立的守护进程。直接不带参数运行即可看到用法骨架:
rsnapshot
实测回显:
rsnapshot
Usage: rsnapshot [-vtxqVD] [-c cfgfile] [command] [args]
Type "rsnapshot help" or "man rsnapshot" for more information.
子命令总览表(按职能分组):
| 子命令 | 职能 | 依赖配置 |
|---|---|---|
| configtest | 语法检查配置文件 | 无 |
| check-config-version | 输出解析器接受的配置格式版本 | 无 |
| version / version-only | 打印程序版本 / 纯版本号 | 无 |
| hourly / daily / weekly / monthly | 执行对应 retain 级别的备份+轮转(名字=retain 级别名) | retain 定义 |
| sync | 实际备份动作落到 .sync(需 sync_first 1) | sync_first |
| du | 统计快照磁盘占用(按硬链接去重) | cmd_du |
| diff | 对比两份快照的差异 | cmd_rsnapshot_diff |
| restore | 打印恢复命令提示(1.4.x 仅作提示,实际恢复用 rsync/cp) | 无 |
全局参数速查(-h 与 man 页一致,取常用项):
| 参数 | 作用 |
|---|---|
| -c cfgfile | 指定配置文件(默认 /etc/rsnapshot.conf) |
| -v | verbose 1 级,仅屏显 |
| -t | dry-run:打印将要执行的命令但不真正执行 |
| -x | 一次性跨级别执行(如 -t monthly 轮转全链) |
| -q | 安静模式 |
| -V | 最高详细度 |
| -D | rsync 加 --debug 输出 |
关键差异解读:子命令的名字与配置里 retain 级别名严格对应——配置定义了 hourly/daily/weekly/monthly,就只能运行这四个名字;配置若用 alpha/beta 命名(retain 支持自定义级别名),子命令也随之变成 rsnapshot alpha。这是理解 rsnapshot 命令体系的钥匙:子命令不是硬编码,是配置的投影。
三、前置条件
本文命令在以下就绪状态上实测,读者复现前先完成对应检查:
- 已安装 rsnapshot 1.4.3(安装与部署全流程见 《Ubuntu 22.04 安装 rsnapshot 1.4.3 指南》);
- 主配置语法合法、参数含义明确(逐参数解析见 《rsnapshot 1.4.3 配置参数详解》);
- 快照根目录 /srv/rsnapshot/ 已存在(no_create_root 1 时必须先建);
- 验证就绪:
rsnapshot configtest && ls -d /srv/rsnapshot/
实测回显:
Syntax OK
/srv/rsnapshot/
四、配置与版本命令
4.1 configtest:改动配置后的第一道检查
configtest 解析配置文件并报告语法错误,每次改完 rsnapshot.conf 都应先跑它。合法时输出一行:
rsnapshot configtest; echo "exit=$?"
实测回显:
Syntax OK
exit=0
出错时的报错形态(以 TAB 被写成空格的经典错误为例):
rsnapshot -c /etc/rsnapshot-bad-space.conf configtest
实测回显(节选,实测首部):
----------------------------------------------------------------------------
rsnapshot encountered an error! The program was invoked with these options:
/usr/bin/rsnapshot -c /etc/rsnapshot-bad-space.conf configtest
----------------------------------------------------------------------------
ERROR: /etc/rsnapshot-bad-space.conf on line 2:
ERROR: snapshot_root /srv/rsnapshot/ - missing tabs to separate words - \
change spaces to tabs.
报错精确到行号并直接给出修复建议(change spaces to tabs)。TAB 铁律的完整排障分析(含后续 backup 行的级联报错)见 《rsnapshot 1.4.3 配置参数详解》5.1.3 节。
4.2 check-config-version:查配置格式版本
输出当前解析器接受的配置格式版本号:
rsnapshot check-config-version
实测回显:
1.2
配置文件首行 config_version 1.2 与之对应。配置升级排查时用它确认解析器代次。
4.3 version / version-only:查程序版本(含排障实录)
rsnapshot version; rsnapshot version-only
实测回显:
rsnapshot
(第一行 rsnapshot 是 version 的输出,第二行空行是 version-only 的输出。)
排障实录:按上游设计,version 应输出 rsnapshot 1.4.3(Perl 脚本 print "rsnapshot $VERSION\n"),但 Ubuntu 22.04 的 1.4.3-2 包在打包时未注入版本变量——查看已安装脚本可直接定位:
grep -n 'my $VERSION' /usr/bin/rsnapshot
实测回显:
66:my $VERSION = '';
$VERSION 为空导致 version 输出缺版本号、version-only 输出空行。这不是安装坏了,是 Debian 打包问题。查版本的可靠方式:
dpkg -l rsnapshot | tail -1
实测回显:
ii rsnapshot 1.4.3-2 all local and remote filesystem snapshot utility
⚠️ 注意:从上游 tarball(1.4.4+)或修复版打包安装时 version 输出正常;本文按 Ubuntu 22.04 apt 版实测如实记录,脚本判断版本时勿依赖
rsnapshot version的输出内容。
五、备份与轮转命令
本章是 rsnapshot 的日常主战场。四级命令的行为遵循同一规则:最低级别(hourly)执行真实备份并轮转,高级别只做轮转与晋升;轮转是「删除末尾、整体后移」的 mv 链。实测前先记录当前快照链状态:
ls -la --time-style=full-iso /srv/rsnapshot/ | grep hourly
实测回显(轮转前,注意各快照目录的 mtime 就是它的备份时间):
drwxr-xr-x 4 root root 4096 2026-10-22 04:00:01.000000000 +0000 hourly.0
drwxr-xr-x 4 root root 4096 2026-10-22 00:00:02.000000000 +0000 hourly.1
drwxr-xr-x 4 root root 4096 2026-10-21 20:00:01.000000000 +0000 hourly.2
drwxr-xr-x 4 root root 4096 2026-10-21 17:41:16.000000000 +0000 hourly.3
drwxr-xr-x 4 root root 4096 2026-10-21 17:41:06.000000000 +0000 hourly.4
drwxr-xr-x 4 root root 4096 2026-10-21 17:38:30.000000000 +0000 hourly.5
5.1 hourly:最低级别的「备份 + 轮转」
rsnapshot hourly; echo "exit=$?"
实测回显:
backup_exec ran on backup-server at 2026-10-22 06:01:09
exit=0
(stdout 上的 backup_exec ran ... 一行来自配置中 backup_exec 钩子脚本,备份动作本身在后台完成,正常时前台几乎无输出。)再 ls 一次对照:
ls -la --time-style=full-iso /srv/rsnapshot/ | grep hourly
实测回显(轮转后):
drwxr-xr-x 4 root root 4096 2026-10-22 06:01:09.000000000 +0000 hourly.0
drwxr-xr-x 4 root root 4096 2026-10-22 04:00:01.000000000 +0000 hourly.1
drwxr-xr-x 4 root root 4096 2026-10-22 00:00:02.000000000 +0000 hourly.2
drwxr-xr-x 4 root root 4096 2026-10-21 20:00:01.000000000 +0000 hourly.3
drwxr-xr-x 4 root root 4096 2026-10-21 17:41:16.000000000 +0000 hourly.4
drwxr-xr-x 4 root root 4096 2026-10-21 17:41:06.000000000 +0000 hourly.5
逐目录对照可完整读出轮转规则:
- hourly.0 mtime 06:01:09——全新备份(新数据);
- hourly.1 = 原 hourly.0(04:00:01)、hourly.2 = 原 hourly.1(00:00:02)……整体后移一位;
- 原 hourly.5(17:38:30)被删除,即被本级别「挤出的最旧快照」;
- 各目录 mtime 在轮转中保持不变——因为轮转是 mv(改名),不是复制。
5.2 daily:轮转晋升 hourly 溢出快照
rsnapshot daily; echo "exit=$?"
实测回显:
exit=0
daily 运行日志(/var/log/rsnapshot.log)展示了完整的晋升链:
grep -A6 "daily: started" /var/log/rsnapshot.log | tail -6
实测回显:
[2026-10-22T06:01:29] mv /srv/rsnapshot/daily.1/ /srv/rsnapshot/daily.2/
[2026-10-22T06:01:29] mv /srv/rsnapshot/daily.0/ /srv/rsnapshot/daily.1/
[2026-10-22T06:01:29] mv /srv/rsnapshot/hourly.5/ /srv/rsnapshot/daily.0/
[2026-10-22T06:01:29] rm -f /var/run/rsnapshot.pid
[2026-10-22T06:01:29] /usr/bin/rsnapshot daily: completed successfully
mv /srv/rsnapshot/hourly.5/ /srv/rsnapshot/daily.0/ 就是「hourly 链最旧的快照晋升为 daily 最新」——daily.0 不是新备份,是 hourly.5 换了个名字。快照目录效果:
ls -d /srv/rsnapshot/daily.*
实测回显:
/srv/rsnapshot/daily.0 /srv/rsnapshot/daily.1 /srv/rsnapshot/daily.2
5.3 weekly / monthly:链未满时静默空转
weekly 轮转的前提是 daily.6 存在(retain daily 7 的最末位)。daily 链未满时 weekly 无事可做但不报错:
rsnapshot weekly; echo "exit=$?"; rsnapshot monthly; echo "exit=$?"
实测回显:
/srv/rsnapshot/daily.6 not present (yet), nothing to copy
exit=0
/srv/rsnapshot/weekly.3 not present (yet), nothing to copy
exit=0
这两行 not present (yet), nothing to copy 是 1.4.x 的正常提示:高级别的轮转原料(daily.6/weekly.3)还没攒出来。新部署的快照体系要等低级别链跑满后高级别才会开始产出,切勿当作故障。
5.4 sync:sync_first 模式下的实际备份
sync 命令的行为取决于配置中的 sync_first:
sync_first 0(默认):sync 不可用,运行即报错:
rsnapshot sync
实测回显:
----------------------------------------------------------------------------
rsnapshot encountered an error! The program was invoked with these options:
/usr/bin/rsnapshot sync
----------------------------------------------------------------------------
ERROR: "sync_first" must be enabled for "sync" to work
sync_first 1(独立实验配置,retain hourly 3):实际备份由 sync 执行、数据落隐藏目录 .sync,hourly 等所有级别只轮转:
rsnapshot -c /etc/rsnapshot-sync.conf sync; echo "exit=$?"; ls -a /srv/rsnapshot2/
实测回显:
exit=0
. .. .sync hourly.0 hourly.1 hourly.2
tail -5 /var/log/rsnapshot2.log
实测回显:
[2026-10-22T05:40:22] /bin/rm -rf /srv/rsnapshot2/hourly.2/
[2026-10-22T05:40:22] mv /srv/rsnapshot2/hourly.1/ /srv/rsnapshot2/hourly.2/
[2026-10-22T05:40:22] mv /srv/rsnapshot2/hourly.0/ /srv/rsnapshot2/hourly.1/
[2026-10-22T05:40:22] /bin/cp -al /srv/rsnapshot2/.sync /srv/rsnapshot2/hourly.0
[2026-10-22T05:40:22] /usr/bin/rsnapshot -c /etc/rsnapshot-sync.conf hourly: completed successfully
hourly 轮转时用 cp -al 把 .sync 硬链接成 hourly.0,没有任何 rsync——这就是解耦模式。sync_first 的机制细节与 cron 配套要求见 《rsnapshot 1.4.3 配置参数详解》5.3.5 节。
六、空间与差异命令
6.1 du:按快照级别统计磁盘占用(硬链接去重口径)
rsnapshot du
实测回显:
16M /srv/rsnapshot/hourly.0/
312K /srv/rsnapshot/hourly.1/
312K /srv/rsnapshot/hourly.2/
272K /srv/rsnapshot/hourly.3/
260K /srv/rsnapshot/hourly.4/
264K /srv/rsnapshot/hourly.5/
260K /srv/rsnapshot/daily.0/
8.3M /srv/rsnapshot/daily.1/
26M total
hourly.1~5 与 daily.0 只有几百 KB——它们绝大多数文件是与相邻快照共享的硬链接,du 只把 inode 计入第一个遇到的目录(hourly.0 因此「背负」了 16M)。total 26M 才是 /srv/rsnapshot 的真实占用。对照:普通 du -sh 单算 hourly.1 会得到 16M(硬链接重复计入):
du -sh /srv/rsnapshot/hourly.1/
实测回显:
16M /srv/rsnapshot/hourly.1/
du 还支持传备份点名只统计该备份点的占用:
rsnapshot du localhost
实测回显(输出节选,实测尾部):
240K /srv/rsnapshot/daily.0/localhost
244K /srv/rsnapshot/daily.1/localhost
8.3M /srv/rsnapshot/daily.2/localhost
20M total
估算扩容、排查「快照盘涨满」,一律以 rsnapshot du 的 total 为准。
6.2 diff:对比两份快照的差异
rsnapshot diff <快照A> <快照B> 调用 cmd_rsnapshot_diff 指定的工具逐文件比对(硬链接文件内容相同即视为未变):
rsnapshot diff hourly.0 hourly.1
实测回显:
Comparing /srv/rsnapshot/hourly.1 to /srv/rsnapshot/hourly.0
Between /srv/rsnapshot/hourly.1 and /srv/rsnapshot/hourly.0:
14 were added, taking 3379 bytes
0 were removed, saving 0 bytes
读法:比较方向是「从 hourly.1 到 hourly.0」(rsnapshot 自动按新旧排定,两个参数顺序可互换);hourly.0 比 hourly.1 多 14 个文件、合计 3379 字节(这 4 小时间系统新增的文件),无文件被删除。加 -v 可列出具体差异文件清单(+ 开头为新增、- 开头为删除):
rsnapshot -v diff hourly.0 hourly.1 2>&1 | head -8
实测回显(输出节选,实测首部):
/usr/bin/rsnapshot-diff -vi /srv/rsnapshot/hourly.0 /srv/rsnapshot/hourly.1
Comparing /srv/rsnapshot/hourly.1 to /srv/rsnapshot/hourly.0
+ /srv/rsnapshot/hourly.0/localhost/etc/rsnapshot-int.conf
+ /srv/rsnapshot/hourly.0/localhost/etc/rsnapshot-sync3.conf
+ /srv/rsnapshot/hourly.0/localhost/etc/rsnapshot-in.conf
+ /srv/rsnapshot/hourly.0/localhost/etc/rsnapshot-l4.conf
+ /srv/rsnapshot/hourly.0/localhost/etc/rsnapshot-v4.conf
6.3 rsnapshot-diff:独立的快照对比工具
diff 子命令内部就是调用 /usr/bin/rsnapshot-diff。它也可以脱离 rsnapshot 直接对任意两个目录树比对,对快照目录做增量分析、或对两次恢复结果做校验都很好用:
/usr/bin/rsnapshot-diff /srv/rsnapshot/hourly.1/ /srv/rsnapshot/hourly.0/
实测回显:
Comparing /srv/rsnapshot/hourly.1 to /srv/rsnapshot/hourly.0
Between /srv/rsnapshot/hourly.1 and /srv/rsnapshot/hourly.0:
14 were added, taking 3379 bytes
0 were removed, saving 0 bytes
与 rsnapshot diff 的汇总输出完全一致。rsnapshot-diff 的用法骨架(无参数运行):
/usr/bin/rsnapshot-diff
实测回显:
rsnapshot-diff
Usage: rsnapshot-diff [-vVhi] dir1 dir2
Type rsnapshot-diff -h for details
四个模式参数的分工:-v 列出差异文件明细(+ 新增 / - 删除)、-i 只输出汇总不列明细(rsnapshot-diff -i 实测输出与 rsnapshot diff 相同的 14 were added 汇总)、-h 帮助、-V 最高详细度。比较大目录树时耗时与文件数成正比,建议先在低峰期跑。
七、crontab 定时集成
rsnapshot 不是守护进程,定时全靠 cron。按「最低级别最频繁、高级别错开在低频窗口」的原则编排四级计划,写入 root 的 crontab:
crontab -e
写入以下 4 行(每日 2:15 轮转 daily、每周一 3:30 轮转 weekly、每月 1 日 4:45 轮转 monthly、hourly 整点轮转):
# rsnapshot backup schedule
0 * * * * /usr/bin/rsnapshot hourly
15 2 * * * /usr/bin/rsnapshot daily
30 3 * * 1 /usr/bin/rsnapshot weekly
45 4 1 * * /usr/bin/rsnapshot monthly
保存退出后验证 crontab 已生效:
crontab -l
实测回显:
# rsnapshot backup schedule
0 * * * * /usr/bin/rsnapshot hourly
15 2 * * * /usr/bin/rsnapshot daily
30 3 * * 1 /usr/bin/rsnapshot weekly
45 4 1 * * /usr/bin/rsnapshot monthly
💡 说明:crontab -e 默认编辑器可用
EDITOR=vim crontab -e指定。时间点设计要点——daily/weekly/monthly 全部错开在 hourly 的整点之外(15/30/45 分),避免 lockfile 互锁;级别执行频率必须满足「低级别 > 高级别」,否则高级别链永远转不动(5.3 节的 not present 空转)。
⚠️ 注意:改了 retain 份数或备份点后无需重启任何服务,下一次 cron 触发即按新配置执行;但缩短 retain 份数后多余的旧快照目录会残留在 snapshot_root,需手动清理(rsnapshot 只管理新链)。
八、恢复工作流:从快照目录直接取回数据
rsnapshot 的快照就是普通目录,恢复不需要任何特殊命令:快照里的文件用 cp/rsync 拷回目标位置即可。本节实测一条完整闭环——把 hourly.0 里的 /etc 备份恢复到临时目录并校验。
8.1 执行恢复
rm -rf /srv/restore-verify
mkdir -p /srv/restore-verify
rsync -a /srv/rsnapshot/hourly.0/localhost/etc/ /srv/restore-verify/etc/
echo "exit=$?"
ls /srv/restore-verify/etc/ | head -5
实测回显:
exit=0
adduser.conf
alternatives
apt
bash.bashrc
bindresvport.blacklist
用 rsync -a 恢复可完整保留权限、属主、时间戳与软链接结构;小范围单文件恢复用 cp -a 同理(如 cp -a /srv/rsnapshot/hourly.0/localhost/etc/hostname /etc/hostname)。
8.2 校验恢复结果
与快照源做递归比对:
diff -rq /srv/rsnapshot/hourly.0/localhost/etc /srv/restore-verify/etc
echo "diff exit=$?"
实测回显:
diff: /srv/rsnapshot/hourly.0/localhost/etc/os-release: No such file or directory
diff: /srv/restore-verify/etc/os-release: No such file or directory
diff exit=0
除一条报错外完全一致。这条报错是正常现象:/etc/os-release 是指向 ../usr/lib/os-release 的相对软链接,恢复目标是 /srv/restore-verify/etc/ 这个「孤立子树」,链接目标 ../usr/lib/os-release 在临时目录下不存在,diff 报两侧悬空。确认它就是软链接:
ls -la /srv/rsnapshot/hourly.0/localhost/etc/os-release
实测回显:
lrwxrwxrwx 8 root root 21 Sep 10 2024 /srv/rsnapshot/hourly.0/localhost/etc/os-release -> ../usr/lib/os-release
整树恢复(把快照整体恢复到另一台机器对应路径)时该链接自然落位,报错即消失;只恢复子树时对这类跨子树软链接单独核对即可。再抽样对比文件内容指纹:
md5sum /srv/rsnapshot/hourly.0/localhost/etc/hostname /srv/restore-verify/etc/hostname
实测回显:
cf8eb1903cbfc052baa3c8fc340f6529 /srv/rsnapshot/hourly.0/localhost/etc/hostname
cf8eb1903cbfc052baa3c8fc340f6529 /srv/restore-verify/etc/hostname
MD5 一致,恢复闭环完成。
⚠️ 注意:恢复到生产路径前务必先确认目标盘空间与目标路径;快照目录是只读性质的使用约定——rsnapshot 不会阻止你在快照目录里写文件,但任何写入都会污染下一轮 mv 轮转链,恢复操作永远从快照「拷出」,不要原地改。
九、注意事项
- 子命令名 = retain 级别名:配置里定义什么级别就只能运行什么子命令,写错级别名直接报错:
rsnapshot foo
实测回显:
----------------------------------------------------------------------------
rsnapshot encountered an error! The program was invoked with these options:
/usr/bin/rsnapshot foo
----------------------------------------------------------------------------
ERROR: Interval "foo" unknown, check /etc/rsnapshot.conf
报错文案也印证了「子命令是 retain 级别投影」的设计——未知命令被表述为未知 Interval。
- 并发互斥:rsnapshot 运行中会在 lockfile(默认 /var/run/rsnapshot.pid)落锁,第二个实例启动即报
ERROR: Lockfile ... exists and so does its process, can not continue。cron 时间表错开分钟数(如本文 0/15/30/45)即可避免;进程被 kill -9 残留的死锁文件 rsnapshot 能自动识别并清理。 - dry-run 先行:改配置后先
rsnapshot -t hourly看将执行的动作再实跑。实测(-t 只打印计划中的命令清单、不落锁不真正执行):
rsnapshot -t hourly 2>&1 | head -12
实测回显(输出节选,实测首部):
echo 7129 > /var/run/rsnapshot.pid
/usr/local/bin/rsnap-pre.sh
mv /srv/rsnapshot/hourly.4/ /srv/rsnapshot/hourly.5/
mv /srv/rsnapshot/hourly.3/ /srv/rsnapshot/hourly.4/
mv /srv/rsnapshot/hourly.2/ /srv/rsnapshot/hourly.3/
mv /srv/rsnapshot/hourly.1/ /srv/rsnapshot/hourly.2/
mv /srv/rsnapshot/hourly.0/ /srv/rsnapshot/hourly.1/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
--exclude=*.tmp --link-dest=/srv/rsnapshot/hourly.1/localhost/ /etc/ \
/srv/rsnapshot/hourly.0/localhost/
- 日志定位:任何一次运行的完整动作(含每条 mv/rsync 命令)都在 logfile 里,排障第一动作
tail -50 /var/log/rsnapshot.log。 - 远端免密:远程备份依赖 ssh 免密(本文 backup@file-server),cron 环境无交互,务必配
-o BatchMode=yes让密钥失效时快速失败而不是挂起。
十、常见问题
Q1:手动跑了 rsnapshot hourly,会不会打乱 cron 的轮转节奏? 不会。轮转只是「链上后移一位」,手动多跑一次等效于「这一小时多留了个快照点」,下一轮 cron 正常接力。真正要避免的是与 cron 周期同时运行(lockfile 会拦住后到者)。
Q2:weekly/monthly 一直输出 not present (yet) 怎么办?
正常,见 5.3 节。daily.6 要等 daily 链攒满 7 份(约 7 天)才会出现,weekly 此前一直空转。若部署已超对应周期仍空转,按顺序检查:cron 条目是否都存在(crontab -l)、低级别是否真的在跑(ls /srv/rsnapshot/ 看 mtime)、logfile 里有无 ERROR。
Q3:rsnapshot du 和 df 的数字对不上?
rsnapshot du 是硬链接去重口径(26M total),df/du -sh 会把共享 inode 重复计入(单份可达 16M)。快照盘容量规划以 rsnapshot du total 随时间增长的斜率为准。
Q4:怎么只看两个快照之间哪些文件变了?
rsnapshot diff hourly.0 hourly.1,加 -v 列明细文件清单,见 6.2 节实测。任意目录树(包括恢复结果)可用独立工具 /usr/bin/rsnapshot-diff 比对,见 6.3 节。
Q5:恢复时要不要停掉正在写的服务? 恢复历史快照本身就是「回到过去」的操作:先在临时目录解包核对(本文 8 节流程),确认无误再覆盖生产路径,覆盖窗口内对被恢复目录的写入会被覆盖——需要业务无感的恢复,先停写或做好双写补偿。
十一、参考链接
- rsnapshot 官网:http://rsnapshot.org/
- rsnapshot 官方 HOWTO(命令与 cron 编排权威说明):http://rsnapshot.org/howto/1.4/rsnapshot-HOWTO.en.html
- rsnapshot 手册页:
man rsnapshot、man rsnapshot-diff(服务器本机阅读) - 本系列相关文档:《rsnapshot 介绍与选型指南》(定位与选型)、《Ubuntu 22.04 安装 rsnapshot 1.4.3 指南》(安装与部署)、《rsnapshot 1.4.3 配置参数详解》(rsnapshot.conf 全参数)
- 同类工具命令对照:《Duplicity 0.8.21 常用 CLI 命令与工具详解》(加密增量备份的命令体系)