服务公告

服务公告 > 技术教程 > 用 rsnapshot 做快照式备份:硬链接省空间

用 rsnapshot 做快照式备份:硬链接省空间

发布时间:2026-10-14 10:38
## 是什么与原理 rsnapshot 基于 rsync 实现快照式备份:看起来保存了多份完整目录快照,实际磁盘只占一份多的空间。魔法在硬链接:两次快照之间没变化的文件,第二次快照里的名字直接链接到第一次的数据块,不重复占用;变化了的文件才真正复制新副本。于是每小时、每天、每周的多级快照可以长期保留,每个快照都是某一时刻的完整视图,恢复时直接从对应快照拷文件,不需要解包任何归档。误删文件的恢复也因此轻松:任意级别的快照里都有那份文件当时的完整版本。 ## 最小配置 主配置 /etc/rsnapshot.conf,几个关键段。定义快照级别与保留数量: ``` retain hourly 6 retain daily 7 retain weekly 4 ``` 含义:保留六个小时级、七天级、四周级快照,轮转自动发生,过期自动清理。定义备份源: ``` snapshot_root /data/rsnapshot/ backup /var/www/example/ localhost/ backup root@db-host:/data/dump/ db-host/ ``` 本地目录直接备份,远端目录走 SSH 拉取,与 rsync 语法一致,ssh_args 段可指定端口与密钥,前提是免密通道已配好。注意这个配置文件的分隔符是制表符不是空格,写错会直接报错,这是新手第一坑。 ## 执行与验证 手动跑一次各级别确认无误: ```bash rsnapshot hourly ``` 完成后快照目录下出现 hourly.0,里面是完整目录树。再跑一次,hourly.0 变成 hourly.1,新的 hourly.0 生成。验证硬链接生效:du 统计快照根目录总量,两个快照的总体积应明显小于两份完整数据之和;比对 hourly.0 与 hourly.1 中同一未变文件的 inode 编号一致,链接关系坐实。之后交给 crontab 按级别定时执行,输出写日志。 ## 保留策略与注意 保留数量按恢复窗口定:小时级保最近半天,天级保一周,周级保一月,覆盖绝大多数误删发现周期。两个注意:硬链接只在同一文件系统内有效,快照根与源跨盘时机制退化;备份含敏感数据时目录权限收紧。快照防误删与误改,防不了整块盘损坏,异地再存一份导出件才算完整。顺云云服务器本地跑 rsnapshot,配合控制台快照功能整机兜底,两层互补。快照目录自身的磁盘水位也要监控,增量持续超出预期说明源数据在快速变化,保留策略该重新评估了。