rsync(remote synchronize,https://www.samba.org/ftp/rsync/rsync.html)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快,尤其适合实现增量备份。配合任务计划,rsync能实现定时或间隔同步,配合inotify或sersync等,可以实现触发式的实时同步。rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD,此外,它在windows平台下也有相应的版本,如cwRsync和Sync2NAS等工具。信创环境下不论是终端还是服务器一般都预装了rsync,可以直接使用!
例如:rsync同步复制本地文件和文件夹
要将一个本地文件夹的内容复制到另一个本地文件夹,以替换目标文件夹中的文件,常见格式是:
rsync -rtv src_folder/ dest_folder/
rsync -av src_folder/ dest_folder/
在src_folder中末尾添加了一个斜杠,阻止创建新文件夹,如果不添加斜杠,则会在目标文件夹中创建一个名为src_folder的新文件夹。
本文以一个实际工作中归档邮件数据的简单应用来说明:
一台存储容量较大的设备作为rsync服务器,地址: 192.168.0.43,有两个目录 :/mailbackup用于同步邮件数据,/docbackup用于同步文档和其它数据。
注:一般服务器可以就不同的硬盘分区分别建了一个挂载点(例如 mount -t ext4 /dev/sdb2 /docbackup),如下表两个分区分别挂载了/mailbackup和/docbackup目录。
[root@localhost]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda2 99G 11G 83G 12% /
tmpfs 32G 76K 32G 1% /dev/shm
/dev/sda1 976M 41M 885M 5% /boot
/dev/sdb1 2.0T 1.5T 426G 78% /mailbackup
/dev/sdb2 1.8T 438G 1.3T 26% /docbackup
一台邮件服务器iredmail(postfix)作为rsync客户端,邮件数据位于 /var/vmail/ 目录下,需要定期同步到rsync服务端 的mailbackup目录。
另外还有windows共享服务器作为rsync客户,数据保存在 e:/ftproot/dzs/ 目录下,需要定期同步到rsync服务端的docbackup目录。
rsync连接远程主机进行同步或备份时有两种途径:使用远程shell程序(如ssh或rsh)进行连接,或使用TCP直接连接rsync daemon。当源路径或目的路径的主机名后面包含一个冒号分隔符时,rsync使用远程shell传输;当源路径或目的路径的主机名后面包含两个冒号,或使用rsync://URL时,rsync使用TCP直接连接rsync daemon。本文中使用daemon方式提供rsync服务!
daemon方式运行时Rsync server会打开一个873 端口,等待客户端去连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份。
在国产信创服务器上一般都已经预装了rsync服务包(中标麒麟龙芯服务器版V7是3.0.9,loongson中的版本是3.1.1,银河麒麟V10中预装的版本是3.1.1)。
# yum install rsync xinetd --服务安装
1. 对于负荷较重的 rsync 服务器应该使用独立运行方式
# /usr/bin/rsync --daemon
在/etc/rc.local中加入一行让rsync自动启动
/usr/local/rsync –daemon
2. 对于负荷较轻的 rsync 服务器可以使用 xinetd 运行方式,也是本文测试中的方式
# vim /etc/xinetd.d/rsync
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
# systemclt start rsync --启动rsync服务
# systemctl enable rsync --开机自动启动rsync服务
# netstat -ntpl | grep 873 --查看服务是否启动 ,端口号可以在/etc/services中查看
#iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT #iptables防火墙配置,或者临时关闭防火墙,systemctl stop firewalld.service
1. 配置服务端rsync目录及权限
当rsync以daemon模式运行时,配置文件是/etc/rsyncd.conf,例如下面配置中定义了两个rsync服务目录[backup]和[dzs]。
[root@localhost dzsbackup]# cat /etc/rsyncd.conf
uid=root
gid=root
use chroot=no
max connections=4
strict modes=yes
port=873
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[backup]
path=/mailbackup
auth users=scihoo
uid=root
gid=root
secrets file=/mailbackup/rsync.ps
read only=no
list=no
[dzs]
path=/docbackup
auth users=scihoo
uid=root
gid=root
secrets file=/dzsbackup/rsync.ps
read only=no
list=no
2. 配置rsync密码及密码文件权限
上边的配置文件 /etc/rsyncd.conf中已经配置rsync密码文件路径“/home/rsync.ps”,格式如下(一行一个用户)
cat /dzsbackup/rsync.ps
scihoo:scihoo
配置rsync密码文件权限
# chown root.root rsync.ps
# chmod 600 rsync.ps
# /etc/init.d/xinetd reload #重新加载配置
# vi /etc/xinetd.d/rsync //也可以不配,客户端手动启动,本测试使用手动启动方法
配置密码文件 (注:为了安全,设定密码档案的属性为:600。
# vi rsync.ps
scihoo #和Rsync Server密码设定一样
# chown root.root rsync.ps # 注意必须给权限
# chmod 600 rsync.ps # 必须修改权限
从服务器上下载文件到本地
# rsync -avz --password-file=/home/rsync.ps [email protected]::backup/vmail /var/vmail/
从客户端(邮件服务器)上传邮件数据到服务器上去
rsync -avz --password-file=/home/rsync.ps /var/vmail/ [email protected]::backup/vmail
定时每天00:15做一次数据同步,将邮件服务器作为rsync客户端,156.18.0.43作为服务端。
做一个脚本文件 /home/rsync_cron.sh
[root@mail ~]# cat /home/rsync_cron.sh
#!/bin/bash
rsync -avz --password-file=/home/rsync.ps /var/vmail/ [email protected]::backup/vmail
命令:crontab -e来将上面的脚本命令加入计划任务(注:crontab执行日志保存在系统目录/var/log/cron中,默认root权限可以查看)
[root@localhost ~]# crontab -e
# 增加下面一行,crontab格式参见下图
# rsync upload to 156.18.0.43:backup, everydate 0:15
15 0 * * * /bin/bash /home/rsync_cron.sh >/dev/null
#查看当前保存的计划任务用
crontab -l
# 脚本执行权限
[root@localhost ~]#chmod -R 777 rsync_cron.sh
Rsync本身是一个Linux平台软件,在Windows端对应的是cwRsync,使用方法和原来的Rsync类似。由于cwRsync只是用Cygwin将rsync移植到Windows平台的。
这里只使用cwRsync客户端。解压到硬盘上,执行以下cwrsync.cmd就会生成一个home子目录。
客户端执行的时候要在客户端的bin目录下,可以将客户端的程序目录添加进PATH变量,注意,不是安装目录的根目录,而是程序的目录,既bin目录。比如C:\Program Files (x86)\ICW\Bin
1 .windows客户机上 c:\cwrsync\bin加一个密码文件rsync.ps
2. 在CMD中执行下面命令(/cygdrive/e/ftproot/dzs即为E:\ftproot\dzs):
c:\cwrsync\bin>rsync -avz --password-file=rsync.ps /cygdrive/e/ftproot/dzs [email protected]::backup/citymail
3. 计划任务,可以将命令编辑为bat文档,再添加到操作系统的任务计划中。
rsync有一些图形化的管理工具,例如Grsync、GAdmin-Rsync和QSync等等;Grsync 和GAdmin-Rsync是基于GTK+图形库,与Grsync比较类似,QSync是基于QT库的Rsync工具。Windows也有相似的图形化工具,如Grsync for windows(基于GTK+库)0.6,Qtdsync(基于QT3库)0.6等,使用cygwin环境的rsync工具。还可以使用webmin-syncmin 进行Web方式管理。
但是,这些图形化工具都是用于节点-节点之间的文件同步,不支持Daemon方式的Rsync服务。
以Grsync为例,Grsync 的主要功能包括:具有常用的 rsync 选项,可以保存多个配置,在 rsync 执行前后能够运行自定义的命令,可用于 Shell 脚本和 crontab,支持导入/导出配置等。在龙芯的网站中有Grsync1.2.5安装包,这是rpm包的链接,可以从Grsync网站下载最新的1.2.8软件包,自行编译安装(可能需要安装yum instyall gtk2-devel,intltool等依赖包),再 make && make install即可。在开始菜单->系统工具中会增加一个Grsync快捷方式,运行后如下图。
菜单下面的工具栏分别是:Session下拉选择、增加一个任务(Session),删除一个任务,模拟测试任务和执行任务。还有rsync命令查看等功能。
如上图增加一个Gsync任务(Session),填写选项后,点击工具栏的执行任务按钮,可以看到任务执行情况。
另外一个管理方式是Web方式管理,这里主要介绍Webmin中Syncmin扩展模块的使用。 Syncmin基本上是直接使用ssh协议的工作模式,没有后台Daemon概念。可以创建一个个的文件同步任务并进行时间调度。
参考《龙芯架构下安装使用webmin管理工具》一文,下载并安装Syncmin扩展,管理界面如下图:
进入Syncmin主界面,列表是建立的所有同步任务,【模块配置】是对rsync的基本参数进行管理,一般可用默认。【Create File Sync】可用创建一个新的Rsync同步任务,如下图:
注:这里Sourc Host实际上是指的安装了Webmin服务器的计算机,SourcePath也就是这台webmin服务器上的文件目录。
Syncmin中可以为每个任务创建执行计划,勾选【Enabled】,然后设置执行的事件,下图是每天的3:00分执行一次同步任务。
在webmin服务器上用:crontab -l 列出root用户的Crontab,会发现新增了一项:00 3 * * * /etc/webmin/syncmin/scripts/12010135856.sh > /dev/null (文件名就是Job号)
#cat /etc/webmin/syncmin/scripts/12010135856.sh
/usr/bin/rsync -av --rsh=ssh --temp-dir=/tmp --port=55555 --delete --rsync-path=/usr/bin/rsync /baiduNetdiskDownload/ [email protected]:/root/download/ --password-file=/etc/webmin/syncmin/data/12010135856.sec
Rsync是一个双向同步的工具,很多时候还需要一个能保存/恢复历史版本的在线同步或备份工具,就像Apple的Timemachine,可以使用backintime工具(GitHub - bit-team/backintime: Back In Time - A simple backup tool for Linux),也可以在龙芯FTP上下载。Back In Time是基于rsync技术,支持 Snapshot(快照式)备份,能够设定备份计划,让你在指定的时间完成系统备份。采用Python开发,Back In Time提供有 GNOME 和 KDE 4 界面。使用手册https://backintime.readthedocs.io/。
Back In Time会对那些你选择的目录创建快照,但是只会恢复那些拥有写权限的目录。你可以对快照进行加密并且存储在网络设备、外部硬盘或者是本地的文件系统中。Back In Time只会对那些改变过的文件进行更新。在设置>选项标签中,你可以选择在没有变化发生的时候禁用快照。 Back In Time的快照时间根据计划设定,每天、每周、每个月或者是每天的某个或某几个时间段,或者是每次重启之后。你可以在主工具栏的菜单中自己更改计划时间。Back In Time适合于基于文件夹或者是基于文件的回滚操作,但是如果你想对整个文件系统进行回滚也是同样可行的。恢复一个快照相当简单,只要选择它,并且选择在哪里进行恢复就可以了,取决于你是只想恢复几个文件夹还是对整个系统进行恢复。
创建一个配置(也就是一个文件备份任务),可以新建和编辑配置,如下图增加一个名为Baidu的配置,模式支持本地、本地加密、SSH、SSH加密,SSH可以将快照保存在远端的SSH服务器上(需要ssfs支持,yum install ssfs)。第一步是确定快照的位置,下图保存在“/root/下载” 位置,也可以是一个挂载的本地/远程文件系统(远程挂载有一定的限制,参考使用手册),第二步是制定要备份的目录(略),第三步是设定日程表。
如图,是back In Time主界面,工具栏分别是:配置选择,创建快照,刷新快照列表,编辑快照......。点击快照,如果备份目录有文件变化(通过rsync判断),就生成一个新的快照。
下图是一个示例,右边有多个快照(不同时间),在16:52的时候快照中有文件dbeaver.png,后来误删除了(见左边文件管理器),需要恢复。首先找到有这个dbeaver.png文件的快照版本。
在要恢复的文件上鼠标右键,选择恢复,将dbeaver.png恢复到原来的目录(也可以用恢复....,指定恢复的目录),执行结果如下图: