Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2412962
  • 博文数量: 298
  • 博客积分: 7876
  • 博客等级: 准将
  • 技术积分: 5500
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-23 13:39
文章存档

2013年(2)

2012年(142)

2011年(154)

分类: LINUX

2012-04-23 12:11:29

Linuxrsync命令用法

 

整理自:

整理自:http://chenzhuo.blog.51cto.com/150592/269530

 

目录概述:

rsync工具简介

1. rsync用法

2. rsync 参数说明

3. rsync的配置

3.1 2台主机建立ssh信任

3.2 服务器端和客户端使用

4. rsync的简单使用

 

rsync工具简介

    rysnc是一个数据镜像及备份工具,具有可使本地和远程两台主机的文件,目录之间,快速同步镜像,远程数据备份等功能。在同步过程中,rsync是根据自己独特的算法,只同步有变化的文件,甚至在一个文件里只同步有变化的部分,所以可以实现快速的同步数据的功能。

  

1. rsync用法

Usage: rsync [OPTION]... SRC [SRC]... DEST

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

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

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

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

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

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

The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect

to an rsync daemon, and require SRC or DEST to start with a module name.

 

2. rsync 参数说明
-h , --help
显示rsync求助资讯
--version
顯示rsync版本
-v , --verbose
复杂的输出信息
-q , --quiet
安静模式,几乎没有讯息产生, 常用在以cron执行rsync
-I, --ignore-times
通常rsync为了加快速度会忽略同样档案大小且同样,同样存取时间点的档案
可以通过此参数开关此快速检查.
--size-only rsync  
只检查档案大小是否改变,不管时间存取点是否改变
通常用在mirror, 且对方时间不太正确时
-c, --checksum
在传送之前透过128bitmd4检查码来检查所有要传送的档案(会托满速度);
-a, --archive archive mode
权限保存模式,相当于 -rlptgoD 参数.
很快速的保存几乎所有的权限设定,除了硬式连接(透过-H设定).
-r, --recursive
复制所有下面的资料(透过)
-R, --relative
使用相对路径
: rsync foo/bar/foo.c remote:/tmp/ 在远端产生/tmp/foo.c档案
rsync -R foo/bar/foo.c remote:/tmp/
在远端产生/tmp/foo/bar/foo.c 档案
-R, --relative
不使用相对路径
-b, --backup
目的地端先前已经存在的档案在传输或删除前会被备份
--backup-dir=DIR
设定备份的资料夹
--suffix=SUFFIX
指定备份的档案名称字尾形式(预设为~)
-K, --keep-dirlinks
接收方将连接到资料夹的档案视为资料夹处理
-l, --links
复制所有的连接
-H, --hard-links
保留硬式连结
-p, --perms
保留档案权限
-o, --owner
保留档案所有者(root only)
-g, --group
保留档案群组
-D, --devices
保留device资讯(root only)
-t, --times
保留时间点
-n, --dry-run
不实际执行传送, 只显示将会有的传输动作
-S, --sparse
尝试去处理稀疏的档案, 让这些档案在目的端占去较少的磁碟空间
-W, --whole-file
复制所有的档案, 不额外作检查
--no-whole-file
关闭 --whole-file 参数
-x, --one-file-system
不要跨越档案系统分界(只在一个档案系统处理)
-B, --block-size=SIZE
强制透过rsync程式去比对修复block-sizeforce
-e --rsh=COMMAND
定义所试用的remote shell
--rsync-path=PATH
定义rsync在远端机器存放资料的路径
--existing
只对比更新目的端已经存在的档案
--ignore-existing
忽略目的断已经存在的档案(也就是不更新)
--delete
删除传送断已经不存在,而目的端存在的档案
--delete-excluded
除了把传送端已经不存在, 而目的端存在的档案删除之外, 也删除 --exclude 参数所包含的档案
--delete-after rsync
预设会在档案传送前进行相关删除动作确保接收端有足够的档案空间,
单可以透过 --delete-after 让删除动作在档案传送后在进行删除
--ignore-errors
忽略任何错误即使是I/O error 也进行 --delete 删除动作
--max-delete=NUM
定义rsync不要删除超过NUM个档案
--partial rsync
若遇到传输过程中断时, 会把那些已经传输的档案删除.
在某种状况下保留那些部分传送的档案是令人高兴的;
你可以透过 --partial 参数达到这个目的.
--partial-dir=DIR
--partial 参数启动时, 你还是可以定义rsync把那些部分传送的档案
写入定义的资料夹, 而非直接写入目的端,需要注意的是,
此资料夹不应该被其他试用者可以写入.(:/tmp)
--force
当目的端资料夹被传送端非资料夹名称覆盖时, 强制rsync删除资料夹, 即使该资料夹不是空的.
--numeric-ids
不将传送端档案的uidgid, 与目的端的使用者/群组进行配对,
若传送端并没有uidgid的对应名称(:原帐号群组被删除的遗留档案),
或目的端没有相对应的帐号/群组, 保留数字型式的uid/gid
--timeout=TIMEOUT
设定I/O 超时的时间(). 超过这个秒数而没有资料传送, rsync将会结束. 预设为0,也就是没有定义超时时间
-T, --temp-dir=DIR
定义rsync在接收端产生暂时性的复制档案时使用资料夹暂存, 预设时直接在接收端资料夹直接产生暂存档案
--compare-dest=DIR
定义rsync在目的端建立资料夹来比对传送过来的档案.
--link-dest=DIR
--compare-dest 相同,但同时会针对无法改变的档案建立硬式连结.
-z, --compress
压缩模式, 当资料在传送到目的端进行档案压缩.
-P -P
参数和 --partial --progress 相同.只是为了把参数简单化.
-C, --cvs-exclude
排除那些通常不希望传送的档案, 定义的方式与CVS传送相同:
RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS .make.state
.nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak *.BAK *.orig *.rej
.del-* *.a *.olb *.o *.obj *.so *.exe *.Z *.elc *.ln core .svn/
符合以上条件的都会被忽略不传送.
--exclude=PATTER
符合PATTERN(规则表示式)样式的档案不仅行传送
--exclude-from=FILE
--exclude 参数相同, 不过是把不进行传送的档案事先写入某一档案.
执行时, 透过此参数让rsync读取.
(; #
开头的行列或者空白会被rsync忽略)
--include=PATTERN
定义rsync不要排除符合pattern样式的档案
--include-from=FILE
--include参数相同,只不过把要包含的档案写到某一档案.
--files-from=FILE
把要传送的档案名称都精确的写入某一档案, rsync读取.
: rsync -a --files-from=/tmp/foo /usr remote:/backup
-0 --from0
定义档案所要读取的档案时null字元结尾.
--version
现四版本信息.
--daemon
定义rsyncdaemon型态执行
--no-detach
当以daemon形态执行时,不要进行分裂且变成背景程序.
--address=ADDRESS
定义所要连接(bind)ip位置或者是host名称(daemon限定)
--config=FILE
定义所要读取的设定档rsyncd.conf位置(daemon限定)
预设值为 /usr/local/etc/rsyncd.conf
--port=PORT
定义rsyncd(daemon)要旨行的port(预设为tcp 873)
--blocking-io
使用blocking I/O连结远端的shell, rsh, remsh
--no-blocking-io
使用non-blocking连结远端的shell, ssh(预设值)
--stats
显示档案传送时的资讯状态
--progress
显示传送的进度.(给档案传送时,怕无聊的人用的..)
--log-format=FORMAT
定义log的格式(rsyncd.conf设定)
--password-file=FILE
从档案读取与远端rsync伺服务连结的密码
--bwlimit=KBPS
定义传输频宽的大小(KBytes/)
--write-batch=FILE
把记录资料写入一个档案(给其他相同环境且相同需求的机器试用)
--read-batch=FILE
透过读取记录档案来进行传输.(档案由 --write-batch 参数产生)
--checksum-seed=NUM
定义档案 checksum-seed 的大小(byte)
-4 --ipv4
使用IPv4协定
-6 --ipv6
使用IPv6协定

 

3. rsync的配置

3.1 2台主机建立ssh信任

A机器 192.168.1.1
B
机器 192.168.1.2

 

[root@mailsvr ~]# ssh-keygen -t rsa      创建证书
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
65:4a:68:cc:6c:23:2b:04:1a:3c:ee:d7:af:e7:e3:8d

 

[root@mailsvr ~]#
然后把公匙传到B机的/root/.ssh中:
[root@mailsvr .ssh]# scp /root/.ssh/id_rsa.pub  

password:
id_rsa.pub                            100%  219     0.2KB/s   00:00
[root@mailsvr .ssh]#

 

验证一下,ssh登陆到B机,是否不需要输入密码,如果不用则建立成功

 

[root@mailsvr .ssh]# ssh 192.168.1.2
Last login: Fri Jun  6 09:59:28 2008 from 192.168.1.1
[root@mailsvr ~]#

 

3.2 服务器端和客户端使用

两台机器都需要安装软件包,这里不罗嗦了。 

服务器端配置:

 

rysnc一般是通过xinetd进行启动管理的。
 

修改/etc/xinetd.d/rsync,只修改一个地方
# default: off
# description: The rsync server is a good addition to am ftp server, as it \
#       allows crc checksumming etc.
service rsync
{
        disable = yes 
修改为disable = no
        socket_type     = stream
        wait            = no
        user            = root
        server          = /usr/bin/rsync
        server_args     = --daemon
        log_on_failure  += USERID

 

接下来编辑配置文件

 

[root@mailsvr ~] # cat /etc/rsyncd.conf  该文件需要新创建
uid = root           #root
用户访问
gid = root           #root
组用户访问
use chroot = no      #
不能使用chroot
max connections = 9  #
最大连接数
list = yes           #
允许列出文件清单
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

 

hosts allow  = 192.168.1.2      #只允许这个主机访问

 

[data]                     #发布项
path = /home/data/         #
发布的路径
ignore errors
read only = yes            #
只读
auth users = root                #
认证用户为root
secrets file = /etc/sery.pass    #
密码文件

 

------------------------------------------------------------------------------

 

下面是密码文件

 

[root@mailsvr ~] # cat /etc/sery.pass
root:123456

 

注意权限为600

 

服务器端配置完成,客户端只需要安装rsync包即可

 

接下来创建密码文件

 

[root@mailsvr ~] # cat /etc/sery.pass
123456        #
这里只需要输入服务器端密码文件中定义的密码即可。

 

注意权限为600 

 

使用命令开始同步

 

[root@mailsvr ~] #  rsync -aSvH --password-file=/etc/sery.pass  /home/

 

解释:

--password-file=/etc/sery.pass  这段是密码文件,如果不加这段,需要手动输入服务器端定义好的密码。

  

     这里的:data是服务器端的发布项。

 

如果文件比较大,可以使用nohup将进城放在后台执行,

 

[root@mailsvr ~] #  nohup rsync -aSvH --password-file=/etc/sery.pass  /home/ >rsync.log &  

 

上面的表示将远程机器192.168.1.2机器上发布的data目录,同步到本地机器的/home/目录下。 

 

4. rsync的简单使用

[root@mailsvr ~]# rsync -aSvH /home/  

 

提示输入192.168.1.2机器的root用户密码,输入即可开始同步。

 

参数解释:

 

a 等同于 -rlptgoD 归档模式,就是保持文件所有属性、权限不变
S
有效的处理零散文件
v verbose
模式
H
保持hard links

 

上面这个表示 将本机的/home/目录下所有的文件,同步到192.168.1.2机器的/home/目录下。。上面红色标记是源文件位置 蓝色标记是目的位置

 

如果想每次同步之后,两边的文件保持一致,需要添加参数--delete,添加这个参数时,一定要注意测试,否则会造成严重后果,删除了数据。

 

[root@mailsvr ~]# rsync -aSvH --delete /home/ 

 

[root@mailsvr ~]# rsync -aSvH  /home/

 

上面这条表示,将远程机器192.168.1.2机器上的/home/目录下所有的文件,同步到本地的/home/目录下,同步的时候注意源和目的,前面的是源文件位置,后面的目的文件位置

 

上面的命令,执行的时候,需要输入192.168.1.2机器的root用户密码,这样很烦,可以两台机器做个ssh信任,省去每次输入密码,在添加crontab自动执行。自动同步数据。

 

阅读(2328) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~