Rsnapshot 是一款开源的文件系统快照工具。它结合了 Rsync 和 SSH 的能力,可以帮助你在 Linux 系统下实现定时增量备份,让备份工作变得更轻松、更高效。
Rsnapshot 不仅可以备份本地文件,还能通过 SSH 备份远程文件。它的存储空间需求也很小,仅占用「一次完整备份」+「差异备份」的空间。备份内容可以保存在本地硬盘、外部磁盘(如 USB 设备)、外部的 NFS 远程驱动器,甚至直接通过网络传输到其他设备。
接下来,本文将详细介绍如何安装、配置和使用 Rsnapshot,包括创建每小时、每天、每周和每月的本地备份,以及如何进行远程备份。
在 Linux 系统上安装 Rsnapshot 非常简单,以下是主流发行版上的安装方法:
sudo apt install rsnapshot
sudo dnf install rsnapshot
sudo pacman -S rsnapshot
安装 rsnapshot
安装好之后,建议运行以下命令查看版本信息,验证是否安装正确:
rsnapshot -v
查看 rsnapshot 版本
Rsnapshot 的核心配置都在/etc/rsnapshot.conf文件中。你可以使用 nano 或 vim 等文本编辑器,以 root 权限打开并编辑:
sudo vim /etc/rsnapshot.conf
配置文件中要使用 Tab 制表符,不要用空格。
snapshot_root是配置文件中的关键参数,用于定义所有备份快照的根目录。这是 Rsnapshot 存放所有备份文件的位置。比如,如果你想将备份存储在/data/rsnapshot/目录下,可以将配置行改成:
snapshot_root /data/rsnapshot/
指定 rsnapshot 备份文件存放主路径
要备份本地目录,需要用到backup参数,并指定「源目录」和「目标子目录」。例如,如果你想把/home、/etc和/usr/local目录备份到名为localhost的子目录中,可以这样配置(一行一个):
backup /home/ localhost/ backup /etc/ localhost/ backup /usr/local/ localhost/
指定 rsnapshot 备份目录及存放子路径
配置好后,Rsnapshot 会在snapshot_root路径下创建一个名为localhost的子目录,用于保存这些目录的备份。
Rsnapshot 在每次执行备份时,都会生成基于时间的快照副本(层级目录),完全不用担心文件被覆盖哦!
Rsnapshot 支持通过 SSH 实现远程备份,在需要备份其他服务器的数据时非常有用。但在开始之前,你需要确保「备份主机」和「远程服务器」之间已经设置好了 SSH 无密码登录。以下是配置步骤:
3.4.1 生成 SSH 密钥对
如果你还没有密钥对,可以在「备份主机」使用以下命令生成新的 RSA 密钥对:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
按提示操作,生成的密钥默认存储在~/.ssh/id_rsa和~/.ssh/id_rsa.pub。
3.4.2 将公钥上传到远程服务器
使用ssh-copy-id工具将公钥传输到远程服务器:
ssh-copy-id -i ~/.ssh/id_rsa.pub user@hostname
3.4.3 配置远程服务器的 SSH 服务
确保远程服务器的 SSH 服务允许公钥认证,并可以选择禁用密码登录(增强安全性)。
1、编辑远程服务器的 SSH 配置文件:
sudo vim /etc/ssh/sshd_config
2、检查并确保以下内容配置正确:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no # 可选:禁用密码登录
3、保存后,重启 SSHD 服务以应用配置:
sudo systemctl restart sshd
3.4.4 测试无密码登录
从「备份主机」执行以下命令,看看能否直接无密码登录远程服务器:
ssh user@hostname
如果能无密码登录,说明 SSH 配置 OK。
3.4.5 配置 Rsnapshot 的远程备份
使用backup参数指定要备份的「远程目录」和「本地目标子目录」。例如,要备份root@example.com服务器上的/home和/etc文件夹到example.com子目录,可以添加以下行:
backup root@example.com:/home/ example.com/ backup root@example.com:/etc/ example.com/
3.4.6 配置额外的 Rsync 参数
为了自定义备份行为,你可以通过+rsync_long_args=参数向 Rsync 添加更多选项,比如限制带宽或排除某些目录。例如:
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
在使用 Rsnapshot 时,有些文件或目录可能是临时的、动态生成的,备份它们既占空间又没意义。通过「排除文件」功能,我们可以灵活地排除不必要的内容,从而优化备份效率。以下是具体步骤:
1、首先,创建一个用于记录排除规则的文件。例如:
touch /data/backup/exclude.txt
2、用文本编辑器打开排除文件,并配置需要排除或者包含的文件和目录:
- /var/cache - /tmp + /etc + /home
在文件中,每行描述一条规则。其中:
3、然后在rsnapshot.conf文件中引用这个排除文件:
exclude_file /data/backup/exclude.txt
Rsnapshot 提供了灵活的备份保留策略,可以通过retain参数来指定每种备份类型的保留数量:
retain [备份级别] [保留数量]
配置文件中默认是这样写的,非常的不友好嘛:
retain alpha 6 retain delta 7 retain gamma 4
建议注释掉之后改成这样,例如,以下配置表示保留 6 个每天备份、7 个每周备份和 4 个每月备份:
retain daily 6 retain weekly 7 retain monthly 4
设置 rsnapshot 备份级别与保留数量
在完成 Rsnapshot 的配置后,为了确保备份能够正常运行且不会出现意外错误,建议进行验证和手动操作测试。
1、测试配置文件:使用以下命令验证配置的正确性:
sudo rsnapshot configtest
2、测试备份级别:使用-t参数模拟备份过程,,检查它的行为是否符合预期:
sudo rsnapshot -t daily # 可以换成 hourly、weekly 或 monthly
测试 rsnapshot 配置文件与备份级别
3、手动执行备份:在对模拟结果满意后,可以手动进行实际的备份层级操作:
sudo rsnapshot daily # 可以换成 hourly、weekly 或 monthly
Rsnapshot 已经贴心地为我们准备了一个 Cron 配置文件,位置在/etc/cron.d/rsnapshot。并已经预设好了常用的备份示例(有注释),我们可以改造成适合自己的配置。
0 */4 * * * root /usr/bin/rsnapshot daily 30 3 * * * root /usr/bin/rsnapshot weekly 0 3 * * 1 root /usr/bin/rsnapshot monthly
安排 rsnapshot 备份计划
要深入了解 Cron 定时任务的使用技巧?请阅读这篇详细的 Cron 使用指南。
你可以查看 Rsnapshot 日志文件来监控备份活动,随时掌握备份的进度、状态和详细信息:
cat /var/log/rsnapshot.log
Rsnapshot 的备份机制非常直观,它其实就是源数据的完整镜像。因此,还原操作就像复制文件一样简单!下面教你一步步搞定:
1、首先,找到你的 Rsnapshot 备份存储路径,比如/data/rsnapshot/。
2、进入备份目录后,你会看到按时间周期分类的子目录,比如hourly.0、daily.0、weekly.0等。数字后缀表示最近的备份(数值越小,备份越新)。
查看 rsnapshot 备份文件周期目录
3、根据需求进入对应的子目录。例如,/data/rsnapshot/daily.0/就是最近的一次每天备份。
4、使用rsync命令将备份文件还原到目标位置。例如:
sudo rsync -av /data/rsnapshot/daily.0/目录/ /还原到的位置
使用 rsnapshot 将特定备份恢复到指定目录
5、还原完成后,别忘了确认文件是否完整:
ls -l /还原到的位置
6、如果有需要,可以用chown和chmod命令修复文件权限和所有权问题:
sudo chown -R 用户:用户组 /还原到的位置 sudo chmod -R 权限设置 /还原到的位置