当前服务器上了满速的nvme(970 EVO Plus(MZ-V7S1T0B),但却不敢把重要应用(比如gitlab)放在上面跑,因为这玩意一旦哪天罢了工,数据的可恢复性为0。

或许我们可以使用nvme的raid1卡来解决这个问题,但又不好确认raid1卡是否能成功的被vmware esxi识别,同时价格也是需要考虑的因素。

顺便说一句:970 EVO Plus在vmware esxi 6.7.0上表现良好,即插即用。
image.png

rsync

而rsync恰好能够解决这个问题,基本的思路很简单:

  1. 在nas端开启rsync服务
  2. 在客户端启用rsync,并设置需要同步的文件夹

nas端

nas我们可以使用群晖或是FreeNAS,或是使用FreeBSD的zfs系统来打造。本文以群晖为例。

群晖的官方网站有关于如何启用rsync的说明这为我们实现此功能降低了难度。

按上文我们创建一个备案专用文件夹(比如bak),然后创建一个只有当前文件夹读写权限的用户(用户组建议先选择为管理员,避免一些ssh认证问题),设置一个复杂点的密码,在应用设置上,仅勾选rsync。

另外建议使用个非22端口,这个应该是更安全一点。

客户端

nas就绪后,我们开始在客户端上安装rsync服务。

debian

系统不重要,重要的是是否可以成功安装rsync服务。

# su -
# bash
# apt install sshpass
# pat install rsync

接下来我们先使用ssh连接一下主机,避免产生rsync Host key verification failed错误。

# ssh -p yoursshport rsyncuser@your.nas.domain.name

安装完毕后,开始尝试进行同步:

# sshpass -p "rsyncpassword" rsync -av -e 'ssh -p yoursshport' --progress /home/panjie rsyncuser@your.nas.domain.name::bak/foldername

FreeBSD

首先按官网指导安装rsync客户端

[root@nfs /yzpool/data/hosts]# pkg install sshpass
[root@nfs /yzpool/data/hosts]# pkg install rsync
Updating FreeBSD repository catalogue...
FreeBSD repository is up to date.
--
Some scripts provided by rsync such as rrsync requires
python which is not installed by default

最后提示我们还需要安装python

# pkg install python

定时任务

rsync有个非常大的优点在于其同步的时候,会进行差异化同步,这极好的保证了备份的效率。
结合定时任务,我们便可以实现按一定周期进行同步的目的。

debain

我先建议个批处理文件(比如为: rsync.sh),并保存在/home/username下,内容就是我们前面执行的命令:

#!/bin/bash
sshpass -p "rsyncpassword" rsync -av -e 'ssh -p yoursshport' --progress /home/panjie rsyncuser@your.nas.domain.name::bak/foldername \
> /home/panjie/rsync.log
echo "done at $(date)" >> /home/panjie/rsync.log
cat /home/panjie/rsync.log

保存后为其增加执行权限:#chmod -x rsync.sh,然后执行一遍看是否报错:#./rsync.sh。没有错误的话把nas中的同步用户用户组设置为普通用户后再执行一遍#./rsync.sh

最后执行crontab -e便可以设置定时任务了:

# crontab -e

然后输入以下内容:

0 */1 * * * /home/panjie/rsync.sh

上述定义了一个每1小时执行一次的策略。可以借助crontab.gura来快速生成相关的计划任务。

FreeBSD

我先建议个批处理文件(比如为: rsync.sh),并保存在/home/username下,内容就是我们前面执行的命令:

#!/bin/bash
/usr/local/bin/sshpass -p "rsyncpassword" /usr/local/bin/rsync -av -e 'ssh -p yoursshport' --progress /home/panjie rsyncuser@your.nas.domain.name::bak/foldername \
> /home/panjie/rsync.log
echo "done at $(date)" >> /home/panjie/rsync.log
cat /home/panjie/rsync.log
注意:一定在要.sh中使用命令的全路径,所以其不会自动执行成功。如果我们只为sshpass使用了全路径,却忘了给rsync全路径,则会出现Failed to run command: No such file or directory错误.

保存后为其增加执行权限:#chmod -x rsync.sh,然后执行一遍看是否报错:#./rsync.sh。没有错误的话把nas中的同步用户用户组设置为普通用户后再执行一遍#./rsync.sh

最后执行crontab -e便可以设置定时任务了:

# crontab -e

然后输入以下内容:

0 */1 * * * /home/panjie/rsync.sh

上述定义了一个每1小时执行一次的策略。可以借助crontab.gura来快速生成相关的计划任务。

FreeBSD系统要求自动任务中的命令是全路径,为了保证计划任务顺利被执行,需要使用$ env -i SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/home/panjie NAME=panjie /home/panjie/rsync.sh来测试。注意上述命令中的panjie应该换成你自己的用户名。

本机备份

rsync虽然是remote rsync,但是也可以适用于本地文件夹备份,比如我们在计算机安装两块硬盘,一主一备,则可以使用rsync完成从主备份任务.

选定源目标文件夹与目标文件夹后,我们执行进行测试:

# rsync -anv <source> <destination>

测试没问题后,使用sudo crontab -e将其添加到定时任务:

 0 */1 *   *   *    rsync -a <source> <destination>

NEXT

FreeBSD启用ZFS快照功能
FreeBSD系统打造安全可靠的ZFS存储池
FreeBSD系统安装NFS(Network File System)服务并启用基于 IP 认证的机制
FreeBSD启用ZFS快照功能


潘杰
3.1k 声望238 粉丝