文件复制工具--rsync

Posted 还行少年

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件复制工具--rsync相关的知识,希望对你有一定的参考价值。

一、rsync服务器

1.rsync介绍

  • rsync远程同步是一款主要为快速增量备份的工具;简单来说就是复制,可以用于本地的复制,也可以用户跨主机(ssh/rsync主机同步)之间的复制;官网:https://rsync.samba.org/
  • rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性
  • 它能本地复制,远程复制,或者远程守护进程方式复制,它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制

2.同步方式

①全量备份

  • 原有的数据全部传送
  • 把原来的文件和新的文件一起统一传送
  • 全量复制,效率低

②增量备份

  • 在传输数据之前通过一些算法通过你有的数据和我有的数据进行对比,把不一样的数据通过网络传输
  • 增量复制,效率高

3.rsync命令

rsync [选项]  原始位置   目标位置
常用选项说明
-r递归模式,包含目录及子目录中的所有文件
-l对于符号链接文件仍然复制为符号链接文件
-v显示同步过程的详细信息
-z在传输文件时进行压缩
-a归档模式,递归并保留对象属性,等同于-rlptgoD
-p保留文件的权限标记
-t保留文件的时间标记
-g保留文件的属组标记(仅超级用户使用)
-o保留文件的属主标记(仅超级用户使用)
-H保留硬链接文件
-A保留ACL属性信息
-D保留设备文件及其他特殊文件
- - delete删除目标位置有而原始位置没有的文件
- - checksum根据对象的校验和来决定是否跳过文件

二、实验

1、rsync本地复制

[root@localhost ~]# mkdir /abc
[root@localhost ~]# mkdir /bcd
[root@localhost ~]# mkdir /cde
[root@localhost ~]# cd /abc
[root@localhost abc]# touch 1.txt
[root@localhost abc]# rsync -avz /abc/ /bcd   //将/abc的文件复制到/bcd目录下
sending incremental file list
./
1.txt

sent 103 bytes  received 38 bytes  282.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost abc]# rsync -avz /abc /cde    //将/abc的文件连同/abc复制到/dce下
sending incremental file list
abc/
abc/1.txt

sent 115 bytes  received 39 bytes  308.00 bytes/sec
total size is 0  speedup is 0.00
[root@localhost abc]# ls /bcd  /cde
/bcd:
1.txt

/cde:
abc
[root@localhost abc]# cp -a /abc /opt    //cp命令无论后面接不接/都会复制目录本身
[root@localhost abc]# ls /opt/
abc  rh
[root@localhost abc]# rm -rf /opt/abc/
[root@localhost abc]# cp -a /abc/ /opt
[root@localhost abc]# ls /opt/
abc  rh
[root@localhost abc]# 

2.远程复制

环境
服务端  192.168.30.7
客户端  192.168.30.8

2.1 配置rsync服务器

[root@localhost /]# vim /etc/rsyncd.conf 
uid = nobody					#root
gid = nobody					#root
use chroot = yes				#禁锢在源目录                                                
address = 192.168.30.7	#监听地址
port 873                     	#监听端口 tcp/udp 873,可通过 cat /etc/services | grep rsync 查看                                           
log file = /var/log/rsyncd.log	#日志文件位置                  
pid file = /var/run/rsyncd.pid	#存放进程ID的文件位置                  
hosts allow = 192.168.30.0/24	#允许访问的客户机地址
[wwwroot]   					##第一个共享模块                                                           
path = /var/www/html     		#源目录的实际路径                               
comment = Document Root of www.ljm.com	
read only = yes             	#是否为只读                                     
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z  	#同步时不再压缩的文件类型      
auth users = backuper           #授权账户,多个账号以空格分隔                                 
secrets file = /etc/rsyncd_users.db #存放账户信息的数据文件      

2.2 为备份账户创建数据文件

[root@localhost /]# vim /etc/user.db
[root@localhost /]# cat /etc/user.db 
backuper:abc123     
[root@localhost /]# chmod 600 /etc/user.db   //必须赋予600的权限,否则会报错

@ERROR: auth failed on module wwwroot
rsync error: error starting client-server protocol (code 5) at main.c(1648) [Receiver=3.1.2]

2.3 创建共享目录

[root@localhost /]# mkdir -p /var/www/html
[root@localhost /]# chmod +r /var/www/html/
[root@localhost /]# ls -ld /var/www/html/
drwxr-xr-x 2 root root 6 810 19:10 /var/www/html/
[root@localhost /]# echo "hello world" >> /var/www/html/1.txt  //创建同步的文档

[root@localhost /]# rsync --daemon   //启动rsync
[root@localhost /]# netstat -natp | grep rsync
tcp        0      0 192.168.30.7:873        0.0.0.0:*               LISTEN      27641/rsync    

2.4 客户端同步

[root@localhost ~]# rsync -avz backuper@192.168.30.7::wwwroot /abc/
Password: 
receiving incremental file list
./
1.txt

sent 46 bytes  received 119 bytes  47.14 bytes/sec
total size is 12  speedup is 0.07
[root@localhost ~]# ls /abc
1.txt
[root@localhost ~]# cat /abc/1.txt 
hello world
[root@localhost ~]# 

2.5 客户端免交互

3.rsync + inotify

监控文件系统的变动,并同步文件到rsync服务器

3.1 安装inotify

[root@localhost opt]# yum -y install gcc gcc-c++ 
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
软件包 gcc-4.8.5-44.el7.x86_64 已安装并且是最新版本
软件包 gcc-c++-4.8.5-44.el7.x86_64 已安装并且是最新版本
无须任何处理
[root@localhost opt]# tar xf inotify-tools-3.14.tar.gz 
[root@localhost opt]# cd inotify-tools-3.14/
[root@localhost inotify-tools-3.14]# ./configure && make && make install

3.2 修改inotify内核参数

[root@localhost ~]# vim /etc/sysctl.conf 
[root@localhost ~]# sysctl -p
fs.inotify.max_queued_events = 32768      #监控时间队列,默认为16384
fs.inotify.max_user_instances = 1024	  #最多监控实例数,默认为128
fs.inotify.max_user_watches = 1048576	  #每个实例最多监控文件数,默认为8192

3.3 编写触发同步脚本

[root@localhost ~]# cat /opt/inotify.sh 
#!/bin/bash
#执行“inotifywait”命令,然后在客户端向 /abc 目录下添加文件、移动文件,跟踪屏幕输出结果
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /abc/"
RSYNC_CMD="rsync -apzH --delete --password-file=/etc/server.pass  backuper@192.168.30.7::wwwroot/ /abc/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
    if [ $(pgrep rsync | wc -l) -le 0 ] ; then
        $RSYNC_CMD
	fi
done
[root@localhost ~]# chmod +x /opt/inotify.sh
[root@localhost ~]# chmod +x /etc/rc.d/rc.local
[root@localhost ~]# echo "/opt/inotify.sh" >> /etc/rc.d/rc.local

3.4 修改rsync配置文件

[root@localhost /]# vim /etc/rsyncd.conf 

uid = root
gid = root
use chroot = yes
address = 192.168.30.7
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.30.0/24
[wwwroot]                                                          
path = /var/www/html
comment = Document Root of www.ljm.com
read only = no    //关闭只读,上行同步需要可写权限
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = backuper
secrets file = /etc/user.db

3.5 测试

在客户端创建文件,查看服务端

小结

rsync是一个快速和非常方便的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制,它提供了大量的
参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制

以上是关于文件复制工具--rsync的主要内容,如果未能解决你的问题,请参考以下文章

AIX环境下文件远程传输复制工具--rsync安装测试

rsync同步工具和xsyncxcall集群脚本

集群文件同步脚本工具rsyncxsync和xcall

集群文件同步脚本工具rsyncxsync和xcall

RSYNC

rsync存储服务器-全网备份