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备份恢复rsnapshot2026/10/22

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)
-vverbose 1 级,仅屏显
-tdry-run:打印将要执行的命令但不真正执行
-x一次性跨级别执行(如 -t monthly 轮转全链)
-q安静模式
-V最高详细度
-Drsync 加 --debug 输出

关键差异解读:子命令的名字与配置里 retain 级别名严格对应——配置定义了 hourly/daily/weekly/monthly,就只能运行这四个名字;配置若用 alpha/beta 命名(retain 支持自定义级别名),子命令也随之变成 rsnapshot alpha。这是理解 rsnapshot 命令体系的钥匙:子命令不是硬编码,是配置的投影。

三、前置条件

本文命令在以下就绪状态上实测,读者复现前先完成对应检查:

  1. 已安装 rsnapshot 1.4.3(安装与部署全流程见 《Ubuntu 22.04 安装 rsnapshot 1.4.3 指南》);
  2. 主配置语法合法、参数含义明确(逐参数解析见 《rsnapshot 1.4.3 配置参数详解》);
  3. 快照根目录 /srv/rsnapshot/ 已存在(no_create_root 1 时必须先建);
  4. 验证就绪:
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 轮转链,恢复操作永远从快照「拷出」,不要原地改。

九、注意事项

  1. 子命令名 = 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。

  1. 并发互斥: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 能自动识别并清理。
  2. 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/
  1. 日志定位:任何一次运行的完整动作(含每条 mv/rsync 命令)都在 logfile 里,排障第一动作 tail -50 /var/log/rsnapshot.log。
  2. 远端免密:远程备份依赖 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 节流程),确认无误再覆盖生产路径,覆盖窗口内对被恢复目录的写入会被覆盖——需要业务无感的恢复,先停写或做好双写补偿。

十一、参考链接