linux下配置rsync服务器和实时同步
时间:2009-03-23 来源:sjhf
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml">
安装:rpm –ivh rsync-XXXXXX.RPM 也可以用YUM
启动rsync必须要装xinetd,它是靠它启动的,端口是873
设定: /etc/xinetd.d/rsync: 即#vi /etc/xinetd.d/rsync #default: off #de.ion:The rsync server is a good addition to am ftp server,as it # allows crc checksumming etc. service rsync { disable = no 把它改为no socket_type = stream wait = no user = root server = /usr/bin/rsync server_args = --daemon log_on_failure += USERID } 配置文件解释: uid=nobody gid=nobody 运行rsync用户和组 max connections=4 最大连接数 use chroot=no log file=/var/log/rsyncd.log pid file=/var/run/rsyncd.pid lock file=/var/run/rsyncd.lock #auth users=root secrets file=/etc/rsyncd.secrets 必须要定义这个文件,里面定义第一个模块的用户名和密码,格式:test:password,权限必须是600 [test] 模块名 path=/test 这个目录必须nobody可读写 模块所定义的路径 comment = test 备注 ignore errors read .ly = yes 如果出现模块只能读的错误,就把这里改成NO list = no auth users = test 定义同步用户 secrets file = /etc/swd/www.pass 定义用户和密码,权限必须是600 我的同步脚本:
#!/bin/bash #set -x rsync -uqpzrt --delete --password-file=/etc/swd/rsync.secrets [email protected]::test /test #在客户端用rsync同步的话,首先要在服务端定义此模块的用户名和密码,然后在客户端定义此文件,此文件只要定义密码就行,必须和服务端的密码一致。 if [ $? -eq 0 ];then echo "$(date +"%Y-%m-%d %H:%M:%S") picture rsync success" >> /var/log/rsync.log else echo "$(date +"%Y-%m-%d %H:%M:%S") picture rsync error" >> /var/log/rsync.log fi chown -R daemon:daemon /test 用rsync同步其实跟scp差不多,可以从服务端复制到客户端,也可以从客户端复制到服务端 运行参数解释: -u 更新数据 -h , --help 显示rsync求助资讯 --version 顯示rsync版本 -v , --verbose 复杂的输出信息 -q , --quiet 安静模式,几乎没有讯息产生, 常用在以cron执行rsync -I, --ignore-times 通常rsync为了加快速度会忽略同样档案大小且同样,同样存取时间点的档案 可以通过此参数开关此快速检查. --size-only rsync 只检查档案大小是否改变,不管时间存取点是否改变 通常用在mirror, 且对方时间不太正确时 -c, --checksum 在传送之前透过128bit的md4检查码来检查所有要传送的档案(会托满速度); -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 .ly) -g, --group 保留档案群组 -D, --devices 保留device资讯(root .ly) -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 不将传送端档案的uid及gid值, 与目的端的使用者/群组进行配对, 若传送端并没有uid及gid的对应名称(如:原帐号群组被删除的遗留档案), 或目的端没有相对应的帐号/群组, 保留数字型式的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 定义rsync以daemon型态执行 --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协定 --password-file=/etc/swd/rsync.secrets 指定同步用户的用户名密码,这个文件的权限必须要是600 [email protected]::images 用户名@rsync服务器::模块名 FAQ Q:出现如此错误:rsync: failed to set times . "/." (in test): Operation not permitted (1) rsync: failed to set times . "/." (in test): Operation not permitted (1) rsync error: some files could not be transferred (code 23) at main.c(892) [sender=2.6.8] A:那是因为rsync服务端的要 同步的目录的权限设置不对,应该要设置你启动rsync用户的权限 实时同步 引用: Inotify 是文件系统事件监控机制,计划包含在即将发布的 Linux 内核中作为 dnotify 的有效替代。dnotify 是较早内核支持的文件监控机制。Inotify一种强大的、细粒度的、异步的机制,它满足各种各样的文件监控需要,不仅限于安全和性能。下面让我们一起学 习如何安装 inotify 和如何构建一个示例用户空间应用程序来响应文件系统事件。 |
相关阅读 更多 +
排行榜 更多 +