备份解决方案 - rsnapshot
先决条件¶
- 了解如何从命令行安装附加存储库和快照
- 了解挂载机器外部的文件系统(外部驱动器、远程文件系统等)
- 了解如何使用编辑器(此处使用
vi
,但您也可以使用您喜欢的编辑器) - 了解一些 Bash 脚本知识
- 了解如何更改 root 用户的
crontab
- 了解 SSH 公钥和私钥(仅当您计划从另一台服务器运行远程备份时)
简介¶
rsnapshot
是一个强大的备份工具,可以在任何基于 Linux 的机器上进行安装。它可以本地备份一台机器,也可以从一台机器备份多台服务器。
rsnapshot
完全用 Perl 编写,使用 rsync
且没有任何库依赖。安装没有任何特殊要求。对于 Rocky Linux,您可以通过 EPEL(企业 Linux 附加包)存储库安装 rsnapshot
。如果您愿意,也可以选择从源代码安装。
本文档仅涵盖 rsnapshot
在 Rocky Linux 上的安装。
安装 rsnapshot
¶
除非另有说明,否则此处的所有命令均从命令行调用。
安装 EPEL 存储库¶
您需要来自 Fedora 的 EPEL 软件存储库。要安装该存储库,只需使用此命令:
sudo dnf install epel-release -y
现在该存储库将处于活动状态。
安装 rsnapshot
包¶
安装 rsnapshot
和一些其他需要的工具
sudo dnf install rsnapshot openssh-server rsync
如果存在任何缺失的依赖项,它们会显示出来,您只需按提示继续即可。例如:
dnf install rsnapshot rsync
Last metadata expiration check: 2:03:40 ago on Fri 19 Sep 2025 03:54:16 PM UTC.
Package rsync-3.4.1-2.el10.x86_64 is already installed.
Dependencies resolved.
==============================================================================================================================
Package Architecture Version Repository Size
==============================================================================================================================
Installing:
rsnapshot noarch 1.5.1-1.el10_0 epel 112 k
Installing dependencies:
perl-DirHandle noarch 1.05-512.2.el10_0 appstream 12 k
Transaction Summary
==============================================================================================================================
Install 2 Packages
Total download size: 124 k
Installed size: 388 k
Is this ok [y/N]: y
从源代码安装 rsnapshot
¶
从源代码安装 rsnapshot
并不困难。但它有一个缺点,那就是如果发布了新版本,它将需要从源代码重新安装才能更新版本,而 EPEL 安装方法可以通过简单的 dnf upgrade
使您保持最新。
安装开发工具并下载源代码¶
这里的第一个步骤是安装“开发工具”组。
dnf groupinstall 'Development Tools'
您还需要一些其他包。
dnf install wget unzip rsync openssh-server
接下来,从 GitHub 存储库下载源代码文件。您可以通过多种方式完成此操作,但在本例中最简单的方法可能是直接下载存储库中的 ZIP 文件。
- 访问 https://github.com/rsnapshot/rsnapshot
- 点击右侧的绿色“Code”按钮
- 右键单击“Download ZIP”并复制链接位置
- 使用
wget
或curl
下载复制的链接。示例:wget https://github.com/rsnapshot/rsnapshot/archive/refs/heads/master.zip
- 解压
master.zip
文件。unzip master.zip
构建源代码¶
下一步是构建。当您解压 master.zip
文件时,您会得到一个 rsnapshot-master
目录。在您的构建过程中,请进入该目录。请注意,您的构建使用了所有包的默认设置,因此如果您想要其他设置,则需要进行一些研究。此外,这些步骤直接取自 GitHub 安装页面。
cd rsnapshot-master
运行 autogen.sh
脚本来生成 configure 脚本。
./autogen.sh
技巧
您可能会看到几行如下所示的内容:
fatal: not a git repository (or any of the parent directories): .git
这些都不是致命的。
接下来,您需要运行 configure
并设置配置目录。
./configure --sysconfdir=/etc
最后,运行 make install
。
sudo make install
在此过程中,rsnapshot.conf
文件将被创建为 rsnapshot.conf.default
。将此文件复制到 rsnapshot.conf
,然后根据您的系统需求进行编辑。
sudo cp /etc/rsnapshot.conf.default /etc/rsnapshot.conf
这涵盖了复制配置文件。下面的“配置 rsnapshot”部分将介绍此配置文件中所需的更改。
挂载驱动器或文件系统以进行备份¶
在此步骤中,我们将展示如何挂载用于备份系统的驱动器,例如外部 USB 驱动器。此步骤仅在备份单个机器或服务器时(如我们在第一个示例中所见)是必需的。
- 连接 USB 驱动器。
- 键入
dmesg | grep sd
,它将显示您要使用的驱动器。在本例中,它是 sda1。
示例:EXT4-fs (sda1): mounting ext2 file system using the ext4 subsystem
。 - 不幸的是(或者幸运的是,取决于您的看法),大多数现代 Linux 桌面操作系统都可以自动挂载驱动器。这意味着,根据各种因素,
rsnapshot
可能会丢失驱动器的跟踪。您希望驱动器每次都“挂载”或使其文件可用在同一位置。
为此,请获取dmesg
命令显示的驱动器信息,并输入mount | grep sda1
,它将显示:/dev/sda1 on /media/username/8ea89e5e-9291-45c1-961d-99c346a2628a
。 - 键入
sudo umount /dev/sda1
来卸载您的外部驱动器。 - 接下来,创建一个挂载点用于备份:
sudo mkdir /mnt/backup
。 - 将驱动器挂载到您的备份文件夹位置:
sudo mount /dev/sda1 /mnt/backup
。 - 再次键入
mount | grep sda1
,您将看到:/dev/sda1 on /mnt/backup type ext2 (rw,relatime)
。 - 接下来,在挂载的驱动器上创建一个目录,该目录必须存在才能继续备份。在此示例中,您可以使用一个名为“storage”的文件夹:
sudo mkdir /mnt/backup/storage
。
对于单台机器,您必须在每次连接驱动器或每次系统重启时重复 umount
和 mount
步骤,或者使用脚本自动化这些命令。
建议使用自动化。
配置 rsnapshot
¶
这是最重要的一步。更改配置文件时可能会出错。rsnapshot
配置要求使用制表符分隔任何元素,并且配置文件顶部有相应的警告。
空格字符会导致整个配置——以及您的备份——失败。例如,在配置文件顶部附近有一个用于 # SNAPSHOT ROOT DIRECTORY #
的部分。如果您是从头开始添加的,您将键入 snapshot_root
,然后 Tab,然后键入 /whatever_the_path_to_the_snapshot_root_will_be/
。
最好的地方是 rsnapshot
附带的默认配置只需进行少量更改即可用于本地机器的备份。然而,在开始编辑之前备份一份配置文件副本总是一个好主意。
cp /etc/rsnapshot.conf /etc/rsnapshot.conf.bak
基本机器或单服务器备份¶
在这种情况下,rsnapshot
将在本地运行以备份特定机器。在此示例中,配置文件细分向您展示了需要更改的内容。
您将需要使用 vi
(或使用您喜欢的编辑器进行编辑)来打开 /etc/rsnapshot.conf
文件。
首先要更改的是 snapshot_root 设置。默认值为:
snapshot_root /.snapshots/
您需要将其更改为您创建的挂载点,并添加“storage”。
snapshot_root /mnt/backup/storage/`
您还希望指示备份在驱动器未挂载时不要运行。为此,请删除 no_create_root
旁边的注释(“#”符号),它看起来像这样:
no_create_root 1
接下来转到标题为 # EXTERNAL PROGRAM DEPENDENCIES #
的部分,并删除此行(再次是“#”符号)的注释。
#cmd_cp /usr/bin/cp
现在它显示为:
cmd_cp /usr/bin/cp
虽然您在此特定配置中不需要 cmd_ssh
,但对于我们的其他选项,您将需要它,并且启用它也没有坏处。找到写着:
#cmd_ssh /usr/bin/ssh
删除“#”符号。
cmd_ssh /usr/bin/ssh
接下来,您需要跳到标题为 # BACKUP LEVELS / INTERVALS #
的部分。
早期版本的 rsnapshot
有 hourly, daily, monthly, yearly
,但现在是 alpha, beta, gamma, delta
。这有点令人困惑。您需要做的是为任何不使用的增量添加注释。在配置中,delta 已经被注释掉了。
在此示例中,您除了夜间备份外,不会运行任何其他增量。只需为 alpha 和 gamma 添加注释。完成后,您的配置文件将是:
#retain alpha 6
retain beta 7
#retain gamma 4
#retain delta 3
跳到 logfile
行,默认情况下它是:
#logfile /var/log/rsnapshot
删除注释。
logfile /var/log/rsnapshot
最后,跳到 ### BACKUP POINTS / SCRIPTS ###
部分,并在 # LOCALHOST
部分添加任何您想要添加的目录。请记住,在元素之间使用 Tab 而不是 Space。
现在保存您的更改(对于 vi
,使用 Shift+:+wq!)并退出配置文件。
检查配置¶
您需要确保在编辑配置文件时没有添加空格或其他明显的错误。为此,请运行 rsnapshot
并使用 configtest
选项来检查您的配置。
如果不存在错误,rsnapshot configtest
将显示 Syntax OK
。
养成对特定配置运行 configtest
的习惯。这样做的原因将在您进入“多台机器或多台服务器备份”部分时更加明显。
要对特定配置文件运行 configtest
,请使用 -c
选项指定配置。
rsnapshot -c /etc/rsnapshot.conf configtest
首次运行备份¶
在 configtest
验证一切正常后,现在是首次运行备份的时候了。您可以先在测试模式下运行它,以便查看备份脚本将执行的操作。
同样,在这种情况下,您不必一定指定配置,但养成这样做的好习惯。
rsnapshot -c /etc/rsnapshot.conf -t beta
这将返回类似以下内容的内容,显示备份实际运行时将发生什么:
echo 1441 > /var/run/rsnapshot.pid
mkdir -m 0755 -p /mnt/backup/storage/beta.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
/home/ /mnt/backup/storage/beta.0/localhost/
mkdir -m 0755 -p /mnt/backup/storage/beta.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc/ \
/mnt/backup/storage/beta.0/localhost/
mkdir -m 0755 -p /mnt/backup/storage/beta.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
/usr/local/ /mnt/backup/storage/beta.0/localhost/
touch /mnt/backup/storage/beta.0/
当测试符合您的预期时,首次手动运行它,不带测试参数。
rsnapshot -c /etc/rsnapshot.conf beta
备份完成后,浏览到 /mnt/backup
并检查它在那里创建的目录结构。将有一个 storage/beta.0/localhost
目录,后跟您指定的备份目录。
进一步说明¶
每次备份运行时,它都会创建一个另一个 beta 增量,即 0-6,或 7 天的备份。最新的备份将始终是 beta.0,而昨天的备份将始终是 beta.1。
这些备份的大小看起来会占用相同的(或更多的)磁盘空间,但这是因为 rsnapshot
使用了硬链接。要从昨天的备份还原文件,只需将它们从 beta.1 的目录结构复制回来即可。
每次备份只是相对于上一次运行的增量备份,但是,由于使用了硬链接,每个备份目录都包含文件或指向实际备份到的目录中文件的硬链接。
要还原文件,您不必决定从哪个目录或增量还原它们,只需确定您要还原的备份的时间戳即可。这是一个很棒的系统,并且比许多其他备份解决方案占用的磁盘空间少得多。
设置自动运行备份¶
在完成测试并确信一切正常后,下一步是为 root 用户设置 crontab
以每天自动化该过程。
sudo crontab -e
如果您以前没有运行过此命令,请在出现 Select an editor
行时选择“vim.basic”作为您的编辑器或您自己的编辑器首选项。
要将备份设置为晚上 11 点自动运行,请将以下内容添加到 crontab
:
## Running the backup at 11 PM
00 23 * * * /usr/bin/rsnapshot -c /etc/rsnapshot.conf beta`
多台机器或多台服务器备份¶
从具有 RAID 阵列或大容量存储驱动器的机器备份多台机器(本地或通过互联网连接)效果很好。
如果通过互联网运行这些备份,您需要确保每个地点都有足够的带宽来完成备份。您可以使用 rsnapshot
将本地服务器与异地备份阵列或备份服务器同步,以提高数据冗余性。
假设¶
从本地机器远程运行 rsnapshot
。运行此确切配置也可以在远程异地运行。
在这种情况下,您需要将 rsnapshot
安装在进行备份的机器上。其他假设是:
- 您将要备份的服务器上的防火墙规则允许远程机器 SSH 登录。
- 您将要备份的每台服务器都安装了最新版本的
rsync
。对于 Rocky Linux 服务器,运行dnf install rsync
来更新您系统的rsync
版本。 - 您已以 root 用户身份连接到该机器,或者您已运行
sudo -s
切换到 root 用户。
SSH 公钥或私钥¶
对于将要运行备份的服务器,您需要生成一个 SSH 密钥对以在备份期间使用。在我们的示例中,您将创建 RSA 密钥。
如果您已经生成了一组密钥,可以跳过此步骤。您可以通过执行 ls -al .ssh
并查找 id_rsa
和 id_rsa.pub
密钥对来查看。如果不存在,请使用以下链接为您的机器和要访问的服务器设置密钥:
rsnapshot 配置¶
配置文件需要与我们为“基本机器或单服务器备份”创建的几乎相同,只是您需要更改一些选项。
快照根目录是默认的:
snapshot_root /.snapshots/
注释掉此行。
no_create_root 1
#no_create_root 1
另一个不同之处在于,每台机器都有自己的配置。当您熟悉之后,您只需将现有的配置文件复制到另一个名称,然后更改它以适应您想要备份的任何其他机器。
现在,您需要更改配置文件并保存它。将该文件复制为我们第一台服务器的模板:
cp /etc/rsnapshot.conf /etc/rsnapshot_web.conf
更改配置文件并使用机器名称创建日志和 lockfile
。
logfile /var/log/rsnapshot_web.log
lockfile /var/run/rsnapshot_web.pid
接下来,更改 rsnapshot_web.conf
以包含您要备份的目录。唯一不同之处是目标。
以下是“web.ourdomain.com”配置的示例:
### BACKUP POINTS / SCRIPTS ###
backup root@web.ourourdomain.com:/etc/ web.ourourdomain.com/
backup root@web.ourourdomain.com:/var/www/ web.ourourdomain.com/
backup root@web.ourdomain.com:/usr/local/ web.ourdomain.com/
backup root@web.ourdomain.com:/home/ web.ourdomain.com/
backup root@web.ourdomain.com:/root/ web.ourdomain.com/
检查配置并运行初始备份¶
您现在可以检查配置以确保其在语法上是正确的。
rsnapshot -c /etc/rsnapshot_web.conf configtest
您正在寻找 Syntax OK
消息。如果一切顺利,您可以手动运行备份。
/usr/bin/rsnapshot -c /etc/rsnapshot_web.conf beta
假设一切正常,您可以为邮件服务器(rsnapshot_mail.conf
)和门户服务器(rsnapshot_portal.conf
)创建配置文件,进行测试,并进行试运行备份。
自动化备份¶
自动化多台机器或服务器版本的备份略有不同。您需要创建一个 bash 脚本来按顺序调用备份。当一个完成时,下一个将开始。此脚本将如下所示:
vi /usr/local/sbin/backup_all
内容如下:
#!/bin/bash/
# script to run rsnapshot backups in succession
/usr/bin/rsnapshot -c /etc/rsnapshot_web.conf beta
/usr/bin/rsnapshot -c /etc/rsnapshot_mail.conf beta
/usr/bin/rsnapshot -c /etc/rsnapshot_portal.conf beta
将脚本保存到 /usr/local/sbin
并使脚本可执行。
chmod +x /usr/local/sbin/backup_all
创建 root 的 crontab
来运行备份脚本。
crontab -e
添加此行:
## Running the backup at 11 PM
00 23 * * * /usr/local/sbin/backup_all
报告备份状态¶
为了确保一切都按计划备份,您可能希望将备份日志文件发送到您的电子邮件。如果您正在使用 rsnapshot
进行多台机器备份,每个日志文件将有自己的名称,您可以通过 使用 postfix 进行服务器进程报告 的程序发送到您的电子邮件进行审查。
还原备份¶
还原少量文件或整个备份涉及将您想要的文件从具有您想要还原的日期的目录(时间戳)复制回机器。
结论和其他资源¶
使用 rsnapshot
正确设置可能有点令人生畏,但它可以为您节省大量备份机器或服务器的时间。
rsnapshot
功能强大、快速且在磁盘空间使用方面经济高效。您可以通过访问 rsnapshot github 来了解更多关于 rsnapshot
的信息。
作者:Steven Spencer
贡献者:Ezequiel Bruni, Ganna Zhyrnova