ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
#### 一、概念 Rsync(remote sync)是UNIX 及类UNIX 平台下一款神奇的数据镜像备份软件,它不 像FTP 或其他文件传输服务那样需要进行全备份,Rsync 可以根据数据的变化进行差异备 份,从而减少数据流量,提高工作效率。你可以使用它进行本地数据或远程数据的复制, Rsync 可以使用SSH 安全隧道进行加密数据传输。Rsync 服务器端定义源数据,Rsync 客 户端仅在源数据发生改变后才会从服务器上实际复制数据至本地,如果源数据在服务器端被 删除,则客户端数据也会被删除,以确保主机之间的数据是同步的。Rsync 使用TCP 873 端口。 * rsync功能 * 作为命令,实现本地-远程文件同步 * 作为服务,实现本地-远程文件同步 * rsync特点 * 可以镜像保存整个目录树和文件系统 * 可以保留原有的权限(permission,mode),owner,group,时间(修改时间,modify time),软硬链接,文件acl,文件属性(attributes)信息等 * 传输效率高,使用同步算法,只比较变化的 * 支持匿名传输,方便网站镜像;也可以做验证,加强安全 * rsync同类服务 * sync 同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。 * async 异步:将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘。 * rsync 远程同步:remote synchronous #### 二、安装 使用CentOS 7 系统安装部署Rsync 非常方便,安装光盘以及YUM 源中都提供了rsync 软件包,使用YUM 方式安装即可。 ~~~ [root@centos7 ~]# yum -y install rsync [root@centos7 ~]# vim /etc/rsync.conf ~~~ #### 三、配置文件详解 ~~~ #/etc/rsyncd.conf #设置服务器信息提示文件名称,在该文件中编写提示信息 motd file = /etc/rsyncd.motd #开启Rsync 数据传输日志功能 transfer logging = yes #设置日志文件名称,可以通过log format 参数设置日志格式 log file =/var/log/rsyncd.log #设置Rsync 进程号保存文件名称 pid file =/var/run/rsyncd.pid #设置锁文件名称 lock file =/var/run/rsync.lock #设置服务器监听的端口号,默认为873 port = 873 #设置服务器所监听网卡接口的IP 地址,这里服务器IP 地址为192.168.0.254 address = 192.168.0.254 #设置进行数据传输时所使用的账户名称或ID 号,默认使用nobody uid = nobody #设置进行数据传输时所使用的组名称或GID 号,默认使用nobody gid = nobody #设置user chroot 为yes 后,rsync 会首先进行chroot 设置,将根映射到path 参数路径下,对客户 #端而言,系统的根就是path 参数所指定的路径。但这样做需要root 权限,并 且在同步符号 #连接资料时仅会同步名称,而内容将不会同步。 use chroot = no #是否允许客户端上传数据,这里设置为只读。 read only = yes #设置并发连接数,0 代表无限制。超出并发数后,如果依然有客户端连接请 求,则将会收 #到稍后重试的提示消息 max connections = 10 #模块,Rsync 通过模块定义同步的目录,模块以[name]的形式定义,这与Samba 定义共 #享目录是一样的效果。在Rsync 中也可以定义多个模块 [common] #comment 定义注释说明字串 comment = Web content #同步目录的真实路径通过path 指定 path = /common #忽略一些IO 错误 ignore errors #exclude 可以指定例外的目录,即将common 目录下的某个目录设置为不同步 数据 #exclude = test/ ~~~ #### 四、rsync三种工作方式 ##### 4.1、本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。 ~~~ Local: rsync [OPTION...] SRC... [DEST] ~~~ ##### 4.2、本地主机使用远程shell和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格式。 ~~~ Access via remote shell:         Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]         Push: rsync [OPTION...] SRC... [USER@]HOST:DEST ~~~ ##### 4.3、本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述"Access via rsync daemon"段的格式。 ~~~   Access via rsync daemon:     Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]           rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]     Push: rsync [OPTION...] SRC... [USER@]HOST::DEST           rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST ~~~ > 前两者的本质是通过管道通信,即使是远程shell。而方式(3)则是让远程主机上运行rsync服务,使其监听在一个端口上,等待客户端的连接。 > > 但是,通过远程shell也能临时启动一个rsync daemon,这不同于方式(3),它不要求远程主机上事先启动rsync服务,而是临时派生出rsync daemon,它是单用途的一次性daemon,仅用于临时读取daemon的配置文件,当此次rsync同步完成,远程shell启动的rsync daemon进程也会自动消逝。此通信方式的命令行语法格式同"Access via rsync daemon",但要求options部分必须明确指定"--rsh"选项或其短选项"-e"。 #### 五、常用参数 > 由于rsync支持一百多个选项,所以此处只介绍几个常用选项 ~~~ -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 传输时压缩 ~~~ #### 六、示列 ##### 6.1、本地传输 ~~~ [root@ansible-server /]# rsync /tmp/ /home/   #将/tmp下所有文件传输到/home下 [root@ansible-server /]# rsync /tmp /home/ #将/tmp下所有文件包含文件夹tmp传输到/home下 #使用rsync一定要注意的一点是,源路径如果是一个目录的话,带上尾随斜线和不带尾随斜线是不一样的,不带尾随斜线表示的是整个目录包括目录本身,带上尾随斜线表示的是目录中的文件,不包括目录本身。 ~~~ ##### 6.2、从服务器到本地 ~~~ [root@ansible-server /]# rsync -r 172.16.3.40:/tmp /tmp #将远程服务器172.16.3.40上的/tmp目录传输到本地服务器/tmp路径下 ~~~ ##### 6.3、从本地到远程服务器 ~~~ [root@ansible-server /]# rsync -r /tmp 172.16.3.40:/tmp # 将本地/tmp目录拷贝到远程主机172.16.3.40的/tmp下,以保证远程/tmp目录和本地/etc保持同步 ~~~