ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
> #### 本文由Zero小卒编写 ### Rsync介绍 > 是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。软件适用于unix、linux、windows等多种操作系统平台。全称为Remote Rynchronization。 ssh带的scp,但优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。 Rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,类型cp命令。 Rsync还可以实现删除文件和目录的功能。 一个rsync相当于scp,cp,rm,但是还优于他们每一个命令。 ### Rsync同步 > 在同步备份数据时,默认情况下,Rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录。也可以根据权限,属主等属性的变化同步,但需要制定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以能实现快速的同步备份数据。 版本区别: version2版本会把要同步的文件加载和已有的文件比较,如果发生变化就同步过去。version3版本边比较边同步。 Rsync是文件系统之上,基于文件的同步;基于block的同步用drbd。 union双机互相同步,csync2多机同步。 ### Rsync特性 - 支持拷贝特殊文件如链接文件、设备等。 - 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。 - 可以做到保持源文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-P。 - 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率高。 - 可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密) - 可以通过socket(进程方式)传输文件和数据。(服务端与客户端) - 支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像。 ### Rsync企业应用 - 两台服务器之间的数据同步 - 集群服务器的数据同步 - 定时同步(cron+rsync)与实时同步(rsync+inotify、rsync+sersync) ### Rsync工作方式 - 单个主机本地之间的数据传输(此时类似于cp命令的功能) - 借助rcp、ssh等通道来传输数据(此时类似于scp命令的功能) - 以守护进程(socket)的方式传输数据(这个是rsync自身的重要功能) ### Rsync优缺点 - 优点:增量备份同步、支持socket(daemon)、集中备份 - 缺点:大量小文件同步的时候比对时间较长,有的时候rsync进程会停止。解决方式可以打包同步或者通过drbd方式。同步大文件(10G)这样的大文件有时候也会有问题。(发生同步中断)未完成同步前,是隐藏文件。 ### 常用参数 ``` 语法: rsync [option...] src... [dest] 说明: [option]为同步时的参数选项 -avz -z --compress 传输时进行压缩以提高传输效率,--compress-level=NUM可按级别压缩。 -v --verbose 详细模式输出,传输时的进度等信息。 -a --archive归档模式,表示以递归方式传输文件,并保持所有文件属性。等于-rtopgDl -r --对子目录以递归模式,及目录下的所有目录都同样传输。 -t --保持文件时间信息。 -o --保持文件属主信息。 -p --保持文件权限。 -g --保持文件属组信息。 -P --显示同步的过程及传输时的进度信息。 -D --保持设备文件信息。 -l --保留软连接。 -e 使用的信道协议,指定替代rsh的shell。 --exclude=PATTERN 指定排除不需要传输的文件模式。 [src]为源,即需要拷贝的分区、文件或目录等。 [dest]为目的分区、文件或目录等。 ``` ### 常见使用方法 #### 单个主机本地之间的数据传输 本地传输模式(local-only mode) ``` rsync -avz /etc /tmp/ ---增量的拷贝方式 如果拷贝目录不带”/“,表示拷贝的内容包括本层目录,如果带"/"表示拷贝本层目录以下的内容。 删除(删除性的复制)--- 就是让/tmp和/data/null中的内容完全一致。 rsync -avz --delete /data/null/ /tmp/ rsync -r --delete /tmp/cc/ /tmp/data ``` #### 借助rsync命令,通过ssh通道来传输数据(此时类似于scp命令的功能) ``` 推方式 rsync -avz /tools/httpd-2.2.27.tar.gz -e 'ssh -p 19527' root@192.168.119.20:/tools /tools/libiconv-1.14.tar.gz ---本地文件 root@192.168.119.20:/tools ---远程主机的系统用户和地址、路径 拉方式 rsync -avz -e 'ssh -p 19527' root@192.168.119.20:/tools/xy /tmp/ ``` ### 无差异的同步 >从客户端推送内容时,客户端内容与服务器端内容一致,如果服务器端有其他内容,直接被删除与客户端内容保持一致。 从服务端拉取内容时,服务端内容与客户端内容一致,如果客户端有其他内容,直接被删除与服务端内容保持一致。 ```shell rsync -avz --delete /tmp/ rsync://rsync_backup@10.0.0.8/oldboy/ --password-file=/etc/rsync.password ``` 本地目录内容会被清除: ```shell rsync -avz --delete rsync://rsync_backup@10.0.0.8/oldboy/ /tmp --password-file=/etc/rsync.password ``` ### 排除命令(只需要在一端进行配置) ``` 排除单个文件(客户端) rsync -avz --exclude=6.txt /tmp/ rsync://rsync_backup@192.168.106.135/backup --password-file=/etc/rsync.password 排除多个文件(客户端) rsync -avz --exclude={1..5}.txt /tmp/ rsync://rsync_backup@192.168.106.135/backup --password-file=/etc/rsync.password rsync -avz --exclude={1,2,3,4,5}.txt /tmp/ rsync://rsync_backup@192.168.106.135/backup --password-file=/etc/rsync.password 通过排除文件进行排除(客户端) rsync -avz --exclude-from=paichu.log /tmp/ rsync://rsync_backup@192.168.106.135/backup --password-file=/etc/rsync.password ``` 服务端排除(配置完成后,需要重启服务) 服务端配置文件中增加 ``` exclude=a b --通过空格隔开 ``` ### 多个模块的配置(共享多个文件夹) 将相同性内容放在一起,创建不同的框 服务端配置文件中增加 ``` [backup] path = /oldboy/ ignore errors [backup1] path = /oldboy1/ ```