Rsync数据同步工具应用指南
描述
Rsync是一种快速而非常通用的文件复制工具。它可以通过任何远程shell或远程rsync从本地复制到另一台主机
守护进程它提供了大量的选项来控制其行为的各个方面,并允许非常灵活地规定文件集
复制。它的delta传递算法是着名的,它减少了通过网络发送的数据量,只发送它们之间的差异
源文件和目标中的现有文件。 Rsync广泛用于备份和镜像以及日常使用的改进的复制命令。
Rsync使用“快速检查”算法(默认情况下)查找需要传输的文件,该算法可以查找大小更改或最后修改的文件
时间。当快速检查指示时,其他保留属性的任何更改(由选项请求)在目标文件上进行
该文件的数据不需要更新。
名称
rsync - 快速,通用,远程(和本地)文件复制工具
概要
本地:rsync [OPTION ...] SRC ... [DEST]
通过远程shell访问:
拉:rsync [OPTION ...] [USER @]主机:SRC ... [DEST]
推:rsync [OPTION ...] SRC ... [USER @]主机:DEST
通过rsync守护进程访问:
拉:rsync [OPTION ...] [USER @] HOST :: SRC ... [DEST]
rsync [OPTION ...] rsync:// [USER @] HOST [:PORT] / SRC ... [DEST]
推:rsync [OPTION ...] SRC ... [USER @] HOST :: DEST
rsync [OPTION ...] SRC ... rsync:// [USER @] HOST [:PORT] / DEST
仅使用一个SRC参数和DEST参数的用法将列出源文件而不是复制。
一般
Rsync将文件复制到远程主机或从远程主机复制文件,也可以在当前主机上复制文件(不支持在两台远程主机之间复制文件)。
rsync有两种不同的方式与远程系统联系:使用远程shell程序作为传输(如ssh或rsh)或联系rsync
守护进程直接通过TCP。只要源或目标路径在主机规范之后包含单个冒号(:)分隔符,则使用远程shell传输。
通知。当源或目标路径包含一个双冒号(:)分隔符后,直接发生rsync守护进程,
或者指定了rsync:// URL时(也参见“通过遥控器连接使用RSYNC-DAEMON功能”部分)。
规则)。
作为一种特殊情况,如果在没有目的地的情况下指定了单个源arg,则以与“ls -l”类似的输出格式列出文件。
如预期的那样,如果源路径或目标路径都不指定远程主机,则该副本在本地发生(另请参阅--list-only选项)。
Rsync将本地侧称为“客户端”,将远程端称为“服务器”。不要将“服务器”与rsync守护程序混淆 - 守护程序始终为a
服务器,但服务器可以是守护进程或远程shell生成的进程。
建立
有关安装说明,请参阅README文件。
一旦安装,您可以将rsync用于可以通过远程shell访问的任何计算机(以及可以使用rsync守护程序模式进行访问的某些机器)
tocol)。对于远程传输,现代rsync使用ssh进行通信,但默认情况下可能已配置为使用其他远程shell,
如rsh或remsh。
您还可以通过使用-e命令行选项或通过设置RSYNC_RSH环境变量来指定任何您喜欢的远程shell。
请注意,rsync必须安装在源计算机和目标计算机上。
用法
您使用rsync的方法与使用rcp相同。您必须指定源和目的地,其中一个可能是远程的。
解释语法的最好方法也许是一些例子:
rsync -t * .c foo:src /
这将将匹配模式* .c的所有文件从当前目录传输到机器foo上的目录src。如果任何文件已经存在
在远程系统上,rsync远程更新协议用于通过仅发送差异来更新文件。有关详细信息,请参阅技术报告。
rsync -avz foo:src / bar / data / tmp
这将递归地将所有文件从机器foo上的目录src / bar传输到本地机器上的/ data / tmp / bar目录中。文件是
转移到“归档”模式,这确保了传输中的符号链接,设备,属性,权限,所有权等。 Addi-
这些压缩将用于减少传输数据部分的大小。
rsync -avz foo:src / bar / / data / tmp
源上的尾部斜线会更改此行为,以避免在目标位置创建额外的目录级别。你可以想到一个尾随/一个
源代码意思是“复制该目录的内容”,而不是“按目录复制目录”,但是在这两种情况下,
tory被传输到目的地的包含目录。换句话说,以下每个命令以相同的方式复制文件,
包括他们设置/ dest / foo的属性:
rsync -av / src / foo / dest
rsync -av / src / foo / / dest / foo
还要注意,主机和模块引用不需要尾部斜杠来复制默认目录的内容。例如,这两个都复制了
远程目录的内容为“/ dest”:
rsync -av主机:/ dest
rsync -av host :: module / dest
您也可以在本地模式下使用rsync,源和目标在名称中都没有“:”。在这种情况下,它的行为就像一个改进的副本
命令。
最后,您可以通过省略模块名称来列出特定rsync守护程序中可用的所有(可列出)模块:
rsync somehost.mydomain.com ::
有关详细信息,请参阅以下部分。
高级用途
从远程主机请求多个文件的语法是通过指定与第一个相同样式的其他远程主机参数来实现的,或者使用
主机名省略。例如,所有这些工作:
rsync -av主机:file1:file2 host:file {3,4} / dest /
rsync -av host :: modname / file {1,2} host :: modname / file3 / dest /
rsync -av host :: modname / file1 :: modname / file {3,4}
旧版本的rsync需要在SRC中使用引用的空格,就像这些例子一样:
rsync -av主机:'dir1 / file1 dir2 / file2'/ dest
rsync host ::'modname / dir1 / file1 modname / dir2 / file2'/ dest
这个分词在最新的rsync中仍然有效(默认情况下),但并不像第一种方法那么容易使用。
如果需要传输一个包含空格的文件名,可以指定--protect-args(-s)选项,或者你需要转义空格
以远程shell将会理解的方式。例如:
rsync -av主机:'file \ name \ with \ spaces'/ dest
连接到RSYNC DAEMON
也可以使用没有远程shell的rsync作为传输。在这种情况下,您将直接连接到通常使用的远程rsync守护程序
TCP端口873.(这显然需要守护进程在远程系统上运行,因此请参考“启动RSYNC DAEMON以接受连接”部分
以下信息。)
以这种方式使用rsync与使用远程shell相同,除了:
o您使用双冒号::而不是单个冒号将主机名与路径分开,或者使用rsync:// URL。
o“路径”的第一个字实际上是一个模块名称。
o远程守护程序可能打印您连接的当天的消息。
o如果在远程守护程序上没有指定路径名,则将显示守护程序上的可访问路径列表。
o如果您不指定本地目标,则提供远程守护程序上指定文件的列表。
o您不能指定--rsh(-e)选项。
复制名为“src”的远程模块中的所有文件的示例:
rsync -av host :: src / dest
远程守护程序上的某些模块可能需要验证。如果是这样,您将在连接时收到密码提示。您可以避免密码提示
通过将环境变量RSYNC_PASSWORD设置为要使用的密码或使用--password-file选项。脚本编写时可能会有用
rsync。
警告:在某些系统上,所有用户都可以看到环境变量。建议使用--password-file的系统。
您可以通过将环境变量RSYNC_PROXY设置为指向您的Web代理的主机名:port对来通过Web代理建立连接。注意
您的Web代理的配置必须支持到端口873的代理连接。
您还可以通过将环境变量RSYNC_CONNECT_PROG设置为要运行的命令,使用程序作为代理建立守护程序连接
代替直接插座连接。字符串可能包含转义“%H”来表示rsync命令中指定的主机名(因此使用“%%”
如果您的字符串中需要单个“%”)。例如:
导出RSYNC_CONNECT_PROG ='ssh proxyhost nc%H 873'
rsync -av targethost1 :: module / src // dest /
rsync -av rsync :: // targethost2 / module / src // dest /
上面指定的命令使用ssh在proxyhost上运行nc(netcat),该主机将所有数据转发到目标主机(%H)上的端口873(rsync守护程序)。
使用RSYNC-DAEMON功能,通过远程外壳连接
使用rsync守护程序(例如命名模块)的各种功能,实际上不允许任何新的套接字连接到系统中是有用的
(除了允许远程shell访问所需的以外)。 Rsync支持使用远程shell连接到主机,然后产生一次性使用
“守护进程”服务器,希望在远程用户的主目录中读取其配置文件。如果要加密守护进程式传输,这可能很有用
数据,但是由于守护进程由远程用户启动,您可能无法使用chroot等功能或更改守护程序使用的uid。
(对于加密守护进程传输的另一种方式,请考虑使用ssh将本地端口隧道传送到远程计算机,然后在其上配置正常的rsync守护程序
远程主机只允许从“localhost”连接。)
从用户的角度来看,通过远程shell连接传输的守护进程使用与普通rsync-daemon传输几乎相同的命令行语法,
唯一的例外是您必须使用--rsh = COMMAND选项在命令行上显式设置远程shell程序。 (设置RSYNC_RSH
环境将不会启用此功能。)例如:
rsync -av --rsh = ssh host :: module / dest
如果您需要指定一个不同的远程shell用户,请记住主机前面的用户@前缀是指定rsync-user值(对于mod-
这需要基于用户的身份验证)。这意味着您必须在指定remote-shell时给“s”用户指定“-l user”选项,如本示例所示
它使用简短版本的--rsh选项:
rsync -av -e“ssh -l ssh-user”rsync-user @ host :: module / dest
“ssh-user”将在ssh级使用; “rsync-user”将用于登录到“模块”。
启动RSYNC DAEMON接受连接
为了连接到rsync守护程序,远程系统需要有一个守护进程已经运行(或者需要配置像inetd那样的
为特定端口上的传入连接生成rsync守护进程)。有关如何启动将处理传入套接字的守护进程的完整信息
节,请参阅rsyncd.conf(5)手册页 - 即守护程序的配置文件,它包含有关如何运行守护程序的完整详细信息(包括
独立和inetd配置)。
如果您正在使用其中一个远程shell传输进行传输,则不需要手动启动rsync守护程序。
有条件转让订单
Rsync始终将指定的文件名排序到其内部传输列表中。这将处理相同命名的directo-
ries,可以轻松地删除重复的文件名,并且可能会使文件按照与在
命令行。
如果您需要将特定文件转移到另一个文件之前,请将文件分离为不同的rsync调用,或者考虑使用--delay-updates
(这不影响排序的传输顺序,但确实使最终的文件更新阶段更快地发生)。
例子
以下是使用rsync的一些示例。
要备份我的妻子的主目录,包括大型MS Word文件和邮件文件夹,我使用运行的cron作业
rsync -Cavz。 arvidsjaur:备份
每个晚上通过PPP连接到我的机器上的重复目录“arvidsjaur”。
要同步我的samba源码树,我使用以下Makefile目标:
得到:
rsync -avuzb --exclude'*?'samba:samba /。
放:
rsync -Cavuzb。桑巴:桑巴/
同步:得到
这允许我与连接另一端的CVS目录同步。然后我在远程机器上进行CVS操作,节省了大量的时间
远程CVS协议不是很有效率。
我使用以下命令镜像我的“旧”和“新”ftp站点之间的目录:
rsync -az -e ssh --delete?ftp / pub / samba nimbus:“?ftp / pub / tridge”
这是从cron每几个小时推出的。
选项概要
以下是rsync中可用选项的简要摘要。请参阅下面的详细说明,以获得完整的说明。
-v, - verbbose增加冗长度
-q,--quiet抑制非错误消息
--no-motd抑制守护进程模式MOTD(见警告)
-c,--checksum跳过基于校验和,而不是mod-time&size
-a, - 归档归档模式;等于-rlptgoD(无-H,-A,-X)
--no-OPTION关闭隐含的选项(例如--no-D)
-r,-recursive递归到目录中
-R, - 相对使用相对路径名
- 没有暗示的目录不会发送隐含的目录 - 相对的
-b,--backup进行备份(请参阅--suffix&--backup-dir)
--backup-dir = DIR使DIR中的备份成为层次结构
--suffix = SUFFIX备份后缀(默认?w / o --backup-dir)
-u, - 更新跳过接收器上较新的文件
- 就地更新目标文件
- 将数据附加到较短的文件
--append-verify - 在文件校验和中附加旧数据
-d,--dirs传递目录而不进行递归
-l,--links将符号链接复制为符号链接
-L,--copy-links将符号链接转换为对象文件/目录
--copy-unsafe-links仅转换“不安全”符号链接
--safe-links忽略指向树外部的符号链接
-k,--copy-dirlinks将符号链接转换为指示目录
-K,--keep-dirlinks将接收器上的符号符号作为目录
-H, - 硬链接保存硬链接
-p,--perms保留权限
-E,可执行性保持可执行性
--chmod = CHMOD影响文件和/或目录权限
-A,--acls保留ACL(意为-p)
-X, - xattrs保留扩展属性
-o, - 所有者所有者(仅限超级用户)
-g,--group保存组
- 设备保存设备文件(仅限超级用户)
- 复制设备将设备内容复制为常规文件
- 特殊保存特殊文件
-D与 - 设备相同 - 特殊
-t, - 保留修改时间
-O,-omit-dir-times忽略来自--times的目录
- 超级接收器尝试超级用户活动
- 使用xattrs的fake-super store / recover特权attrs
-S, - 有效处理稀疏文件
-n,--dry-run执行试运行,不做任何更改
-W, - 全文件拷贝文件(w / o delta-xfer算法)
-x,--one-file-system不跨越文件系统边界
-B,--block-size = SIZE强制一个固定的校验和块大小
-e,--rsh = COMMAND指定要使用的远程shell
--rsync-path PROGRAM指定rsync在远程计算机上运行
--existing 在接收器上跳过创建新文件
--ignore-existing skip更新接收器上存在的文件
--remove-source-files sender删除同步文件(非目录)
--del --delete-during的别名
--delete 从dest dirs中删除无关文件
--delete-before 接收方在传输之前删除(默认)
--delete-during 接收器在xfer期间删除,而不是之前
--delete-delay 查找删除,删除之后
--delete-after 接收方在传输后删除,而不是之前
--delete-excluded 也删除dest dirs中的排除文件
--ignore-errors 删除即使有I / O错误
--force =强制删除目录,即使不是空的
--max-delete NUM??不删除超过NUM个文件
--max-size SIZE不传输任何大于SIZE的文件
--min-size SIZE不传输任何小于SIZE的文件
--partial 保留部分传输的文件
--partial-dir = DIR将部分传输的文件放入DIR
--delay-updates将所有更新的文件放在最后
-m,--prune-empty-dirs从文件列表中修剪空目录链
--numeric-id不按用户/组名映射uid / gid值
--timeout = SECONDS设置I / O超时(以秒为单位)
--contimeout = SECONDS设置守护程序连接超时(以秒为单位)
-I,--ignore-times不要跳过匹配大小和时间的文件
- 仅尺寸跳过符合大小的文件
--modify-window = NUM??比较mod-times,降低精度
-T,--temp-dir = DIR在目录DIR中创建临时文件
-y, - 如果没有dest文件,模糊找到类似的文件为基础
--compare-dest = DIR还将相对于DIR的接收文件进行比较
--copy-dest = DIR ...并包含未更改的文件的副本
--link-dest = DIR硬链接到DIR中的文件不变
-z, - 在传输过程中压缩压缩文件数据
--compress-level = NUM??显式设置压缩级别
--skip-compress = LIST在LIST中跳过使用后缀压缩文件
-C,--cvs-以与CVS相同的方式排除自动忽略文件
-f,--filter = RULE添加文件过滤规则
-F与--filter ='dir-merge /.rsync-filter'相同
重复:--filter =' - .rsync-filter'
--exclude = PATTERN排除匹配PATTERN的文件
--exclude-from = FILE从FILE读取排除模式
--include = PATTERN不排除匹配PATTERN的文件
--include-from = FILE read包含来自FILE的模式
--files-from = FILE从FILE读取源文件名的列表
-0,--from0 all / from / filter文件由0分隔
-s,--protect-args没有空间分裂;只有通配符字符
--address =发送套接字到守护进程的ADDRESS绑定地址
--port = PORT指定双冒号备用端口号
--sockopts = OPTIONS指定自定义TCP选项
--blocking-io使用阻塞I / O作为远程shell
--stats提供一些文件传输统计信息
-8,--8位输出使高位字节在输出中未转义
-h, - 人类可读的输出数字
- 进度显示转移过程中的进度
-P相同于--partial - 进度
-i,--itemize-changes输出所有更新的更改摘要
--out-format =使用指定格式的FORMAT输出更新
--log-file = FILE记录我们正在对指定的文件做什么
--log-file-format =使用指定FMT的FMT日志更新
--password-file = FILE读取守护程序 - 从FILE访问密码
- 仅列出列表的文件,而不是复制它们
--bwlimit = KBPS限制I / O带宽;千字节/秒
--write-batch = FILE将批量更新写入FILE
--only-write-batch = FILE like --write-batch,但是没有更新dest
--read-batch = FILE从FILE读取批量更新
--protocol = NUM??强制使用较旧的协议版本
--iconv = CONVERT_SPEC请求字符集转换文件名
--checksum-seed = NUM?? set block / file checksum seed(advanced)
-4,--ipv4喜欢IPv4
-6,--ipv6喜欢IPv6
--version打印版本号
(-h)--help显示这个帮助(见下面的-h注释)
Rsync也可以作为守护进程运行,在这种情况下可以接受以下选项:
--daemon作为rsync守护进程运行
--address = ADDRESS绑定到指定的地址
--bwlimit = KBPS限制I / O带宽;千字节/秒
--config = FILE指定备用rsyncd.conf文件
- 不分离不要与父母分离
--port =端口侦听备用端口号
--log-file = FILE覆盖“日志文件”设置
--log-file-format = FMT覆盖“日志格式”设置
--sockopts = OPTIONS指定自定义TCP选项
-v, - verbbose增加冗长度
-4,--ipv4喜欢IPv4
-6,--ipv6喜欢IPv6
-h,--help显示此帮助(如果在--daemon后使用)
rsync 同步服务器与客户端配置
###########服务器段配置############
1.系统版本
#cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
2.编辑配置
单个目录配置
#vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 19873 ###rsync的默认端口是873,这里是可以更改的
use chroot = no
max connections = 200
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[data]
path = /data
read only = false
list = false
hosts allow = 10.1.0.0/16
auth users = admin
secrets file = /etc/rsyncd.password
共享多个目录的配置
uid=root
gid=root
port = 19873 ###rsync的默认端口是873,这里是可以更改的
list = no
max connections=36000
use chroot=no
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
auth users = root
strict modes = yes
secrets file = /etc/rsyncd.up
ignore errors = yes
read only = no
hosts allow = *
hosts deny = *
[data]
path=/home/data
[config]
path=/home/config
[www]
path=/home/www
3.创建帐号和客户端登陆帐号密码
groupadd rsync
useradd -g rsync rsync -s /sbin/nologin -M
echo "admin:MyPassword" >> /etc/rsyncd.password
chmod 600 /etc/rsyncd.password
4.创建目录
mkdir -pv /data
chown -R rsync.rsync /data
5.启动服务
rsync --daemon
或者
systemctl start rsyncd
检查是否启动和报错
ss -tnl | grep 19873
cat /var/log/rsyncd.log
##############客户端配置#############
1.检查rsync软件是否安装
rpm -qa rsync
2.配置密码文件
echo "MyPassword" >> /etc/rsyncd.password
chmod 600 /etc/rsyncd.password
3.进行文件同步
rsync -avz /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password ###向rsync服务器进行无需输入密码的文件推送
查看服务器端的日志进行验证
cat /var/log/rsyncd.log
2017/03/04 01:10:22 [27174] rsyncd version 3.0.9 starting, listening on port 873
2017/03/04 01:20:14 [27174] rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(551) [Receiver=3.0.9]
2017/03/04 01:51:54 [27275] connect from www.ftp.htjr.com (10.1.41.54)
2017/03/04 01:51:54 [27275] rsync to data/ from admin@www.ftp.htjr.com (10.1.41.54)
2017/03/04 01:51:54 [27275] receiving file list
2017/03/04 01:51:54 [27275] 02_Avaya/
2017/03/04 01:52:02 [27275] recv www.ftp.htjr.com [10.1.41.54] data (admin) 02_Avaya/Avaya one-X Communicator Suite.exe 139076360
2017/03/04 01:52:02 [27275] sent 99 bytes received 138425856 bytes total size 139076360
注:如果我们想进行定时的文件备份可以写成crontab
#crontab -e
* * * * * /usr/bin/rsync -avz /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password
实例:
1 */3 * * * nohup rsync -avP --delete --chmod=ugo=rwx --password-file=/etc/rsyncd.password --port=19873 /var/ftp/Software/02_Avaya admin@10.1.41.46::data &
重启rsync的组合命令
pkill rsync #关闭rsync服务
kill `cat /var/run/rsyncd.pid`
rsync --daemon #启动rsync服务
检查启动的进程
ps -ef | grep rsync #检查rsync服务
防止rsync服务停止脚步:
#/bin/bash
if [ `ps -ef|grep "rsync --daemon"|grep -v grep|wc -l` -eq 0 ]
then
rsync --daemon
fi
rsync server:
1.vim /etc/rsyncd.conf (用户,目录,模块,虚拟用户 及密码文件)
2.创建共享目录 /data
3.创建rsync用户。并且授权访问 /data
4.创建密码文件,复制配置文件里的路径,然后添加密码内容。
内容 虚拟用户名:密码
5.密码文件权限600
6.rsync --daemon 然后放入/etc/rc.local
7.tail /var/log/rsyncd.log
rsync client (多个)
1.密码文件和服务端没有任何关系。命令时
--password-file=/etc/rsync.password 内容:密码
2./etc/rsync.password 600
3.同步:
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
拉:pull
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync -avz admin@10.1.41.46::data /var/ftp/Software/02_Avaya --password-file=/etc/rsyncd.password
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
rsync -avz rsync://admin@10.1.41.46/data /var/ftp/Software/02_Avaya --password-file=/etc/rsyncd.password
推:push
rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync -avz /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
rsync -avz /var/ftp/Software/02_Avaya rsync://admin@10.1.41.46/data --password-file=/etc/rsyncd.password
排错:
1.防火墙和selinux
2./var/log/rsyncd.log
3.整体部署流程整体考虑排查
4.操作习惯当做一个大事
架设rsync服务器的示例说明;
全局定义;
在rsync 服务器中,全局定义有几个比较关健的,根据我们前面所给的配置文件 rsyncd.conf 文件;
pid file = /var/run/rsyncd.pid 注:告诉进程写到 /var/run/rsyncd.pid 文件中;
port = 873 注:指定运行端口,默认是873,您可以自己指定;
address = 192.168.1.171 注:指定服务器IP地址;
uid = nobody
gid = nobdoy
注:服务器端传输文件时,要发哪个用户和用户组来执行,默认是nobody。 如果用nobody 用户和用户组,可能遇到权限问题,有些文件从服务器上拉不下来。所以我就偷懒,为了方便,用了root 。不过您可以在定义要同步的目录时定义的模块中指定用户来解决权限的问题。
use chroot = yes
注:用chroot,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外。也就是说,你在rsync服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同步符号链接的内容;这个需要自己来尝试;
read only = yes
注:read only 是只读选择,也就是说,不让客户端上传文件到服务器上。还有一个 write only选项,自己尝试是做什么用的吧;
#limit access to private LANs
hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
注:在您可以指定单个IP,也可以指定整个网段,能提高安全性。格式是ip 与ip 之间、ip和网段之间、网段和网段之间要用空格隔开;
max connections = 5
注:客户端最多连接数;
motd file = /etc/rsyncd/rsyncd.motd
注:motd file 是定义服务器信息的,要自己写 rsyncd.motd 文件内容。当用户登录时会看到这个信息。比如我写的是:
log file = /var/log/rsync.log
注:rsync 服务器的日志;
transfer logging = yes
注:这是传输文件的日志;
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
注: 默认是0,意no timeout,建议为300~600(5-10分钟)
模块定义;
模块定义什么呢?主要是定义服务器哪个目录要被同步。每个模块都要以[name]形式。这个名字就是在rsync 客户端看到的名字,其实有点象Samba服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的。我们可以根据自己的需要,来指定多个模块。每个模块要指定认证用户,密码文件、但排除并不是必须的;
下面前面配置文件模块的例子:
[linuxsirhome]
注:模块,它为我们提供了一个链接的名字,链接到哪呢,在本模块中,链接到了/home目录;要用[name] 形式;
path = /home 注:指定文件目录所在位置,这是必须指定的;
auth users = linuxsir 注:认证用户是linuxsir ,是必须在 服务器上存在的用户;
list=yes 注:list 意思是把rsync 服务器上提供同步数据的目录在服务器上模块是否显示列出来。默认是yes 。如果你不想列出来,就no ;如果是no是比较安全的,至少别人不知道你的服务器上提供了哪些目录。你自己知道就行了;
ignore errors 注:忽略IO错误,详细的请查文档;
secrets file = /etc/rsyncd/rsyncd.secrets 注:密码存在哪个文件;
comment = linuxsir home data 注:注释可以自己定义,写什么都行,写点相关的内容就行;
exclude = beinan/ samba/
注:exclude 是排除的意思,也就是说,要把/home目录下的beinan和samba 排除在外; beinan/和samba/目录之间有空格分开 ;
[beinan]
path = /opt 注:指定文件目录所在位置;
list=no
comment = optdir
auth users = beinan 注:是必段在服务器上存在的用户;
secrets file = /etc/rsyncd/rsyncd.secrets
ignore errors
客户端rsync命令排除:
排除单个文件:
rsync -avz --exclude=a /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password
排除多个文件:
rsync -avz --exclude={a,b} /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password
rsync -avz --exclude=a --exclude=b /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password
rsync -avz --exclude={a..g} /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password
rsync -avz --exclude-from=paichu.log /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password
服务器端排除参数:/etc/rsyncd.conf里加
exclude=a b test/dexter.txt
无差异同步
--delete
rsync推送企业工作场景:
1)备份 --delete风险
本地有啥,远端有啥,本地没有的远端有也要删除。服务器端的目录数据可以能丢失
实例:rsync -avz --delete --chmod=ugo=rwx --password-file=/etc/rsyncd.down --port=19873 /data 192.168.1.162::data
rsync拉去企业工作场景
1)代码发布,下载。--delete风险
远端有啥,本地有啥,远端没有的本地有也要删除。本地的目录数据可以能丢失
实例:rsync -avz --delete --chmod=ugo=rwx --password-file=/etc/rsyncd.down --port=19873 192.168.1.162::data /data
描述
Rsync是一种快速而非常通用的文件复制工具。它可以通过任何远程shell或远程rsync从本地复制到另一台主机
守护进程它提供了大量的选项来控制其行为的各个方面,并允许非常灵活地规定文件集
复制。它的delta传递算法是着名的,它减少了通过网络发送的数据量,只发送它们之间的差异
源文件和目标中的现有文件。 Rsync广泛用于备份和镜像以及日常使用的改进的复制命令。
Rsync使用“快速检查”算法(默认情况下)查找需要传输的文件,该算法可以查找大小更改或最后修改的文件
时间。当快速检查指示时,其他保留属性的任何更改(由选项请求)在目标文件上进行
该文件的数据不需要更新。
名称
rsync - 快速,通用,远程(和本地)文件复制工具
概要
本地:rsync [OPTION ...] SRC ... [DEST]
通过远程shell访问:
拉:rsync [OPTION ...] [USER @]主机:SRC ... [DEST]
推:rsync [OPTION ...] SRC ... [USER @]主机:DEST
通过rsync守护进程访问:
拉:rsync [OPTION ...] [USER @] HOST :: SRC ... [DEST]
rsync [OPTION ...] rsync:// [USER @] HOST [:PORT] / SRC ... [DEST]
推:rsync [OPTION ...] SRC ... [USER @] HOST :: DEST
rsync [OPTION ...] SRC ... rsync:// [USER @] HOST [:PORT] / DEST
仅使用一个SRC参数和DEST参数的用法将列出源文件而不是复制。
一般
Rsync将文件复制到远程主机或从远程主机复制文件,也可以在当前主机上复制文件(不支持在两台远程主机之间复制文件)。
rsync有两种不同的方式与远程系统联系:使用远程shell程序作为传输(如ssh或rsh)或联系rsync
守护进程直接通过TCP。只要源或目标路径在主机规范之后包含单个冒号(:)分隔符,则使用远程shell传输。
通知。当源或目标路径包含一个双冒号(:)分隔符后,直接发生rsync守护进程,
或者指定了rsync:// URL时(也参见“通过遥控器连接使用RSYNC-DAEMON功能”部分)。
规则)。
作为一种特殊情况,如果在没有目的地的情况下指定了单个源arg,则以与“ls -l”类似的输出格式列出文件。
如预期的那样,如果源路径或目标路径都不指定远程主机,则该副本在本地发生(另请参阅--list-only选项)。
Rsync将本地侧称为“客户端”,将远程端称为“服务器”。不要将“服务器”与rsync守护程序混淆 - 守护程序始终为a
服务器,但服务器可以是守护进程或远程shell生成的进程。
建立
有关安装说明,请参阅README文件。
一旦安装,您可以将rsync用于可以通过远程shell访问的任何计算机(以及可以使用rsync守护程序模式进行访问的某些机器)
tocol)。对于远程传输,现代rsync使用ssh进行通信,但默认情况下可能已配置为使用其他远程shell,
如rsh或remsh。
您还可以通过使用-e命令行选项或通过设置RSYNC_RSH环境变量来指定任何您喜欢的远程shell。
请注意,rsync必须安装在源计算机和目标计算机上。
用法
您使用rsync的方法与使用rcp相同。您必须指定源和目的地,其中一个可能是远程的。
解释语法的最好方法也许是一些例子:
rsync -t * .c foo:src /
这将将匹配模式* .c的所有文件从当前目录传输到机器foo上的目录src。如果任何文件已经存在
在远程系统上,rsync远程更新协议用于通过仅发送差异来更新文件。有关详细信息,请参阅技术报告。
rsync -avz foo:src / bar / data / tmp
这将递归地将所有文件从机器foo上的目录src / bar传输到本地机器上的/ data / tmp / bar目录中。文件是
转移到“归档”模式,这确保了传输中的符号链接,设备,属性,权限,所有权等。 Addi-
这些压缩将用于减少传输数据部分的大小。
rsync -avz foo:src / bar / / data / tmp
源上的尾部斜线会更改此行为,以避免在目标位置创建额外的目录级别。你可以想到一个尾随/一个
源代码意思是“复制该目录的内容”,而不是“按目录复制目录”,但是在这两种情况下,
tory被传输到目的地的包含目录。换句话说,以下每个命令以相同的方式复制文件,
包括他们设置/ dest / foo的属性:
rsync -av / src / foo / dest
rsync -av / src / foo / / dest / foo
还要注意,主机和模块引用不需要尾部斜杠来复制默认目录的内容。例如,这两个都复制了
远程目录的内容为“/ dest”:
rsync -av主机:/ dest
rsync -av host :: module / dest
您也可以在本地模式下使用rsync,源和目标在名称中都没有“:”。在这种情况下,它的行为就像一个改进的副本
命令。
最后,您可以通过省略模块名称来列出特定rsync守护程序中可用的所有(可列出)模块:
rsync somehost.mydomain.com ::
有关详细信息,请参阅以下部分。
高级用途
从远程主机请求多个文件的语法是通过指定与第一个相同样式的其他远程主机参数来实现的,或者使用
主机名省略。例如,所有这些工作:
rsync -av主机:file1:file2 host:file {3,4} / dest /
rsync -av host :: modname / file {1,2} host :: modname / file3 / dest /
rsync -av host :: modname / file1 :: modname / file {3,4}
旧版本的rsync需要在SRC中使用引用的空格,就像这些例子一样:
rsync -av主机:'dir1 / file1 dir2 / file2'/ dest
rsync host ::'modname / dir1 / file1 modname / dir2 / file2'/ dest
这个分词在最新的rsync中仍然有效(默认情况下),但并不像第一种方法那么容易使用。
如果需要传输一个包含空格的文件名,可以指定--protect-args(-s)选项,或者你需要转义空格
以远程shell将会理解的方式。例如:
rsync -av主机:'file \ name \ with \ spaces'/ dest
连接到RSYNC DAEMON
也可以使用没有远程shell的rsync作为传输。在这种情况下,您将直接连接到通常使用的远程rsync守护程序
TCP端口873.(这显然需要守护进程在远程系统上运行,因此请参考“启动RSYNC DAEMON以接受连接”部分
以下信息。)
以这种方式使用rsync与使用远程shell相同,除了:
o您使用双冒号::而不是单个冒号将主机名与路径分开,或者使用rsync:// URL。
o“路径”的第一个字实际上是一个模块名称。
o远程守护程序可能打印您连接的当天的消息。
o如果在远程守护程序上没有指定路径名,则将显示守护程序上的可访问路径列表。
o如果您不指定本地目标,则提供远程守护程序上指定文件的列表。
o您不能指定--rsh(-e)选项。
复制名为“src”的远程模块中的所有文件的示例:
rsync -av host :: src / dest
远程守护程序上的某些模块可能需要验证。如果是这样,您将在连接时收到密码提示。您可以避免密码提示
通过将环境变量RSYNC_PASSWORD设置为要使用的密码或使用--password-file选项。脚本编写时可能会有用
rsync。
警告:在某些系统上,所有用户都可以看到环境变量。建议使用--password-file的系统。
您可以通过将环境变量RSYNC_PROXY设置为指向您的Web代理的主机名:port对来通过Web代理建立连接。注意
您的Web代理的配置必须支持到端口873的代理连接。
您还可以通过将环境变量RSYNC_CONNECT_PROG设置为要运行的命令,使用程序作为代理建立守护程序连接
代替直接插座连接。字符串可能包含转义“%H”来表示rsync命令中指定的主机名(因此使用“%%”
如果您的字符串中需要单个“%”)。例如:
导出RSYNC_CONNECT_PROG ='ssh proxyhost nc%H 873'
rsync -av targethost1 :: module / src // dest /
rsync -av rsync :: // targethost2 / module / src // dest /
上面指定的命令使用ssh在proxyhost上运行nc(netcat),该主机将所有数据转发到目标主机(%H)上的端口873(rsync守护程序)。
使用RSYNC-DAEMON功能,通过远程外壳连接
使用rsync守护程序(例如命名模块)的各种功能,实际上不允许任何新的套接字连接到系统中是有用的
(除了允许远程shell访问所需的以外)。 Rsync支持使用远程shell连接到主机,然后产生一次性使用
“守护进程”服务器,希望在远程用户的主目录中读取其配置文件。如果要加密守护进程式传输,这可能很有用
数据,但是由于守护进程由远程用户启动,您可能无法使用chroot等功能或更改守护程序使用的uid。
(对于加密守护进程传输的另一种方式,请考虑使用ssh将本地端口隧道传送到远程计算机,然后在其上配置正常的rsync守护程序
远程主机只允许从“localhost”连接。)
从用户的角度来看,通过远程shell连接传输的守护进程使用与普通rsync-daemon传输几乎相同的命令行语法,
唯一的例外是您必须使用--rsh = COMMAND选项在命令行上显式设置远程shell程序。 (设置RSYNC_RSH
环境将不会启用此功能。)例如:
rsync -av --rsh = ssh host :: module / dest
如果您需要指定一个不同的远程shell用户,请记住主机前面的用户@前缀是指定rsync-user值(对于mod-
这需要基于用户的身份验证)。这意味着您必须在指定remote-shell时给“s”用户指定“-l user”选项,如本示例所示
它使用简短版本的--rsh选项:
rsync -av -e“ssh -l ssh-user”rsync-user @ host :: module / dest
“ssh-user”将在ssh级使用; “rsync-user”将用于登录到“模块”。
启动RSYNC DAEMON接受连接
为了连接到rsync守护程序,远程系统需要有一个守护进程已经运行(或者需要配置像inetd那样的
为特定端口上的传入连接生成rsync守护进程)。有关如何启动将处理传入套接字的守护进程的完整信息
节,请参阅rsyncd.conf(5)手册页 - 即守护程序的配置文件,它包含有关如何运行守护程序的完整详细信息(包括
独立和inetd配置)。
如果您正在使用其中一个远程shell传输进行传输,则不需要手动启动rsync守护程序。
有条件转让订单
Rsync始终将指定的文件名排序到其内部传输列表中。这将处理相同命名的directo-
ries,可以轻松地删除重复的文件名,并且可能会使文件按照与在
命令行。
如果您需要将特定文件转移到另一个文件之前,请将文件分离为不同的rsync调用,或者考虑使用--delay-updates
(这不影响排序的传输顺序,但确实使最终的文件更新阶段更快地发生)。
例子
以下是使用rsync的一些示例。
要备份我的妻子的主目录,包括大型MS Word文件和邮件文件夹,我使用运行的cron作业
rsync -Cavz。 arvidsjaur:备份
每个晚上通过PPP连接到我的机器上的重复目录“arvidsjaur”。
要同步我的samba源码树,我使用以下Makefile目标:
得到:
rsync -avuzb --exclude'*?'samba:samba /。
放:
rsync -Cavuzb。桑巴:桑巴/
同步:得到
这允许我与连接另一端的CVS目录同步。然后我在远程机器上进行CVS操作,节省了大量的时间
远程CVS协议不是很有效率。
我使用以下命令镜像我的“旧”和“新”ftp站点之间的目录:
rsync -az -e ssh --delete?ftp / pub / samba nimbus:“?ftp / pub / tridge”
这是从cron每几个小时推出的。
选项概要
以下是rsync中可用选项的简要摘要。请参阅下面的详细说明,以获得完整的说明。
-v, - verbbose增加冗长度
-q,--quiet抑制非错误消息
--no-motd抑制守护进程模式MOTD(见警告)
-c,--checksum跳过基于校验和,而不是mod-time&size
-a, - 归档归档模式;等于-rlptgoD(无-H,-A,-X)
--no-OPTION关闭隐含的选项(例如--no-D)
-r,-recursive递归到目录中
-R, - 相对使用相对路径名
- 没有暗示的目录不会发送隐含的目录 - 相对的
-b,--backup进行备份(请参阅--suffix&--backup-dir)
--backup-dir = DIR使DIR中的备份成为层次结构
--suffix = SUFFIX备份后缀(默认?w / o --backup-dir)
-u, - 更新跳过接收器上较新的文件
- 就地更新目标文件
- 将数据附加到较短的文件
--append-verify - 在文件校验和中附加旧数据
-d,--dirs传递目录而不进行递归
-l,--links将符号链接复制为符号链接
-L,--copy-links将符号链接转换为对象文件/目录
--copy-unsafe-links仅转换“不安全”符号链接
--safe-links忽略指向树外部的符号链接
-k,--copy-dirlinks将符号链接转换为指示目录
-K,--keep-dirlinks将接收器上的符号符号作为目录
-H, - 硬链接保存硬链接
-p,--perms保留权限
-E,可执行性保持可执行性
--chmod = CHMOD影响文件和/或目录权限
-A,--acls保留ACL(意为-p)
-X, - xattrs保留扩展属性
-o, - 所有者所有者(仅限超级用户)
-g,--group保存组
- 设备保存设备文件(仅限超级用户)
- 复制设备将设备内容复制为常规文件
- 特殊保存特殊文件
-D与 - 设备相同 - 特殊
-t, - 保留修改时间
-O,-omit-dir-times忽略来自--times的目录
- 超级接收器尝试超级用户活动
- 使用xattrs的fake-super store / recover特权attrs
-S, - 有效处理稀疏文件
-n,--dry-run执行试运行,不做任何更改
-W, - 全文件拷贝文件(w / o delta-xfer算法)
-x,--one-file-system不跨越文件系统边界
-B,--block-size = SIZE强制一个固定的校验和块大小
-e,--rsh = COMMAND指定要使用的远程shell
--rsync-path PROGRAM指定rsync在远程计算机上运行
--existing 在接收器上跳过创建新文件
--ignore-existing skip更新接收器上存在的文件
--remove-source-files sender删除同步文件(非目录)
--del --delete-during的别名
--delete 从dest dirs中删除无关文件
--delete-before 接收方在传输之前删除(默认)
--delete-during 接收器在xfer期间删除,而不是之前
--delete-delay 查找删除,删除之后
--delete-after 接收方在传输后删除,而不是之前
--delete-excluded 也删除dest dirs中的排除文件
--ignore-errors 删除即使有I / O错误
--force =强制删除目录,即使不是空的
--max-delete NUM??不删除超过NUM个文件
--max-size SIZE不传输任何大于SIZE的文件
--min-size SIZE不传输任何小于SIZE的文件
--partial 保留部分传输的文件
--partial-dir = DIR将部分传输的文件放入DIR
--delay-updates将所有更新的文件放在最后
-m,--prune-empty-dirs从文件列表中修剪空目录链
--numeric-id不按用户/组名映射uid / gid值
--timeout = SECONDS设置I / O超时(以秒为单位)
--contimeout = SECONDS设置守护程序连接超时(以秒为单位)
-I,--ignore-times不要跳过匹配大小和时间的文件
- 仅尺寸跳过符合大小的文件
--modify-window = NUM??比较mod-times,降低精度
-T,--temp-dir = DIR在目录DIR中创建临时文件
-y, - 如果没有dest文件,模糊找到类似的文件为基础
--compare-dest = DIR还将相对于DIR的接收文件进行比较
--copy-dest = DIR ...并包含未更改的文件的副本
--link-dest = DIR硬链接到DIR中的文件不变
-z, - 在传输过程中压缩压缩文件数据
--compress-level = NUM??显式设置压缩级别
--skip-compress = LIST在LIST中跳过使用后缀压缩文件
-C,--cvs-以与CVS相同的方式排除自动忽略文件
-f,--filter = RULE添加文件过滤规则
-F与--filter ='dir-merge /.rsync-filter'相同
重复:--filter =' - .rsync-filter'
--exclude = PATTERN排除匹配PATTERN的文件
--exclude-from = FILE从FILE读取排除模式
--include = PATTERN不排除匹配PATTERN的文件
--include-from = FILE read包含来自FILE的模式
--files-from = FILE从FILE读取源文件名的列表
-0,--from0 all / from / filter文件由0分隔
-s,--protect-args没有空间分裂;只有通配符字符
--address =发送套接字到守护进程的ADDRESS绑定地址
--port = PORT指定双冒号备用端口号
--sockopts = OPTIONS指定自定义TCP选项
--blocking-io使用阻塞I / O作为远程shell
--stats提供一些文件传输统计信息
-8,--8位输出使高位字节在输出中未转义
-h, - 人类可读的输出数字
- 进度显示转移过程中的进度
-P相同于--partial - 进度
-i,--itemize-changes输出所有更新的更改摘要
--out-format =使用指定格式的FORMAT输出更新
--log-file = FILE记录我们正在对指定的文件做什么
--log-file-format =使用指定FMT的FMT日志更新
--password-file = FILE读取守护程序 - 从FILE访问密码
- 仅列出列表的文件,而不是复制它们
--bwlimit = KBPS限制I / O带宽;千字节/秒
--write-batch = FILE将批量更新写入FILE
--only-write-batch = FILE like --write-batch,但是没有更新dest
--read-batch = FILE从FILE读取批量更新
--protocol = NUM??强制使用较旧的协议版本
--iconv = CONVERT_SPEC请求字符集转换文件名
--checksum-seed = NUM?? set block / file checksum seed(advanced)
-4,--ipv4喜欢IPv4
-6,--ipv6喜欢IPv6
--version打印版本号
(-h)--help显示这个帮助(见下面的-h注释)
Rsync也可以作为守护进程运行,在这种情况下可以接受以下选项:
--daemon作为rsync守护进程运行
--address = ADDRESS绑定到指定的地址
--bwlimit = KBPS限制I / O带宽;千字节/秒
--config = FILE指定备用rsyncd.conf文件
- 不分离不要与父母分离
--port =端口侦听备用端口号
--log-file = FILE覆盖“日志文件”设置
--log-file-format = FMT覆盖“日志格式”设置
--sockopts = OPTIONS指定自定义TCP选项
-v, - verbbose增加冗长度
-4,--ipv4喜欢IPv4
-6,--ipv6喜欢IPv6
-h,--help显示此帮助(如果在--daemon后使用)
rsync 同步服务器与客户端配置
###########服务器段配置############
1.系统版本
#cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
2.编辑配置
单个目录配置
#vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 19873 ###rsync的默认端口是873,这里是可以更改的
use chroot = no
max connections = 200
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
transfer logging = yes
timeout = 900
ignore nonreadable = yes
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
[data]
path = /data
read only = false
list = false
hosts allow = 10.1.0.0/16
auth users = admin
secrets file = /etc/rsyncd.password
共享多个目录的配置
uid=root
gid=root
port = 19873 ###rsync的默认端口是873,这里是可以更改的
list = no
max connections=36000
use chroot=no
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
auth users = root
strict modes = yes
secrets file = /etc/rsyncd.up
ignore errors = yes
read only = no
hosts allow = *
hosts deny = *
[data]
path=/home/data
[config]
path=/home/config
[www]
path=/home/www
3.创建帐号和客户端登陆帐号密码
groupadd rsync
useradd -g rsync rsync -s /sbin/nologin -M
echo "admin:MyPassword" >> /etc/rsyncd.password
chmod 600 /etc/rsyncd.password
4.创建目录
mkdir -pv /data
chown -R rsync.rsync /data
5.启动服务
rsync --daemon
或者
systemctl start rsyncd
检查是否启动和报错
ss -tnl | grep 19873
cat /var/log/rsyncd.log
##############客户端配置#############
1.检查rsync软件是否安装
rpm -qa rsync
2.配置密码文件
echo "MyPassword" >> /etc/rsyncd.password
chmod 600 /etc/rsyncd.password
3.进行文件同步
rsync -avz /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password ###向rsync服务器进行无需输入密码的文件推送
查看服务器端的日志进行验证
cat /var/log/rsyncd.log
2017/03/04 01:10:22 [27174] rsyncd version 3.0.9 starting, listening on port 873
2017/03/04 01:20:14 [27174] rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at rsync.c(551) [Receiver=3.0.9]
2017/03/04 01:51:54 [27275] connect from www.ftp.htjr.com (10.1.41.54)
2017/03/04 01:51:54 [27275] rsync to data/ from admin@www.ftp.htjr.com (10.1.41.54)
2017/03/04 01:51:54 [27275] receiving file list
2017/03/04 01:51:54 [27275] 02_Avaya/
2017/03/04 01:52:02 [27275] recv www.ftp.htjr.com [10.1.41.54] data (admin) 02_Avaya/Avaya one-X Communicator Suite.exe 139076360
2017/03/04 01:52:02 [27275] sent 99 bytes received 138425856 bytes total size 139076360
注:如果我们想进行定时的文件备份可以写成crontab
#crontab -e
* * * * * /usr/bin/rsync -avz /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password
实例:
1 */3 * * * nohup rsync -avP --delete --chmod=ugo=rwx --password-file=/etc/rsyncd.password --port=19873 /var/ftp/Software/02_Avaya admin@10.1.41.46::data &
重启rsync的组合命令
pkill rsync #关闭rsync服务
kill `cat /var/run/rsyncd.pid`
rsync --daemon #启动rsync服务
检查启动的进程
ps -ef | grep rsync #检查rsync服务
防止rsync服务停止脚步:
#/bin/bash
if [ `ps -ef|grep "rsync --daemon"|grep -v grep|wc -l` -eq 0 ]
then
rsync --daemon
fi
rsync server:
1.vim /etc/rsyncd.conf (用户,目录,模块,虚拟用户 及密码文件)
2.创建共享目录 /data
3.创建rsync用户。并且授权访问 /data
4.创建密码文件,复制配置文件里的路径,然后添加密码内容。
内容 虚拟用户名:密码
5.密码文件权限600
6.rsync --daemon 然后放入/etc/rc.local
7.tail /var/log/rsyncd.log
rsync client (多个)
1.密码文件和服务端没有任何关系。命令时
--password-file=/etc/rsync.password 内容:密码
2./etc/rsync.password 600
3.同步:
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
拉:pull
rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync -avz admin@10.1.41.46::data /var/ftp/Software/02_Avaya --password-file=/etc/rsyncd.password
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
rsync -avz rsync://admin@10.1.41.46/data /var/ftp/Software/02_Avaya --password-file=/etc/rsyncd.password
推:push
rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync -avz /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
rsync -avz /var/ftp/Software/02_Avaya rsync://admin@10.1.41.46/data --password-file=/etc/rsyncd.password
排错:
1.防火墙和selinux
2./var/log/rsyncd.log
3.整体部署流程整体考虑排查
4.操作习惯当做一个大事
架设rsync服务器的示例说明;
全局定义;
在rsync 服务器中,全局定义有几个比较关健的,根据我们前面所给的配置文件 rsyncd.conf 文件;
pid file = /var/run/rsyncd.pid 注:告诉进程写到 /var/run/rsyncd.pid 文件中;
port = 873 注:指定运行端口,默认是873,您可以自己指定;
address = 192.168.1.171 注:指定服务器IP地址;
uid = nobody
gid = nobdoy
注:服务器端传输文件时,要发哪个用户和用户组来执行,默认是nobody。 如果用nobody 用户和用户组,可能遇到权限问题,有些文件从服务器上拉不下来。所以我就偷懒,为了方便,用了root 。不过您可以在定义要同步的目录时定义的模块中指定用户来解决权限的问题。
use chroot = yes
注:用chroot,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外。也就是说,你在rsync服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同步符号链接的内容;这个需要自己来尝试;
read only = yes
注:read only 是只读选择,也就是说,不让客户端上传文件到服务器上。还有一个 write only选项,自己尝试是做什么用的吧;
#limit access to private LANs
hosts allow=192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
注:在您可以指定单个IP,也可以指定整个网段,能提高安全性。格式是ip 与ip 之间、ip和网段之间、网段和网段之间要用空格隔开;
max connections = 5
注:客户端最多连接数;
motd file = /etc/rsyncd/rsyncd.motd
注:motd file 是定义服务器信息的,要自己写 rsyncd.motd 文件内容。当用户登录时会看到这个信息。比如我写的是:
log file = /var/log/rsync.log
注:rsync 服务器的日志;
transfer logging = yes
注:这是传输文件的日志;
log format = %t %a %m %f %b
syslog facility = local3
timeout = 300
注: 默认是0,意no timeout,建议为300~600(5-10分钟)
模块定义;
模块定义什么呢?主要是定义服务器哪个目录要被同步。每个模块都要以[name]形式。这个名字就是在rsync 客户端看到的名字,其实有点象Samba服务器提供的共享名。而服务器真正同步的数据是通过 path 来指定的。我们可以根据自己的需要,来指定多个模块。每个模块要指定认证用户,密码文件、但排除并不是必须的;
下面前面配置文件模块的例子:
[linuxsirhome]
注:模块,它为我们提供了一个链接的名字,链接到哪呢,在本模块中,链接到了/home目录;要用[name] 形式;
path = /home 注:指定文件目录所在位置,这是必须指定的;
auth users = linuxsir 注:认证用户是linuxsir ,是必须在 服务器上存在的用户;
list=yes 注:list 意思是把rsync 服务器上提供同步数据的目录在服务器上模块是否显示列出来。默认是yes 。如果你不想列出来,就no ;如果是no是比较安全的,至少别人不知道你的服务器上提供了哪些目录。你自己知道就行了;
ignore errors 注:忽略IO错误,详细的请查文档;
secrets file = /etc/rsyncd/rsyncd.secrets 注:密码存在哪个文件;
comment = linuxsir home data 注:注释可以自己定义,写什么都行,写点相关的内容就行;
exclude = beinan/ samba/
注:exclude 是排除的意思,也就是说,要把/home目录下的beinan和samba 排除在外; beinan/和samba/目录之间有空格分开 ;
[beinan]
path = /opt 注:指定文件目录所在位置;
list=no
comment = optdir
auth users = beinan 注:是必段在服务器上存在的用户;
secrets file = /etc/rsyncd/rsyncd.secrets
ignore errors
客户端rsync命令排除:
排除单个文件:
rsync -avz --exclude=a /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password
排除多个文件:
rsync -avz --exclude={a,b} /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password
rsync -avz --exclude=a --exclude=b /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password
rsync -avz --exclude={a..g} /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password
rsync -avz --exclude-from=paichu.log /var/ftp/Software/02_Avaya admin@10.1.41.46::data --password-file=/etc/rsyncd.password
服务器端排除参数:/etc/rsyncd.conf里加
exclude=a b test/dexter.txt
无差异同步
--delete
rsync推送企业工作场景:
1)备份 --delete风险
本地有啥,远端有啥,本地没有的远端有也要删除。服务器端的目录数据可以能丢失
实例:rsync -avz --delete --chmod=ugo=rwx --password-file=/etc/rsyncd.down --port=19873 /data 192.168.1.162::data
rsync拉去企业工作场景
1)代码发布,下载。--delete风险
远端有啥,本地有啥,远端没有的本地有也要删除。本地的目录数据可以能丢失
实例:rsync -avz --delete --chmod=ugo=rwx --password-file=/etc/rsyncd.down --port=19873 192.168.1.162::data /data
当192.168.1.162::data里没有某个文件时(比如被删除了),本地服务器的有这个文件也会被删除
rsync官网:http://rsync.samba.org