如何在 Linux 上使用 Rsnapshot 创建备份
Rsnapshot 是一个免费的开源实用程序,它作为 Rsync 的包装器,通过 SSH 执行本地或远程系统的增量快照。硬链接用于在备份未更改的文件时节省空间,在保留空间的同时仍向用户显示完整的文件系统。在本教程中,我们将学习如何在一些最常用的 Linux 发行版上安装和配置 Rsnapshot。
在本教程中您将学习:
- 如何在一些最常用的 Linux 发行版上安装 rsnapshot
- 如何配置 rsnapshots 通过 SSH 备份本地和远程计算机
安装
rsnapshot 是一个免费的开源实用程序,可在所有最常用的 Linux 发行版的官方或受信任的第三方存储库中使用。例如,要在 Fedora 上安装该实用程序,我们所要做的就是启动我们最喜欢的终端模拟器,并发出以下命令:
$ sudo dnf install rsnapshot
我们可以使用相同的命令在 RHEL(Red Hat Enterprise Linux)及其克隆上安装 Rsnapshot;然而,在这些发行版上,我们需要事先添加 EPEL 存储库作为软件源。
要在 Debian、Ubuntu 和其他基于 Debian 的发行版上执行安装,我们使用 apt 包管理器:
$ sudo apt install rsnapshot
Rsnapshot 也可以在 Archlinux“extra”存储库中找到。我们可以使用 pacman 安装它:
$ sudo pacman -S rsnapshot
一旦我们在我们最喜欢的 Linux 发行版中安装了 Rsnapshot,我们就可以使用它来创建增量备份。让我们看看如何。
快照配置
要配置 rsnapshot,我们编辑其配置文件:/etc/rsnapshot.conf
。正如文件开头的大警告所述,元素之间只能使用制表符;使用空格会产生语法错误:
#################################################
# #
# PLEASE BE AWARE OF THE FOLLOWING RULE: #
# #
# This file requires tabs between elements #
# #
#################################################
我们要在文件中定义的第一个指令是snapshot_root
。顾名思义,它用于指定保存所有快照的目录。在以下示例中,我们使用 /snapshots
目录作为快照根目录:
# All snapshots will be stored under this root directory.
#
snapshot_root /snapshots/
如果该目录不存在,则在执行第一次备份时会自动创建该目录,除非启用了 no_create_root
指令(默认值通常为 0):
# If no_create_root is enabled, rsnapshot will not automatically create the
# snapshot_root directory. This is particularly useful if you are backing
# up to removable media, such as a FireWire or USB drive.
#
#no_create_root 1
将 Rsnapshot 指向 rsync 路径
Rsnapshot 使用 rsync 来执行备份,因此我们必须通过 cmd_rsync 指令指定 rsync 二进制文件的位置。默认情况下,它设置为 /usr/bin/rsync
,并且不需要更改,除非我们在其他位置安装了 rsync:
# rsync must be enabled for anything to work. This is the only command that
# must be enabled.
#
cmd_rsync /usr/bin/rsync
制定保留政策
在开始创建备份之前,我们需要建立保留策略:我们需要定义不同的备份类型,并指定应保留多少特定类型的快照。为了建立保留策略,我们使用 retain
关键字,后跟备份“类型”的名称(名称完全任意),以及指定应保留该类型的备份数量的整数。这是 Ubuntu 系统上的默认配置:
#########################################
# BACKUP LEVELS / INTERVALS #
# Must be unique and in ascending order #
# e.g. alpha, beta, gamma, etc. #
#########################################
retain alpha 6
retain beta 7
retain gamma 4
默认情况下,“alpha”、“beta”和“gamma”被用作标识符,但是,这些名称并不具有真正的指示性。我们可能想使用更友好和更有意义的,例如:
retain daily 6
retain weekly 7
retain monthly 4
再次强调,名称是完全任意的,Rsnapshot 不知道它们的含义。我们在调用 rsnapshot 时指定备份类型:它只知道应保留多少特定类型的备份。
指定要备份的内容
要指定快照中应包含哪些文件和目录,我们使用 backup
指令,并传递我们要包含的路径及其所在的主机。这是一个典型的配置,其中包括 localhost 上的 /home/
、/etc/
和 /usr/local/
目录,作为备份:
backup /home/ localhost/
backup /etc/ localhost/
backup /usr/local/ localhost/
从备份中排除和包含文件
正如直接使用 rsync 时一样,我们可能希望从备份中排除或显式包含特定文件。要在使用 rsnapshot 时定义包含和排除模式,我们使用 include
和 exclude
指令,并为每行指定一个模式:
exclude <exclude-pattern>
类似地,要指定包含模式,我们可以编写:
include <include-pattern>
作为替代策略,我们可以在专用文件中编写包含和排除模式,然后将这些文件的路径作为 include_file
和 exclude_file
指令的值传递:
include_file /path/to/include/file
exclude_file /path/to/exclude/file
验证 Rsnapshot 配置
一旦我们修改了 Rsnapshot 配置文件以满足我们的需求,我们可能需要检查我们的配置在语法上是否有效。我们可以使用 configtest 命令来做到这一点:
$ sudo rsnapshot configtest
如果一切按预期进行,该命令应返回以下消息:
Syntax OK
再次注意,rsnapshot 配置文件中只能使用选项卡。不允许使用空格:它们的使用将被视为语法错误。
测试并创建我们的第一个备份
要使 Rsnapshot 打印执行备份时将运行的命令,而不实际执行它,我们可以使用 -t
选项,如下例所示:
$ sudo rsnapshot -t daily
该命令应返回类似于以下内容的输出:
echo 6080 > /var/run/rsnapshot.pid
mkdir -m 0755 -p /snapshots/daily.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
/home/ /snapshots/daily.0/localhost/
mkdir -m 0755 -p /snapshots/daily.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc/ \
/snapshots/daily.0/localhost/
mkdir -m 0755 -p /snapshots/daily.0/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
/usr/local/ /snapshots/daily.0/localhost/
touch /snapshots/daily.0/
要实际创建第一个备份,我们只需省略 -t
选项,因此,要创建第一个每日备份,我们将运行:
$ sudo rsnapshot daily
备份完成后,将在快照根目录下创建与我们的第一个每日备份相关的目录:
/snapshots/
└── daily.0
└── localhost
├── etc
├── home
└── usr
现在让我们看看如果我们要创建第二个每日备份会发生什么:
$ sudo rsnapshot -t daily
该命令返回以下输出:
bin/cp -al /snapshots/daily.0 /snapshots/daily.1
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
/home/ /snapshots/daily.0/localhost/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded /etc/ \
/snapshots/daily.0/localhost/
/usr/bin/rsync -a --delete --numeric-ids --relative --delete-excluded \
/usr/local/ /snapshots/daily.0/localhost/
touch /snapshots/daily.0/
如您所见,首先通过使用 - 运行
和 cp
,将 daily.0
目录备份复制为 daily.1
a-l
选项:前者需要保留所有文件权限和所有权,而后者则使文件被硬链接而不是复制,以保留空间。新备份将使用原始 daily.0
目录作为目标,因此它将始终托管最新的快照。
创建远程计算机的备份
我们可以使用 Rsnapshot 通过 SSH 对远程计算机执行增量备份,实现“拉”备份策略:服务器连接到客户端并从客户端“拉”文件执行备份,而不是客户端将文件推送到备份服务器。
为了备份远程计算机,我们需要做的第一件事是确保 cmd_ssh 指令存在并且在 rsnapshot 配置文件中取消注释。该指令的值是 ssh 客户端可执行文件的路径,通常安装为 /usr/bin/ssh
:
cmd_ssh /usr/bin/ssh
现在,假设我们要备份 IP 192.168.122.49 的远程计算机的 /etc
目录的内容,以“ubuntu”用户身份登录。以下是我们在 rsnapshot 配置文件中写入的内容:
backup ubuntu@192.168.122.49:/etc client0
其中“client0”只是机器的标识符(可以是任何东西)。为了使备份成功,目标上应该启动并运行一个工作的 SSH 服务器,并且我们要用于连接的公钥必须已经获得授权。
结论
Rsnapshot 是一个免费的开源实用程序,它作为 Rsync 的包装器来执行增量备份。在本教程中,我们学习了如何在一些最常用的 Linux 发行版上安装和配置 rsnapshot。我们了解了如何指定要在本地和远程计算机上备份的目录、如何建立保留策略以及如何指定应保存快照的位置。