如何使用 Backupninja 备份 Debian 系统
谨慎或灾难经验可以教会每个系统管理员频繁进行系统备份的重要性。您可以通过编写良好的旧 shell 脚本,或使用可用于该作业的众多备份工具中的一种(或多种)来实现此目的(例如,Clonezilla、Duplicity)。因此,您熟悉的工具越多,您在实施备份解决方案时就能做出更明智的决策。
在本文中,我们将介绍 Backupninja
,一个轻量级且易于配置的系统备份工具。借助rdiff-backup
、duplicity
、mysqlhotcopy
和mysqldump
等程序,Backupninja提供常见的备份功能,例如远程、安全和增量文件系统备份、加密备份和MySQL/MariaDB数据库备份。您可以有选择地启用状态电子邮件报告,还可以备份一般硬件和系统信息。 Backupninja 的一项关键优势是基于控制台的内置向导(称为 ninjahelper ),它允许您轻松地为各种备份场景创建配置文件。
可以说,缺点是 Backupninja 需要安装其他帮助程序才能充分利用其所有功能。虽然 Backupninja 的 RPM 软件包可用于基于 Red Hat 的发行版,但 Backupninja 的依赖项针对 Debian 及其衍生版本进行了优化。因此,不建议对基于 Red Hat 的系统尝试 Backupninja。
在本教程中,我们将介绍基于 Debian 发行版的 Backupninja 安装。
安装Backupninja
以 root 身份运行以下命令:
# aptitude install backupninja
安装过程中,将创建几个文件和目录:
/usr/sbin/backupninja
是主要的 bash shell 脚本。默认情况下,
/etc/cron.d/backupninja
指示cron
每小时运行一次主脚本。/etc/logrotate.d/backupninja
轮换程序创建的日志。/etc/backup.d/
是备份操作的配置文件所在的目录。/etc/backupninja.conf
是包含常规选项的主要配置文件。它有很好的评论并详细解释了每个选项。/usr/share/backupninja
是 Backupninja 使用的脚本所在的目录(又名处理程序)。这些是负责执行实际工作的脚本。在此目录中,您还可以找到.helper
文件,这些文件用于配置和设置ninjahelper
菜单。/usr/share/doc/backupninja/examples
包含操作配置文件的模板(通过ninjahelper
创建的文件类型)。
首次运行 ninjahelper
当我们尝试启动 ninjahelper 时,我们可以看到可能需要内部依赖项。如果出现提示,请输入 yes
并按 ENTER
键安装 dialog
(一种通过 shell 脚本显示用户友好对话框的工具)。

当您输入 yes 后按 Enter 时,Backupninja 将安装对话框并在完成后显示以下屏幕。

示例 1:备份硬件和系统信息
启动 ninjahelper 后,我们将创建一个新的备份操作:

如果没有安装必要的帮助程序,我们将看到以下屏幕。如果您的系统上已安装这些软件包,请忽略此步骤。

下一步包括选择您想要成为此备份一部分的项目。默认情况下会选择前四个,但您可以通过按空格键取消选择它们。

完成后,按“确定”继续。您将能够选择是否要使用此备份操作的默认配置文件 (/etc/backup.d/10.sys
),或者是否要创建一个新配置文件。在后一种情况下,将在同一目录下创建一个与默认文件内容相同的新文件,但名称为11.sys
,以此类推,以供将来的系统备份操作。请注意,使用您喜欢的文本编辑器创建配置文件后,您可以对其进行编辑。

示例 2:远程目录增量 Rsync 拉取备份
您很可能知道,rsync 广泛用于通过网络同步文件和文件夹。在下面的示例中,我们将讨论一种通过硬链接对远程目录进行增量拉取备份以保存历史数据并将其存储在本地文件服务器中的方法。这种方法将帮助我们节省空间并提高服务器端的安全性。
第 1 步: 在 /etc/backup.d
目录中编写包含以下内容的自定义脚本,并将其 chmod
为 600
。请注意,除了普通配置文件之外,该目录还可能包含您希望在执行 Backupninja 时运行的脚本,其优点是使用主配置文件中存在的变量。
# REMOTE USER
user=root
# REMOTE HOST
host=dev1
# REMOTE DIRECTORY
remotedir=/home/gacanepa/
# LOCAL DIRECTORY
localdir=/home/gacanepa/backup.0
# LOCAL DIRECTORY WHERE PREVIOUS BACKUP WAS STORED
localdirold=/home/gacanepa/backup.1
mv $localdir $localdirold
# RSYNC
rsync -av --delete --recursive --link-dest=$localdirold $user@$host:$remotedir $localdir
在上面的配置中,rsync
的 --link-dest
选项用于将未更改的文件(所有属性)从 $localdir-old
硬链接到目标目录 ($localdir
)。
步骤 2: 在第一次运行 Backupninja 之前,父目录(本例中为 /home/gacanepa
)为空。第一次我们执行:
# backupninja -n
backup.0
目录已创建,稍后在此过程中其名称更改为 backup.1
。
第二次运行 Backupninja 时,会重新创建 backup.0
并保留 backup.1
。

步骤 3: 通过比较各自的 inode 编号和目录大小,验证 backup.1
的内容是否是到 backup.0
中文件的硬链接。


结论
Backupninja 不仅是一个经典的备份工具,而且还是一个易于配置的实用程序。您可以编写自己的处理程序来根据 /etc/backup.d
中的各个配置文件运行 Backupninja,甚至可以为 ninjahelper
编写帮助程序,以便将它们包含在其主界面中。
例如,如果您在 /usr/share/backupninja
中创建名为 linux教程
的处理程序,则默认情况下它将运行 /etc/backup.d
中具有 .linux教程
扩展名的每个文件。如果您决定将 linux教程
处理程序添加到 ninjahelper
,您可以将相应的帮助程序编写为 linux教程.helper
。此外,如果您希望 Backupninja 运行任意脚本,只需将其添加到 /etc/backup.d
即可。有关创建自定义备份计划的详细信息,请参阅此 Backupninja 教程。
请随时使用下面的表格留下您的意见、问题或建议。我们将非常高兴收到您的来信。