天天看点

rsync工具使用详解

 rsync是linux/unix系统下的文件同步和数据传输工具,它采用“rsync算法”实现主机之间文件的同步。

rsync的主要特点:

1,rsync可以再中断传输之后恢复传输

2,rsync只传输源文件和目标文件之间不一致的部分

3,rsync可以执行完整或增量备份

4,可以使用基于ssh等方式传输文件

5,可以保持原有文件的所有属性信息

rsync的命令格式:

rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST

rsync [OPTION]... [USER@]HOST:SRC DEST 

rsync [OPTION]... SRC [SRC]... DEST

rsync [OPTION]... [USER@]HOST::SRC [DEST]

rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST

rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DES

常用选项:

-v, --verbose 详细模式输出

-q, --quiet 精简输出模式

-z,在传输时对备份文件进行压缩处理

-c, --checksum 打开校验开关,强制对文件传输进行校验

-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD

-r, --recursive 对子目录以递归模式处理

-R, --relative 使用相对路径信息

-l, --links 保留软链结

-H, --hard-links 保留硬链结

-p, --perms 保持文件权限

-o, --owner 保持文件属主信息

-g, --group 保持文件属组信息

-D, --devices 保持设备文件信息

-t, --times 保持文件时间信息

-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。

--backup-dir 将备份文件(如~filename)存放在在目录下。

-suffix=SUFFIX 定义备份文件前缀

-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)

--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息

--password-file=FILE 从FILE中得到密码

--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件

--port=PORT 指定其他的rsync服务端口

--progress 在传输时显示传输过程

--delete 删除那些DST中SRC没有的文件,即保证客户端和服务器目录内容的完全一致

--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件

--exclude 指定不需要传输的文件类型

rsync的四种工作模式:

一,本地shell应用模式

主要用于复制本地指定文件到本地另一个目录中

例1:复制指定的文件,到一个目录中

# rsync -av *.sh /tmp/

例2:复制整个目录及其中的文件到一个目录中

# rsync -av haha test/ 

例3:复制目录中的整个文件到另一个目录中(只有文件,没有haha目录)

# rsync -av haha/ test

注:目标参数末尾的斜杠没有任何作用

二,远程shell模式

主要用于把指定的本地目录复制到另一个系统中或是将一个系统中的文件复制到本地

例1:把本地目录复制到远程主机的/root/test目录中

# rsync -av haha [email protected]:/root

# rsync -av haha 172.16.30.5:test(如果使用的root用户的话,会自动在/root中创建一个test目录,并把haha目录及其目录中的内容复制其中)

例2:把远程主机上的目录复制到本地目录/中

# rsync -av [email protected]:/root/haha /

三,rsync列表模式

主要用于显示本地或是远程系统中的目录列表,并且递归显示

例1:显示本地系统的目录列表

# rsync -a haha/

drwxr-xr-x        4096 2012/06/24 14:27:31 .

drwxr-xr-x        4096 2012/06/24 14:28:20 lee

-rw-r--r--           0 2012/06/24 14:28:20 lee/lishengjia

例2:显示远程系统的目录列表

# rsync -a [email protected]:test(显示/root/test目录列表)

[email protected]'s password: 

drwxr-xr-x        4096 2012/05/09 03:23:32 test

drwxr-xr-x        4096 2012/06/24 14:27:31 test/haha

-rw-r--r--           0 2012/06/24 14:25:05 test/haha/haha.txt

drwxr-xr-x        4096 2012/06/24 14:28:20 test/haha/lee

-rw-r--r--           0 2012/06/24 14:28:20 test/haha/lee/lishengjia

四,服务器模式

此模式基于C/S模式,在rsync服务器端运行一个守护进程,用于接受文件传输请求,而rsync客户端可以把文件发送给守护进程,也可以向守护进程请求文件。主要用于远程文件同步和数据备份。

案例:170.16.30.4作为web服务器,它的访问日志每天都要定时备份到172.16.30.5这台专门存放服务器访问 日志的主机上。

我们可以通过,把172.16.30.4作为rsync服务器端,172.16.30.5作为rsync客户端,然后通过crontab定时备份日志即可。

配置如下;

172.16.30.4上的配置:

1,安装rsync软件包

# yum -y install rsync

2,手动创建rsync的配额文件

# vim /etc/rsyncd.conf

#uid,gid指定以哪个用户身份运行rsync传输文件的守护进程

uid = nobody 

gid = nobody

#如果指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下,这样做的原因是实现额外的安全防护,但是缺点是需要root权限,并且不能备份指向外部的符号连接所指向的目录文件。一般使用no即可

use chroot = no

#指定并发连接服务器的个数

max connections = 10

#是否检查口令文件的权限,如果为yes,则密码文件必须为root所有

strict modes = yes

#以下指定pid,锁,日志文件的路径

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

#定义一个模块,可以有多个,web是对应模块的名称

[web]

# 指定要备份的文件或者目录

path = /var/log/httpd

#描述信息

comment = web server log  

#忽略无关的I/O错误

ignore errors

#设为no表示,客户端可以往服务器上上传文件;yes的话,不能上传

read only = no

#设为no表示客户端可下载文件;设为yes表示不能下载文件

write only = no

#设置允许连接rsync服务器的主机,*表示所有,也可以是网段

hosts allow = *

#设置禁止连接rsync服务器的主机

hosts deny = 172.16.30.1

#用于设定档客户请求可以使用的模块列表时,该模块是否被列出。true列出,false隐藏

list = false

#该选项指定当该模块传输文件时守护进程应该具有的uid和gid,默认值为全局定义的"nobody"

uid = root

gid = root

#定义可以连接该模块的用户名,和系统用户无关,多个用户名用空格或者,好隔开

auth users = jia

#指定一个“用户名:密码”格式的文件,用户名就是auth users指定的,密码要和客户端的密码文件对用起来

secrets file = /etc/server.pass

创建账户文件:

# vim /etc/server.pass

jia:leejia(第一个为用户名,第二个为对应的密码)

改变文件的权限:

# chmod 600 /etc/server.pass

3,开启rsync守护进程

# /usr/bin/rsync --daemon

查看:

# ps -ef |grep rsync

root     14879     1  0 00:14 ?        00:00:00 /usr/bin/rsync --daemon

root     14881 12749  0 00:14 pts/0    00:00:00 grep rsync 

172.16.30.5上的配置:

安装rsync软件包

创建一个密码文件,这用用rsync命令同步的时候,可以指定这个密码文件,不用手动输入密码:

leejia

更改权限:

测试文件是否能同步:

# /usr/bin/rsync -vzrtopg --delete --progress [email protected]::web /tmp --password-file=/etc/server.pass

注:/tmp是客户端存放备份文件的目录

4,在172.16.30.5上建立计划任务,定时备份日志

# crontab -e

添加如下内容,在每天的3点40分进行备份

40 3 * * * /usr/bin/rsync -vzrtopg --delete --progress [email protected]::web /tmp --password-file=/etc/server.pass

本文转自 leejia1989 51CTO博客,原文链接:http://blog.51cto.com/leejia/924121,如需转载请自行联系原作者