标签:rsync
一、rsync的概述
rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。rsync是Linux系统下的文件同步和数据传输工具,它采用“rsync”算法,可以将一个客户机和远程文件服务器之间的文件同步,也可以在本地系统中将数据从一个分区备份到另一个分区上。如果rsync在备份过程中出现了数据传输中断,恢复后可以继续传输不一致的部分。rsync可以执行完整备份或增量备份。它的主要特点有:
1.可以镜像保存整个目录树和文件系统;
2.可以很容易做到保持原来文件的权限、时间、软硬链接;无须特殊权限即可安装;
3.可以增量同步数据,文件传输效率高,因而同步时间短;
4.可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
5.支持匿名传输,以方便进行网站镜象等;
6.加密传输数据,保证了数据的安全性;
语法:
rsync [OPTION]... SRC DEST rsync [OPTION]... SRC [USER@]:DEST rsync [OPTION]... [USER@]HOST:SRC DEST rsync [OPTION]... [USER@]HOST::SRC DEST rsync [OPTION]... SRC [USER@]HOST::DEST rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
对应于以上六种命令格式,rsync有六种不同的工作模式:
拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:rsync -a /data /backup
使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src
使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:rsync -avz foo:src/bar /data
从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av root@192.168.78.192::www /databack
从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@192.168.78.192::www
列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://192.168.78.192/www
二、rsync常用参数
-v,--verbose 详细模式输出;
-a,--archive 归档模式,表示以递归的方式传输文件,并保持所有文件属性不变,相当于使用了组合参数-rlptgoD;
-r, --recursive 对子目录以递归模式处理;
-l, --links 保留软链结;
-L, --copy-links 像对待常规文件一样处理软链结。
-p, --perms 保持文件权限;
-t, --times 保持文件时间信息;
-g, --group 保持文件属组信息;
-o, --owner 保持文件属主信息;
-D, --devices 保持设备文件信息;
-H, --hard-links 保留硬链结;
-S, --sparse 对稀疏文件进行特殊处理以节省DST的 空间;
-z, --compress 对备份的文件在传输时进行压缩处理;
--delete 删除那些DST中SRC没有的文件。
--exclude=PATTERN 指定排除不需要传输的文件模式。
--include=PATTERN 指定不排除而需要传输的文件模式。
--bwlimit=KBPS 限制I/O带宽,KBytes per second。
--progress 显示同步过程的详细信息
三、应用举例:
1.本机内的同步:
[root@hpf-linux yuan]# rsync -av /root/yuan /tmp/test
sending incremental file list
yuan/
yuan/test.txt
yuan/test1.txt
sent 1518 bytes received 149 bytes 3334.00 bytes/sec
total size is 1044 speedup is 0.63
[root@hpf-linux yuan]# ls /tmp/test/
yuan
有上例可见目录后不加‘/’会把源目录同步到备份目录下;
[root@hpf-linux yuan]# rsync -av /root/yuan/ /tmp/test
sending incremental file list
./
test.txt
test1.txt
sent 1499 bytes received 148 bytes 3294.00 bytes/sec
total size is 1044 speedup is 0.63
[root@hpf-linux yuan]# ls /tmp/test/
1test.txt 1.txt 2.txt 3.txt 4.txt test1.txt test.txt
加上‘/’就会把源目录的文件同步到目标目录内,
2.增量备份
[root@hpf-linux yuan]# touch 1.log
[root@hpf-linux yuan]# rsync -av /root/yuan/ /tmp/test
sending incremental file list
./
1.log
sent 207 bytes received 34 bytes 482.00 bytes/sec
total size is 1044 speedup is 4.33
3.链接的同步:
[root@hpf-linux yuan]# ll
总用量 8
-rw-r--r-- 1 root root 0 4月 25 18:13 1.log
lrwxrwxrwx 1 root root 11 4月 25 18:09 passwd.bak -> /etc/passwd
-rw-r--r-- 1 root root 52 4月 12 04:29 test1.txt
-rw-r--r-- 1 root test1 43 4月 13 04:46 test.txt
[root@hpf-linux yuan]# rsync -av /root/yuan/ /tmp/test/
sending incremental file list
./
1.log
passwd.bak -> /etc/passwd
sent 172 bytes received 37 bytes 418.00 bytes/sec
total size is 106 speedup is 0.51
[root@hpf-linux yuan]# ls /tmp/test/
1.log passwd.bak test1.txt test.txt
[root@hpf-linux yuan]# rsync -avL /root/yuan/ /tmp/test/
sending incremental file list
passwd.bak
sent 1286 bytes received 31 bytes 2634.00 bytes/sec
total size is 1231 speedup is 0.93
[root@hpf-linux yuan]# ls /tmp/test/
1.log passwd.bak test1.txt test.txt
从上例中可以得出:若使用-a选项内包含的l,则只会同步软链接文件(也就是windows上的快捷方式),若要同步目标链接文件则需要添加L选项,在服务器上同步数据时要注意该选项。同时在同步时可以用-z选项(备份的文件在传输时进行压缩处理)来节省带宽。
4.-u选项的举例:
[root@hpf-linux yuan]# echo 333333 >> /tmp/test/1.log
[root@hpf-linux yuan]# cat !$
cat /tmp/test/1.log
333333
[root@hpf-linux yuan]# rsync -avu /root/yuan/ /tmp/test/
sending incremental file list
sent 127 bytes received 12 bytes 278.00 bytes/sec
total size is 106 speedup is 0.76
[root@hpf-linux yuan]# cat 1.log
[root@hpf-linux yuan]# cat /tmp/test/1.log
333333
由上例可以看出在我们的备份文件添加新的内容后,若不想被源文件覆盖则加上-u选项。
4.--delete 选项的使用:
[root@hpf-linux yuan]# touch /tmp/test/222.txt
[root@hpf-linux yuan]# ls
1.log passwd.bak test1.txt test.txt
[root@hpf-linux yuan]# rsync -av /root/yuan/ /tmp/test/
sending incremental file list
./
1.log
sent 169 bytes received 34 bytes 406.00 bytes/sec
total size is 106 speedup is 0.52
[root@hpf-linux yuan]# ls /tmp/test/
1.log 222.txt passwd.bak test1.txt test.txt
[root@hpf-linux yuan]# ls
1.log passwd.bak test1.txt test.txt
[root@hpf-linux yuan]# rsync -av --delete /root/yuan/ /tmp/test/
sending incremental file list
deleting 222.txt
sent 127 bytes received 12 bytes 278.00 bytes/sec
total size is 106 speedup is 0.76
[root@hpf-linux yuan]# ls /tmp/test/
1.log passwd.bak test1.txt test.txt
[root@hpf-linux yuan]# ls
1.log passwd.bak test1.txt test.txt
若在备份文件内添加新的文件,若要保持源文件与备份文件的一致需要加上该选项。
5.--exclude选项的应用:
[root@hpf-linux yuan]# rm -rf /tmp/test/*
[root@hpf-linux yuan]# rsync -av --exclude="*.txt" /root/yuan/ /tmp/test/
sending incremental file list
./
1.log
passwd.bak -> /etc/passwd
sent 124 bytes received 37 bytes 322.00 bytes/sec
total size is 11 speedup is 0.07
[root@hpf-linux yuan]# ls /tmp/test/
1.log passwd.bak
匹配多个
[root@hpf-linux yuan]# !rm
rm -rf /tmp/test/*
[root@hpf-linux yuan]# rsync -av --exclude="*.txt" --exclude="*.log" /root/yuan/ /tmp/test/
sending incremental file list
./
passwd.bak -> /etc/passwd
sent 67 bytes received 18 bytes 170.00 bytes/sec
total size is 11 speedup is 0.13
[root@hpf-linux yuan]# ls /tmp/test/
passwd.bak
6. 通过ssh的22端口进行同步数据:
首先在同步数据之前把客户机上的公钥复制到源文件机的/root/.ssh/authorized_keys内。
[root@localhost ~]# rsync -avL root@192.168.1.132:/root/yuan/ /tmp/test/
receiving incremental file list
mysql
passwd.bak
sent 49 bytes received 123649457 bytes 9891960.48 bytes/sec
total size is 123634251 speedup is 1.00
[root@localhost ~]# ls -lh /tmp/test/
总用量 118M
-rw-r--r-- 1 root root 0 4月 25 18:13 1.log
-rw-r--r-- 1 root root 118M 10月 6 2009 mysql
-rw-r--r-- 1 root root 1.2K 4月 21 17:10 passwd.bak
-rw-r--r-- 1 root root 52 4月 12 04:29 test1.txt
-rw-r--r-- 1 root 500 43 4月 13 04:46 test.txt
7.由于mysql文件较大可以使用-z选项(在传输过程中压缩传输用以节省带宽)-P(在同步的过程中可以看到同步的过程状态):
[root@localhost ~]# ls /tmp/test/
1.log passwd.bak test1.txt test.txt
[root@localhost ~]# rsync -avzLP root@192.168.1.132:/root/yuan/ /tmp/test/
receiving incremental file list
./
mysql
123633020 100% 4.65MB/s 0:00:25 (xfer#1, to-check=3/6)
sent 33 bytes received 122435695 bytes 4620216.15 bytes/sec
total size is 123634251 speedup is 1.01
[root@localhost ~]# ls /tmp/test/
1.log mysql passwd.bak test1.txt test.txt
8.同时在传输过程中我们还可以限定传输的速度,如限制1000K/s
[root@localhost ~]# !rm
rm -f /tmp/test/mysql
[root@localhost ~]# rsync -avzLP --bwlimit=1000 root@192.168.1.132:/root/yuan/ /tmp/test/
receiving incremental file list
./
mysql
123633020 100% 991.89kB/s 0:02:01 (xfer#1, to-check=3/6)
sent 33 bytes received 122435695 bytes 991382.41 bytes/sec
total size is 123634251 speedup is 1.01
[root@localhost ~]# ls /tmp/test/
1.log mysql passwd.bak test1.txt test.txt
9.若我们的ssh端口被人为改变了的传输方法:
源文件主机做以下操作:
[root@hpf-linux yuan]# vi /etc/ssh/sshd_config //更改端口号(大于1023)
[root@hpf-linux yuan]# /etc/init.d/sshd restart //重启服务
[root@hpf-linux yuan]# touch study.txt
客户机则会出现以下现象:
[root@localhost ~]# rsync -avzLP root@192.168.1.132:/root/yuan/ /tmp/test/
ssh: connect to host 192.168.1.132 port 22: Connection refused
rsync: connection unexpectedly closed (0 bytes received so far) [receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(600) [receiver=3.0.6]
说明端口有问题,若想传输应做以下操作:
[root@localhost ~]# rsync -avzLP -e"ssh -p 2200" root@192.168.1.132:/root/yuan/ /tmp/test/
receiving incremental file list
./
study.txt
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=2/7)
sent 33 bytes received 184 bytes 144.67 bytes/sec
total size is 123634251 speedup is 569743.09
[root@localhost ~]# ls /tmp/test/
1.log mysql passwd.bak study.txt test1.txt test.txt
10.rsync应用实例 - 后台服务方式
配置文件 /etc/rsyncd.conf,内容如下:
#port=873 #监听端口默认为873,也可以是别的端口
log file=/var/log/rsync.log #指定日志
pid file=/var/run/rsyncd.pid #指定pid
#address=192.168.0.10 #可以定义绑定的ip
以上部分为全局配置部分,以下为模块内的设置
[test] #为模块名,自定义
path=/root/rsync # 指定该模块对应在哪个目录下
use chroot=true #是否限定在该目录下,默认为true,当有软连接时,需要改为fasle
max connections=4 # 指定最大可以连接的客户端数
read only=no #是否为只读
list=true #是否可以列出模块名
uid=root #以哪个用户的身份来传输
gid=root #以哪个组的身份来传输
auth users=test #指定验证用户名,可以不设置
secrets file=/etc/rsyncd.passwd #指定密码文件,如果设定验证用户,这一项必须设置
hosts allow=192.168.1.132 #设置可以允许访问的主机,可以是网段
密码文件/etc/rsyncd.passwd的内容格式为:username:password
启动服务的命令是:rsync --daemon
默认去使用/etc/rsyncd.conf这个配置文件,也可以指定配置文件 rsync --daemon --config=/etc/rsyncd2.conf
在源文件机器上配置好文件后启动服务并检查该服务是否启动,注意在配置文件内指定的源文件目录若机器上未创建则要手动创建:
[root@hpf-linux yuan]# rsync --daemon
[root@hpf-linux yuan]# ps aux |grep rsync
root 1555 0.0 0.0 6236 644 ? Ss 04:01 0:00 rsync --daemon
root 1557 0.0 0.0 5980 740 pts/0 S+ 04:01 0:00 grep --color rsync
[root@hpf-linux yuan]# netstat -lnp |grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1555/rsync
tcp 0 0 :::873 :::* LISTEN 1555/rsync
在客户端进行文件上传:
[root@localhost ~]# rsync -avLP install.log 192.168.1.132::test/yum.log
sending incremental file list
install.log
12577 100% 0.00kB/s 0:00:00 (xfer#1, to-check=0/1)
sent 12652 bytes received 27 bytes 25358.00 bytes/sec
total size is 12577 speedup is 0.99
验证配置文件的use chroot=true :
源文件端有软连接到别的目录
[root@hpf-linux yuan]# ls -l
总用量 28
-rw-r--r-- 1 root root 0 4月 25 18:13 1.log
lrwxrwxrwx 1 root root 48 4月 26 17:39 mysql -> /root/mysql-5.1.40-linux-i686-icc-glibc23.tar.gz
lrwxrwxrwx 1 root root 11 4月 25 18:09 passwd.bak -> /etc/passwd
-rw-r--r-- 1 root root 13 4月 27 04:03 study.txt
-rw-r--r-- 1 root root 52 4月 12 04:29 test1.txt
-rw-r--r-- 1 root test1 43 4月 13 04:46 test.txt
-rw-r--r-- 1 root root 12577 4月 23 19:06 yum.log
客户端如下操作:
[root@localhost ~]# rsync -avzLP 192.168.1.132::test/ /root/aming
receiving incremental file list
symlink has no referent: "/mysql" (in test)
symlink has no referent: "/passwd.bak" (in test)
./
1.log
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=4/6)
study.txt
13 100% 12.70kB/s 0:00:00 (xfer#2, to-check=3/6)
test.txt
43 100% 41.99kB/s 0:00:00 (xfer#3, to-check=2/6)
test1.txt
52 100% 16.93kB/s 0:00:00 (xfer#4, to-check=1/6)
yum.log
12577 100% 2.40MB/s 0:00:00 (xfer#5, to-check=0/6)
sent 124 bytes received 4232 bytes 8712.00 bytes/sec
total size is 12685 speedup is 2.91
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1505) [generator=3.0.6]
[root@localhost ~]# ls /root/aming/
1.log study.txt test1.txt test.txt yum.log
[root@localhost ~]# rsync -avzP 192.168.1.132::test/ /root/aming
receiving incremental file list
mysql -> /root/mysql-5.1.40-linux-i686-icc-glibc23.tar.gz
passwd.bak -> /etc/passwd
sent 32 bytes received 254 bytes 572.00 bytes/sec
total size is 12744 speedup is 44.56
[root@localhost ~]# ls -lh aming/
总用量 28K
-rw-r--r-- 1 root root 0 4月 25 18:13 1.log
lrwxrwxrwx 1 root root 48 4月 26 17:39 mysql -> /root/mysql-5.1.40-linux-i686-icc-glibc23.tar.gz
lrwxrwxrwx 1 root root 11 4月 25 18:09 passwd.bak -> /etc/passwd
-rw-r--r-- 1 root root 13 4月 27 04:03 study.txt
-rw-r--r-- 1 root root 52 4月 12 04:29 test1.txt
-rw-r--r-- 1 root 500 43 4月 13 04:46 test.txt
-rw-r--r-- 1 root root 13K 4月 23 19:06 yum.log
[root@localhost ~]# cd aming/
[root@localhost aming]# cd mysql
-bash: cd: mysql: 没有那个文件或目录
[root@localhost aming]# ls
1.log mysql passwd.bak study.txt test1.txt test.txt yum.log
[root@localhost aming]# cat mysql
cat: mysql: 没有那个文件或目录
说明不能同步超过源文件目录以外的文件,若不加-L选项则不会报错但是只能同步链接文件(不能打打开和使用),passwd.bak能用是因为/etc下有该文件。
若将配置文件 read only=no 改为read only=yes,这不能上传文件:
[root@localhost ~]# rsync -avLP install.log 192.168.1.132::test/
sending incremental file list
ERROR: module is read only
rsync error: syntax or usage error (code 1) at main.c(866) [receiver=3.0.6]
rsync: read error: Connection reset by peer (104)
rsync error: error in rsync protocol data stream (code 12) at io.c(759) [sender=3.0.6]
说明文件只能同步下载不能上传。
配置文件的list=true的使用:
[root@localhost ~]# rsync 192.168.1.132::
test
改为list=no 则不能找到名字。
扩展学习:
http://www.open-open.com/lib/view/open1423121939623.html
标签:rsync
原文地址:http://9950284.blog.51cto.com/9940284/1638829