如何在Linux中使用Rsync唤醒备份Nas服务器和镜像文件

时间:2020-01-09 10:39:57  来源:igfitidea点击:

在本快速教程中,您将学习如何在Debian或Ubuntu Linux中使用rsync设置文件镜像。

服务器配置

------------+           +-----------
nas01       |           |nas02
main        |    |backup
server      |           |server
192.168.1.10|           |192.168.1.11
------------+           +------------

在此设置中,

  • nas01:此盒由Debian Linux驱动。该服务器始终处于开机状态,并且使用rsnapshot命令行实用程序进行每小时,每天,每周和每月的备份。您必须在nas01服务器上设置rsnapshot。
  • nas02:我们的辅助备份服务器。您可以运行Linux + BTRFS或FreeBSD + ZFS或您选择的任何其他Unix。我只是将使用Debian Linux进行演示。

配置要求

  • 在nas01服务器上设置rsnapshot备份服务器。
  • 在nas01和nas02服务器上更新/etc/hosts文件,如下所示:
192.168.1.10	nas01
192.168.1.11	nas02
  • 在nas01和nas02服务器之间设置基于ssh公钥和较少密码的身份验证。
  • 打开nas02服务器。进入BIOS。查找电源管理选项。您将看到一个清晰直观的选项,标记为"局域网唤醒"。打开它。接下来,启动nas02服务器并编辑/etc/network/interfaces文件。如下更新:
## eth0 config with wol setting
auto eth0
allow-hotplug eth0
iface eth0 inet static
    address 192.168.1.11
    netmask 255.255.255.0
    network 192.168.1.0
    gateway 192.168.1.254
    up /sbin/ethtool -s eth0 wol g

nas01设置(所有命令必须在nas01上运行)

步骤1:/root/bin/wakeup.nas02

创建一个名为/root/bin/wakeup.nas02的shell脚本:

#!/bin/bash
# wakeup.nas02 : Wake up nas02 server
# Author : www.theitroad.local under GPL v.2.x+
# -----------------------------------------
# Secondary Server Name/IP address
server="nas02"
 
# Secondary Server Mac 
servermac="00:40:63:ff:2d:e6"
 
# See if the server is alive or sleeping, if sleeping send magic packet to wake the server XD
ping -W 1 -c4 -q $server >&/dev/null
[ $? -eq 0 ] || /usr/bin/wakeonlan $servermac >&/dev/null

步骤2:/root/bin/mirror.nas02

创建另一个名为/root/bin/mirror.nas02的shell脚本:

#!/bin/bash
# mirror.nas02 : File mirroring script. Also shutdown the nas02 server when done.
# Author : www.theitroad.local under GPL v.2.x+
# -----------------------------------------
# Secondary server name or IP address
t="nas02"
 
# Backup source on nas01
# Must be same as 'snapshot_root' set in rsnapshot.conf
s="/backups/personal"
 
# Secondary nas02 server backup directory 
# I am using BTRFS on nas02 but you can use FreeBSD+ZFS too
d="root@${t}:/backups/"
 
# Path
_rsync="/usr/bin/rsync"
_ssh="/usr/bin/ssh"
 
# Rsync args 
_args='-a -H --progress --delete --numeric-ids --relative --delete-excluded --rsh=/usr/bin/ssh'
 
# Is the nas02 server alive? If so start mirroring from nas01:$s ==-  nas02:$d 
# And when done shutdown the secondary nas02 server to saver power/electricity bills.
ping -W 1 -c4 -q $t >&/dev/null
[ $? -eq 0 ] && { $_rsync $_args ${s} ${d} && $_ssh root@${t} "sync && sync && /sbin/shutdown -h 0"; }

步骤3:更新/etc/rsnapshot.conf文件

缺省rsnapshot配置文件位于/etc/rsnapshot.conf。
编辑文件并更新以下两个指令:

# Specify the path to a script to run right before rsnapshot syncs files
# Wake up the nas02 server from sleep i.e. power on the server
cmd_preexec     /root/bin/wakeup.nas02
 
# Specify the path to a script to run right after rsnapshot syncs files
# Mirror all nas01 files using this script to nas02 and shutdown nas02 server
# when done.
cmd_postexec    /root/bin/mirror.nas02

保存并关闭文件。
运行语法检查配置文件:

# rsnapshot configtest

输出示例:

Syntax OK

步骤4:在nas01服务器上生成SSH密钥

在nas01服务器上运行以下命令以生成SSH密钥:

# ssh-keygen

按Enter键接受默认设置并跳过密码。
接下来,将/root/.ssh/id_rsa.pub文件复制到nas02服务器,运行:

# ssh-copy-id root@nas02

确认您可以不使用密码登录:

# ssh root@nas02
# ssh root@nas02 date
# ssh root@nas02 uptime

现在,我们已完成所有配置并准备进行测试。

步骤5:测试

在nas01上执行以下命令:

# rsnapshot -vvv hourly

正在进行文件镜像

您需要等待,直到我们的脚本同步了所有文件。
接下来,验证作业是否成功完成:

# tail -f /var/log/messages
# tail -f /var/log/rsnapshot

输出示例:

Sep 16 23:07:21 nas01 rsnapshot[2531]: /usr/bin/rsnapshot -vvv hourly: completed successfully
Sep 17 02:15:27 nas01 rsnapshot[3686]: /usr/bin/rsnapshot -vvv hourly: completed successfully

步骤6:在nas01上设置cronjob

Cron作业用于安排要定期执行的命令。
您可以设置命令或脚本,这些命令或脚本将在设定的时间重复运行。
我将设置一个cronjob以将我的文件自动同步到nas02。
这是一个示例/etc/cron.d/rsnapshot文件:

# This is a sample cron file for rsnapshot.
# The values used correspond to the examples in /etc/rsnapshot.conf.
# There you can also set the backup points and many other things.
#
# Feel free to adapt it to your needs.
 
0 */4	* * *		root	/usr/bin/rsnapshot hourly
30 3  	* * *		root	/usr/bin/rsnapshot daily
0  3  	* * 1		root	/usr/bin/rsnapshot weekly
30 2  	1 * *		root	/usr/bin/rsnapshot monthly