码迷,mamicode.com
首页 > 其他好文 > 详细

rsync的使用

时间:2015-04-27 00:37:24      阅读:325      评论:0      收藏:0      [点我收藏+]

标签: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有六种不同的工作模式:

  1. 拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。如:rsync -a /data /backup

  2. 使用一个远程shell程序(如rshssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。如:rsync -avz *.c foo:src

  3. 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。如:rsync -avz foo:src/bar /data

  4. 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。如:rsync -av root@192.168.78.192::www /databack

  5. 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。如:rsync -av /databack root@192.168.78.192::www

  6. 列远程机的文件列表。这类似于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的使用

标签:rsync

原文地址:http://9950284.blog.51cto.com/9940284/1638829

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!