0%

rsync

rsync服务介绍

  • rsync功能

    • 做为命令,实现本地-远程文件同步
    • 做为服务,实现本地-远程文件同步
  • rsync特点

    • 可以镜像保存整个目录树和文件系统
    • 可以保留原有的权限(permssion,mode),owner,group,时间(修改时间,modifiy time),软硬链接等信息
    • 传输效率高,使用同步算法,至比较变化的
    • 支持匿名传输,方便网站镜;也可以做验证,加强安全
  • rsync同类服务

    • sync同步:刷新文件系统缓存,强制将修改过的数据写入磁盘,并且更新超级块
    • async异步:将数据先放到缓冲区,在周期性(一般是30s)的去同步到磁盘
    • rsync 远程同步,remote synchronous

rsync语法介绍

man rsync语法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

rsync(1) rsync(1)

NAME
rsync - a fast, versatile, remote (and local) file-copying tool ##rsync命令介绍

SYNOPSIS
Local: rsync [OPTION...] SRC... [DEST]

Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST

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

Usages with just one SRC arg and no DEST arg will list the source files instead of copying.

rsync 相关参数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-v      详细模式输出
-a 归档模式,递归的方式传输文件,并保持文件的属性,equals -rlptgoD
-r 递归拷贝目录
-l 保留软链接
-p 保留原有权限
-t 保留原有时间(修改)
-g 保留属组权限
-o 保留属主权限
-D 等于--devices --specials 表示支持b,c,s,p类型的文件
-R 保留相对路径
-H 保留硬链接
-A 保留ACL策略
-e 指定要执行的远程shell命令
-E 保留可执行权限
-X 保留扩展属性信息 a属性

rsync做为命令使用

同步本地数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
[root@116v85v26v24 tmp]# mkdir dir1
[root@116v85v26v24 tmp]# mkdir dir2
[root@116v85v26v24 tmp]# touch dir1/file{1..5}
[root@116v85v26v24 tmp]# ls dir1/
file1 file2 file3 file4 file5
[root@116v85v26v24 tmp]# ls dir2
[root@116v85v26v24 tmp]# rsync -va dir1 dir2/
sending incremental file list
dir1/
dir1/file1
dir1/file2
dir1/file3
dir1/file4
dir1/file5

sent 279 bytes received 111 bytes 780.00 bytes/sec
total size is 0 speedup is 0.00
[root@116v85v26v24 tmp]# ls /tmp/dir1/
file1 file2 file3 file4 file5
[root@116v85v26v24 tmp]# ls /tmp/dir2/
dir1
[root@116v85v26v24 tmp]# ls /tmp/dir2/dir1/
file1 file2 file3 file4 file5
[root@116v85v26v24 tmp]# rsync -va dir1/ dir2/
sending incremental file list
./
file1
file2
file3
file4
file5

sent 266 bytes received 110 bytes 752.00 bytes/sec
total size is 0 speedup is 0.00
[root@116v85v26v24 tmp]# ls /tmp/dir2/
dir1 file1 file2 file3 file4 file5

总结:

  1. 本地数据同步的时候,源目录后面的“/”会影响同步的结果
  2. rsync -av /dir1/ /dir3 //只同步目录下面的文件到指定的路径

  3. rsync -av /dir1 /dir2 //将当前目录dir1和目录下的所有文件一起同步

-R:不管加不加”/”,都会将源数据的绝对路径一起同步


远程同步

需求一: 本地(116.85.26.24)的/root/dir1文件同步到远端服务器(59.110.85.64)的/root/dir2中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@116v85v26v24 ~]# rsync -av /root/dir1 root@59.110.85.64:/root/dir/       //同步的命令
The authenticity of host '59.110.85.64 (59.110.85.64)' can't be establis
RSA key fingerprint is 24:36:34:69:1f:6e:b7:60:b0:2a:ae:90:46:aa:86:c5.
Are you sure you want to continue connecting (yes/no)? yes //key授权
Warning: Permanently added '59.110.85.64' (RSA) to the list of known hosts.
root@59.110.85.64's password: //远端用户密码
sending incremental file list
dir1/
dir1/file1
dir1/file2
dir1/file3
dir1/file4
dir1/file5

sent 279 bytes received 111 bytes 26.90 bytes/sec
total size is 0 speedup is 0.00
[root@116v85v26v24 ~]#

//远端:59.110.85.64
[root@59v110v85v64 dir]# pwd
/root/dir
[root@59v110v85v64 dir]# ls
dir1
[root@59v110v85v64 dir]#
//同步成功

本地同步到远端的另一种写法,利用ssh

本地(116.85.26.24)的/root/dir1文件同步到远端服务器(59.110.85.64)的/root/dir2中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@116v85v26v24 ~]# rsync -ave 'ssh -lroot' /root/dir 59.110.85.64:/root/ 
root@59.110.85.64's password:
sending incremental file list
dir/
dir/dir1/
dir/dir1/file1
dir/dir1/file2
dir/dir1/file3
dir/dir1/file4
dir/dir1/file5

sent 300 bytes received 115 bytes 26.77 bytes/sec
total size is 0 speedup is 0.00

主机59.110.85.64

[root@59v110v85v64 ~]# pwd
/root
[root@59v110v85v64 ~]# ls
anaconda-ks.cfg install.log software
dir install.log.syslog testdir
[root@59v110v85v64 ~]# cd dir
[root@59v110v85v64 dir]# ls
dir1
[root@59v110v85v64 dir]#
//同步成功

需求2:将远程数据/root/dir同步到本地/root中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@116v85v26v24 ~]# rsync -av root@59.110.85.64:/root/dir /root
root@59.110.85.64's password:
receiving incremental file list
dir/
dir/dir1/
dir/dir1/file1
dir/dir1/file2
dir/dir1/file3
dir/dir1/file4
dir/dir1/file5

sent 114 bytes received 305 bytes 25.39 bytes/sec
total size is 0 speedup is 0.00
[root@116v85v26v24 ~]# ls /root
anaconda-ks.cfg dir dir1
[root@116v85v26v24 ~]#
//同步成功!

&&
rsync不单单是复制文件,它的主要功能是进行文件同步!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
//主机:59.110.85.64 中testdir目录下有5个文件
[root@59v110v85v64 testdir]# pwd
/root/testdir
[root@59v110v85v64 testdir]# ls
file1 file2 file3 file4 file5
[root@59v110v85v64 testdir]#

//本地主机:116.85.26.24 中/root目录
[root@116v85v26v24 ~]# ls
anaconda-ks.cfg install.log install.log.syslog
//将远程testdir同步到本地
[root@116v85v26v24 ~]# rsync -avR root@59.110.85.64:testdir /root/
root@59.110.85.64's password:
receiving incremental file list
testdir/
testdir/file1
testdir/file2
testdir/file3
testdir/file4
testdir/file5

sent 110 bytes received 287 bytes 27.38 bytes/sec
total size is 0 speedup is 0.00
[root@116v85v26v24 ~]# ls
anaconda-ks.cfg install.log install.log.syslog testdir
[root@116v85v26v24 ~]# cd testdir/
[root@116v85v26v24 testdir]# ls
file1 file2 file3 file4 file5

//远端删除file1-file3
[root@59v110v85v64 testdir]# ls
file1 file2 file3 file4 file5
[root@59v110v85v64 testdir]# rm file{2..4}
rm: remove regular empty file `file2'? y
rm: remove regular empty file `file3'? y
rm: remove regular empty file `file4'? y
[root@59v110v85v64 testdir]# ls
file1 file5
//本地同步
[root@116v85v26v24 testdir]# rsync -avR --delete root@59.110.85.64:testdir /root/
root@59.110.85.64's password:
receiving incremental file list
deleting testdir/file4
deleting testdir/file3
deleting testdir/file2
testdir/

sent 15 bytes received 75 bytes 3.16 bytes/sec
total size is 0 speedup is 0.00
[root@116v85v26v24 testdir]# ls
file1 file5
[root@review1 testdir]#
//加上--delete参数,源文件删除,本地也删除

总结:

​ rsync是一个同步命令(服务),它不仅可以用来复制、备份,最大的作用在于同步,即保持两端一直,所以远端文件被删除后,同步后,本地文件也可以删除,要注意rsync的灵活用法。


&&2

rsync同步参数-R是会同步绝对路径的。

总结:

​ rsync -R会同步绝对路径,没有则自动创建,所以在写命令时一定要注意。

rsync做为服务运行

rsync作为服务是托管给xinetd服务管理的,有以下特点:①进程在后台运行,不受终端影响(关终端不会关闭服务,除非杀死相关进程)②可以用相关参数实现一些功能,比如:日志记录,访问控制,验证登录等

无密码同步

修改配置文件 /etc/rsyncd.conf

1