rsync简明教程

简介

一个跨平台的资料备份与同步工具

原理

在进行同步之前,会先比较分析两端的数据,找出数据发生改变过多文件,再将这些文件传输到目的端,完成备份工作

优点

1、可以进行增量备份,即使备份中断,下次备份会从从上次中断的位置继续
2、可以利用ssh进行数据加密传输
3、开源、跨平台

缺点

1、遇到文件数或目录层数多的时候,效率较差。文件数到达一定数量时,rsync可能无法执行
2、操作时务必小心,否则容易覆盖或误删除数据

运行模式

1、在本机上运行,用法与cp几乎一模一样:

1
rsync -av /etc /tmp(将/etc目录备份到/tmp/etc目录里)

2、通过ssh通道在传输数据:

1
2
rsync -av -e ssh [email protected]:/etc /tmp(将192.168.1.1上的/etc目录备份到本机的/tmp目录)
rsync -av -e ssh [email protected]:/etc/ /tmp(将192.168.1.1上的/etc目录下的文件备份到本机的/tmp目录)

3、使用daemon的方式对数据进行备份传输

此时rsync服务端需启用873端口

环境:

1
2
server: 192.168.1.101
client: 192.168.1.104

说明:

将server上的/var/log里的文件同步到client的/tmp/log目录

服务端配置:

首先创建一个配置文件/etc/rsyncd.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@kof ~]# vim /etc/rsyncd.conf
uid = root #设置执行rsync的本地用户
gid = root #设置执行rsync的本地组
#use chroot = yes #是否chroot
max connections = 4 #最大同时连接数
pid file = /var/run/rsyncd.pid #指定rsync服务进程的pid file
lock file = /var/run/rsync.lock #指定rsync服务端锁定文件log file = /var/log/rsyncd.log #指定rsync的log输出路径
[downloads] #模块设定,可设置多个模块
path = /var/log #同步文件的真实路径
ignore errors
read only = true #是否只读
list = true
hosts allow = 192.168.1.0/24 #允许同步到ip/网段
hosts deny = 0.0.0.0/32
auth users = backup #身份验证用户。这不是系统用户,而是rsync服务自定的
secrets file = /etc/rsyncd.pwd #downloads模块的密码文件

创建密码文件/etc/rsyncd.pwd

1
2
3
4
5
[root@kof ~]# vim /etc/rsyncd.pwd
backup:jjj #用户backup,密码jjj
[root@kof ~]# chmod 600 /etc/rsyncd.pwd #出于安全考虑,文件只有属组可读写
[root@kof ~]# rsync --daemon #以守护进程模式启动rsync服务,“--config=”参数可以指定配置文件,默认是/etc/rsyncd.pwd
[root@kof ~]# netstat -tunlp |grep 873 #检查是否正常启动

客户端配置:

1
2
3
[root@client ~]# vim /etc/rsync.pwd     #创建密码文件
jjj
[root@client ~]# chmod 600 /etc/rsync.pwd #修改密码文件权限

开始同步:

1
2
3
4
5
[root@client ~]# rsync -avzP --password-file=/etc/rsync.pwd [email protected]::downloads/* /tmp/log
avzP #z是压缩 P是显示传输进度
--password-file #指定密码文件,如不指定,会在shell中提示手工输入
[email protected]::downloads/* #源文件,downloads是模块名
/tmp/log #目标文件

也可从客户端同步到服务端,服务端配置文件的read only必须改为false。

下面是rsync的部分语法说明:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@linux ~]# rsync [-avrlptgoD] [-e ssh] [user@host:/dir] [/local/path]
参数:
-v :观察模式,可以列出更多的信息;
-q :与 -v 相反,安静模式,输出的信息比较少;
-r :递归复制!可以针对『目录』来处理!很重要!
-u :仅更新 (update),不会覆盖目标的新档案;
-l :复制连结文件的属性,而非连结的目标源文件内容;
-p :复制时,连同属性 (permission) 也保存不变!
-g :保存源文件的拥有群组;
-o :保存源文件的拥有人;
-D :保存源文件的装置属性 (device)
-t :保存源文件的时间参数;
-I :忽略更新时间 (mtime) 的属性,档案比对上会比较快速;
-z :加上压缩的参数!
-e :使用的信道协议,例如使用 ssh 通道,则 -e ssh
-a :相当于 -rlptgoD ,所以这个 -a 是最常用的参数了!