介绍
Linux rsync命令是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。rsync使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。 rsync是一个功能非常强大的工具。Rsync默认监听TCP 873端口,必须在远程和本地系统上都安装 rsync 才可以使用。
我们把使用 rsync --daemon 启动的那一端称为远程端,执行同步命令的服务器称为本地端。
同步方式包括同步到远程端和从远程端同步到本地端这两种方式。
语法
rsync -参数 用户名@同步服务器的IP::rsyncd.conf中那个方括号里的内容 本地存放路径
例如:rsync -avzP nemo@192.168.10.1::nemo /backup
-a 参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件; -z 传输时压缩; -P 传输进度; -v 传输时的进度等信息,和-P有点关系,自己试试。可以看文档;
常用选项
最常用的是 rsync -avz ,其他常用选项说明如下(非全部):
-a 包含-rtplgoD
-r 同步目录时要加上,类似cp时的-r选项
-v 同步时显示一些信息,让我们知道同步的过程
-l 保留软连接
-L 加上该选项后,同步软链接时会把源文件给同步
-p 保持文件的权限属性
-o 保持文件的属主
-g 保持文件的属组
-D 保持设备文件信息
-t 保持文件的时间属性
--delete 删除DEST中SRC没有的文件
--exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同步
-P 显示同步过程,比如速率,比-v更加详细
-u 加上该选项后,如果DEST中的文件比SRC新,则不同步
-z 传输时压缩
安装
1、安装 rsync 和 xinetd
yum install -y rsync xinetd
2、关闭防火墙和selinux
systemctl stop firewalld.service
systemctl disable firewalld.service
setenforce 0 && sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
3、启动并检查 xinetd
systemctl enable xinetd.service
systemctl start xinetd.service
systemctl status xinetd.service
创建用户
创建 rsync 这个用户,不创建 home 目录,不可以登录系统
useradd -s /sbin/nologin -M rsync
配置文件
1、修改配置文件 /etc/rsyncd.conf ,如下示例
uid = rsync
gid = rsync
port = 873
max connections =2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rysnc.log
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
fake super = yes
[backup_gitlab]
path = /opt/backups/gitlab
[backup_mysql]
path = /opt/backups/mysql
2、创建账户密码配置文件 /etc/rsync.passwd ,,本地端的文件内容为“只有密码没有账号”,如下示例
a) 远程端(即daemon端)文件内容为“账号:密码”
rsync_backup:123456
b) 本地端(即执行rsync命令的)文件内容只有密码
123456
3、为密码文件设置600权限
chmod 600 /etc/rsync.passwd
注:本地端和远程端的区别有三点 1、本地端没有备份目录模块配置,就是中括号那个 2、本地端的密码文件中没有用户名(用户名在rsync命令中体现) 3、远程端需要使用 rsync --daemon 命令启动,本地端不需要启动服务直接执行命令即可
创建path指向的目录(远程端)
创建存放备份文件的目录,并授权给配置文件中的 rsync 用户
mkdir -p /opt/backups/gitlab
chown -R rsync:rsync /opt/backups/gitlab
启动服务
远程端需要使用 rsync --daemon 命令启动 rsync 服务(并检查端口和服务是否正常),本地端则不需要。
[root@shanhy ~]
[root@shanhy ~]
LISTEN 0 5 *:873 *:* users:(("rsync",pid=5223,fd=3))
LISTEN 0 5 [::]:873 [::]:* users:(("rsync",pid=5223,fd=5))
[root@shanhy ~]
root 5223 0.0 0.0 114844 536 ? Ss 15:53 0:00 rsync --daemon
root 8863 0.0 0.0 112812 968 pts/1 S+ 17:43 0:00 grep --color=auto rsync
文件同步(在本地端服务器操作)
1、在本地端执行命令,将文件同步推送到远程端
rsync -avz --delete --password-file=/etc/rsync.passwd /opt/fff/ttt rsync_backup@192.168.100.111::backup_gitlab
特别说明:文件发送到服务端后,文件的所有者显示的是 rsyncd.conf 上设定的用户和用户组,rsync 会记录文件的原始所有者。文件的所有者信息在客户端使用rsync取回后,在查看取回的文件信息就是同步上送前的信息了。
2、在本地端执行命令,将文件从远程端同步拉取到本地端
rsync -avz --password-file=/etc/rsync.passwd rsync_backup@192.168.100.111::backup_gitlab /opt/test/
如果你的目的只是为了一次性将A服务器的一个文件夹完整传输到B服务器,而不是备份目时,为了能保持文件所有者属性的正常传输还原,操作方式应该是: 1、A服务器是启动 rsync --daemon 的服务端。 2、B服务器作为 rsync 客户端,使用同步取回文件的方式来操作即可。
3、在本地端执行命令,将文件从一个文件夹同步到本地另外一个文件夹
rsync -avz --delete /opt/src/ /opt/dest/
参数说明: 1、-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD 2、-v, --verbose 详细模式输出 3、-z, --compress 对备份的文件在传输时进行压缩处理 4、–delete 是删除DEST中SRC没有的文件,执行同步后使两边文件保持一致(无差异备份数据)
补充
可以基于 inotify + rsync 来实现两个目录的实时同步,inotify 监听文件变动来触发 rsync 同步命令的执行。
(END)
|