一、rsnapshot是什么?有啥用?
1.1、rsnapshot简介与工作原理
rsnapshot是一个基于 rsync 的文件系统快照工具。适用于 Linux 和类 Unix 操作系统,它可以通过 ssh 轻松创建本地机器和远程机器的定期快照;以轻量级、高效且易于配置的特点,广泛用于系统文件和数据的自动化备份。
|--------|--------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| rsnapshot是一个基于 rsync 的文件备份工具,旨在通过硬链接(hard link)实现高效的增量备份,避免重复存储相同文件,极大节省磁盘空间。且由于 rsnapshot 只保留固定数量的快照,因此使用的磁盘空间量不会持续增长。 |||
| 序号 | rsnapshot的工作原理 | 说明 |
| 1 | 初始备份 | 当 rsnapshot 进行第一次备份时,它会使用rsync将指定目录下的所有文件复制到备份位置。所有文件都完整地复制到备份目录中。 |
| 2 | 后续备份 | 在进行后续的备份时,rsnapshot 依赖硬链接(Hard Links)机制,只复制发生变化的文件,而不再复制未变动的文件。每次备份都会将上一次的备份目录重命名为 .0、.1 等,表示不同的快照。其中.0目录存放最新备份数据。通过 rsync 的 --link-dest 选项,rsnapshot会创建硬链接来引用那些未变动的文件。这些硬链接使得多个备份之间共享相同的文件数据,但在备份目录中显示为独立的文件,节省了磁盘空间。 |
[rsnapshot的工作原理]
1.2、rsnapshot的优势
|--------|------------------|-------------------------------------------------------|
| 序号 | rsnapshot的优势 | 说明 |
| 1 | 增量备份高效 | 首次备份为完整备份,后续仅备份变化的文件,未修改的文件通过硬链接指向已有备份,大幅减少存储占用和备份时间。 |
| 2 | 基于 rsync | 继承 rsync 的高效传输、压缩和校验功能,支持本地备份、远程 SSH 备份,且对带宽占用低。 |
| 3 | 多版本管理 | 可配置保留多个备份版本(如每日、每周、每月),方便恢复不同时间点的数据。 |
| 4 | 自动化执行 | 通过 cron 任务实现定时自动备份,无需人工干预。 |
| 5 | 轻量级配置 | 仅需一个简单的配置文件(/etc/rsnapshot.conf),即可定义备份源、目标、保留策略等。 |
[rsnapshot的优势]
二、在线安装配置rsnapshot
2.1、查看指定命令的完整路径
bash
#查看指定命令的完整路径语法【whereis 命令】
#1-查看cp命令所在的完整路径
whereis cp
#2-查看rm命令所在的完整路径
whereis rm
#3-查看rsync命令所在的完整路径
whereis rsync


2.2、在线安装配置rsnapshot
Linux的实用技巧------手动安装epel、系统性能监控与故障分析、彻底安全删除文件
bash
#在线安装rsnapshot
#1-先安装epel源
yum install epel-release -y
#2-直接安装rsnapshot
yum install rsnapshot -y
#3-配置rsnapshot的配置文件
cp /etc/rsnapshot.conf /etc/rsnapshot.conf.bak
#先创建一个用于快照备份的目录
mkdir -p /data/rsnapshot-workdir/
vi /etc/rsnapshot.conf
#【/etc/rsnapshot.conf】需修改的内容如下
#3.1-设置本机存储备份内容的基础路径(如:/data/rsnapshot-workdir/)
snapshot_root /data/rsnapshot-workdir/
#3.2-需要使用本机的【cp、rm、rsync、ssh、logger、du、rsnapshot-diff】命令
cmd_cp /usr/bin/cp
cmd_rm /usr/bin/rm
cmd_rsync /usr/bin/rsync
cmd_ssh /usr/bin/ssh
cmd_logger /usr/bin/logger
cmd_du /usr/bin/du
cmd_rsnapshot_diff /usr/bin/rsnapshot-diff
#3.3-开启备份等级(不同时间间隔的备份数量,注意这里间隔是tab制表符,空格会报错)
retain alpha 6
retain beta 7
retain gamma 4
#3.4-配置显示消息级别
verbose 2
#3.5-配置日志消息的级别
loglevel 3
#3.6-启用锁文件
lockfile /var/run/rsnapshot.pid
#3.7-设置需要备份的内容
#3.7.1-配置的备份路径【/home/】表示需要备份的目录;【localhost/】表示备份后的目录(完整目录是【/data/rsnapshot-workdir/localhost/】)
backup /home/ localhost/
backup /etc/ localhost/
#3.7.2-配置的备份路径【远程主机192.168.1.30上的/etc/】表示需要备份的目录;【centos7.9-1/】表示备份后的目录(完整目录是【/data/rsnapshot-workdir/centos7.9-1/】)
backup root@192.168.1.30:/etc/ centos7.9-1/ +ssh_args=-p 22222 -o ConnectTimeout=10
#4-检查配置的【/etc/rsnapshot.conf】文件语法是否正确命令
rsnapshot configtest
#5-查看需要执行备份的完整命令,但是不执行
rsnapshot -t alpha
注意:关于rsnapshot的配置文件,不同时间间隔的备份数量配置名称与间隔可以自定义如下所示(要查看间隔是否为tab制表符可以使用【vim /etc/rsnapshot.conf】打开然后输入【:set list】即可查看完整内容【^I】表示tabl制表符):
bash
#自定义不同时间间隔的备份数量【注意这里间隔是tab制表符,空格会报错】
#1-保留最近3次每分钟的备份(当创建第4次每分钟备份时,最旧的那个备份minutely.2会被删除)
retain minutely 3
#2-保留最近6次每小时的备份(当创建第7次每小时备份时,最旧的那个备份hourly.5会被删除)
retain hourly 6
#3-保留最近7次每天的备份(当创建第8次每天备份时,最后的那个备份daily.6会被删除)
retain daily 7
#4-保留最近4次每周的备份(当创建第5次每周备份时,最后的那个备份weekly.3会被删除)
retain weekly 4
#4-保留最近3次每月的备份(当创建第4次每月备份时,最后的那个备份monthly.2会被删除)
retain monthly 3

bash
#过滤【/etc/rsnapshot.conf】文件中的#注释与空格命令
grep -vE '^#|^$' /etc/rsnapshot.conf
#【/etc/rsnapshot.conf】文件中没有#注释与空格的完整配置内容如下:
snapshot_root /data/rsnapshot-workdir/
cmd_cp /usr/bin/cp
cmd_rm /usr/bin/rm
cmd_rsync /usr/bin/rsync
cmd_ssh /usr/bin/ssh
cmd_logger /usr/bin/logger
cmd_du /usr/bin/du
cmd_rsnapshot_diff /usr/bin/rsnapshot-diff
retain alpha 6
retain beta 7
retain gamma 4
verbose 2
loglevel 3
lockfile /var/run/rsnapshot.pid
backup /home/ localhost/
backup /etc/ localhost/
backup root@192.168.1.30:/etc/ centos7.9-1/ +ssh_args=-p 22222 -o ConnectTimeout=10








2.3、配置服务器互信
bash
#配置服务器互信操作流程
#1-在本机生成ssh密钥并查看
ssh-keygen -t ed25519 -C "coffeemilk@ck.com"
cd /root/.ssh
ll -a
#2-将本机生成的ssh公钥(结尾是.pub)拷贝到需要免密登录的服务器上(如:192.168.1.30)
ssh-copy-id -i /root/.ssh/id_ed25519.pub -p 22222 root@192.168.1.30
#3-将公钥拷贝给所需服务器后可使用ssh测试(注意:若ssh端口是默认的22则不用添加【-p 端口】参数)
ssh -p 22222 root@192.168.1.30
ssh -p 22222 root@192.168.1.30 date


三、rsnapshot的备份实践
3.1、手动执行rsnapshot备份实践
bash
#使用rsnapshot备份
#1-检查rsnapshot的配置文件语法是否正确
rsnapshot configtest
#2-开始执行备份(可查看详细信息)
rsnapshot -vvv alpha
#3-查看rsnapshot的配置文件指定的备份目录
ll -a /data/rsnapshot-workdir/
#4-后续若要再次备份则继续执行备份命令即可(会自动在【rsnapshot的配置文件指定的备份目录】下自动生成最多6个alpha【即:alpha.0至alpha.5】)
rsnapshot alpha
#5-只有生成6个alpha后才可以执行beta命令(会先生成beta,然后再删除alpha.5)
rsnapshot beta
#6-查看当前备份目录下所有文件的占用空间(统计快照的容量)
cd /data/rsnapshot-workdir
rsnapshot du
#7-对比快照存在哪些不同(alpha.0目录是包含最新的备份)
rsnapshot diff alpha.0 alpha.1
Linux系统必学的基础操作命令------快速上手Linux(中)------软硬连接






3.2、定时执行rsnapshot备份实践
若要定期运行数据备份,只需定义一个cron 作业以定期自动执行备份作业即可。
bash
#设置定期运行rsnapshot备份文件
#1-创建一个新的 cron 作业文件
vi /etc/cron.d/rsnapshot
#2-【/etc/cron.d/rsnapshot】文件定时任务示例如下:
#2.1-每天每隔4个小时(0、4、8、12、16 和 20 小时)备份6 个alpha快照
0 */4 * * * /usr/bin/rsnapshot alpha
#2.2-每晚 11:50 拍摄Beta快照
50 23 * * * /usr/bin/rsnapshot beta
#2.3-每个月的第一天晚上 10 点拍摄gamma快照(可根据自己的需求自行调整时间)
00 22 1 * * /usr/bin/rsnapshot gamma

