-v, –verbose 详细模式输出
-q, –quiet 精简输出模式
-c, –checksum 打开校验开关,强制对文件传输进行校验
-a, –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, –recursive 对子目录以递归模式处理
-R, –relative 使用相对路径信息
rsync foo/bar/foo.c remote:/tmp/
则在/tmp目录下创建foo.c文件,而如果使用-R参数:
rsync -R foo/bar/foo.c remote:/tmp/
则会创建文件/tmp/foo/bar/foo.c,也就是会保持完全路径信息。
-b, –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用–suffix选项来指定不同的备份文件前缀。
–backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, –update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, –links 保留软链结
-L, –copy-links 想对待常规文件一样处理软链结
–copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
–safe-links 忽略指向SRC路径目录树以外的链结
-H, –hard-links 保留硬链结
-p, –perms 保持文件权限
-o, –owner 保持文件属主信息
-g, –group 保持文件属组信息
-D, –devices 保持设备文件信息
-t, –times 保持文件时间信息
-S, –sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, –dry-run现实哪些文件将被传输
-W, –whole-file 拷贝文件,不进行增量检测
-x, –one-file-system 不要跨越文件系统边界
-B, –block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, –rsh=COMMAND 指定替代rsh的shell程序
–rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, –cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
–existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
–delete 删除那些DST中SRC没有的文件
–delete-excluded 同样删除接收端那些被该选项指定排除的文件
–delete-after 传输结束以后再删除
–ignore-errors 及时出现IO错误也进行删除
–max-delete=NUM 最多删除NUM个文件
–partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
–force 强制删除目录,即使不为空
–numeric-ids 不将数字的用户和组ID匹配为用户名和组名
–timeout=TIME IP超时时间,单位为秒
-I, –ignore-times 不跳过那些有同样的时间和长度的文件
–size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
–modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T –temp-dir=DIR 在DIR中创建临时文件
–compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 –partial
–progress 显示备份过程
-z, –compress 对备份的文件在传输时进行压缩处理
–exclude=PATTERN 指定排除不需要传输的文件模式
–include=PATTERN 指定不排除而需要传输的文件模式
–exclude-from=FILE 排除FILE中指定模式的文件
–include-from=FILE 不排除FILE指定模式匹配的文件
–version 打印版本信息
–address 绑定到特定的地址
–config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
–port=PORT 指定其他的rsync服务端口
–blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
–progress 在传输时现实传输过程
–log-format=FORMAT 指定日志文件格式
–password-file=FILE 从FILE中得到密码
–bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, –help 显示帮助信息。
------------------------------------------------------
近段时间工作需要做了些scp和rsync的异地安全备份,整理了一下,希望多大家有用。
scp的备份指南:
需求:用scp自动完成异地文件的定时copy
难点:如何让异地主机建立安全的信任关系
1、在A机器上用root运行ssh-keygen,将生成/root/.ssh/identity和/root/.ssh/identity.pub两个文件;
2、在A机器上运行scp /root/.ssh/identity.pub test@192.168.1.10:/upload/.ssh/authorized_keys(假设B机器的IP地址为192.168.1.10,B 机器上开了用户test,要上传到的目录是/upload,需输入密码)。目的是将本地的identity.pub放到远程机器上并改名为 authorized_keys,这样就建立了新任主机,以后就不需要每次ssh都需要输入密码了;
3、通过crontab建立脚本,例:30 02 * * 1-5 scp /home/data/* test@192.168.1.10:/upload。
(每天2:30am自动将/home/data下面的所有文件以test用户名传到远程主机192.168.1.10的/upload目录中);
认证原理:
如果你希望从A作为用户user1 SSH 到B 作为用户user2, 若要用RSA键对法认证且不需要密码,则B上的ssh 后台程序拿出~user2/.ssh/authorized_keys中的与A有关的RSA公钥来对A上的以user1身份运行的ssh客户程序进行挑 战,前面我们已经把A上的identity.pub拷贝到B上作为authorized_keys了。则A保持私钥identity,而B上的sshd又 拿出A的公钥来挑战,因此成功,你可以加很多行到authorized_keys以允许其它服务器的公钥可以加进来。
scp特点:
使用ssl加密,安全性高。
rsync的备份指南:
需求:用rsync完成异地文件的同步
难点:如何建立异地信任关系
1、在A主机上(rsync服务器)上编译安装rsync,需要版本在2.4.3以上(http://rsync.samba.org),在/etc目录下建立rsyncd.conf文件,内容如下:
uid = nobody
gid = nobody
use chroot = no # 不使用chroot
max connections = 4 # 最大连接数为4
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock # 日志记录文件
[test] # 这里是认证的模块名,在客户端需要指定
path = /home/test # 需要同步的目录
comment = test folder
uid = root
ignore errors # 可以忽略一些无关的IO错误
read only = yes # 只读
list = no # 不允许列文件
auth users = rsynctest # 认证的用户名,如果没有这行,则表明是匿名
secrets file = /etc/test.scrt # 认证用户密码文件
2、在/etc下建立test.scrt文件,输入:
用户名:密码
例:rsynctest:testrsync
将文件属性修改为600(千万注意)
3、启动rsync服务:rsync --daemon (rsync运行在tcp 873端口,可以通过netstat -an|grep LISTEN察看)。
4、在B主机上(rsync客户机)上建立/etc/test文件,内容为A主机的密码,例:
testsync
5、用crontab建立脚本,例:0 21 * * 1-5 rsync -vzrtp --progress --delete --password-file=/etc/test rsynctest@192.168.1.10::test /home/rsynctest
rsync中的参数:v是verbose,z是压缩,r是recursive,tp都是保持文件原有属性如属主、时间
的参数。--progress是指显示出详细的进度情况,--delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。--password-file=/etc/test来指定密码文件,这样就可以在脚本中使
用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有属主可读(600)。
rsynctest@192.168.1.10中,rsynctest是指定密码文件中的用户名,192.168.1.10是A主机的IP地 址::test是指模块名[test],也就是在/etc/rsyncd.conf中自定义的名称。最后的/home/rsynctest是备份到本地的 目录名。
(也可以用-e ssh的参数建立起加密的连接,然后和scp中信任主机的办法一样如法炮制)
(在上面实例中的rsynctest并不是真实的用户,可以根据自己需要文本定义,这也是使用rsync的一大好处)
rsync的特点:
特性如下:
1、可以镜像保存整个目录树和文件系统。
2、可以很容易做到保持原来文件的权限、时间、软硬链接等等。
3、无须特殊权限即可安装。
4、优化的流程,文件传输效率高。
5、可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接。
6、支持匿名传输。
rsync的功能还很强大,深入的眼就可以到官方网站上了解.
---------------------------------------------------------
rsync的试用方法
一、设置Rsync Server端
Rsync server需要设定四个方面:
1.规划建立备份目录区
2.设定: /etc/xinetd.d/rsync
3.设定: /etc/rsyncd.conf
4.设定: 密码文件。
说明如下:
1.规划建立备份目录区:
建议你在rsync server上开一个较大的磁盘分割区,并在其下建立好备份用的目录。比如:/home/asialinux。
2.设定: /etc/xinetd.d/rsync:
即#vi /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 = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
把其中的disable = yes 改为 disable = no之后退出保存就可以了,这还没有完成,还需启动rsync的服务。
#service xinetd restart
或者
#ntsysv
选中
rsync确定即可。
这样就开通了873通道(port),一旦有rsync client连接,xinetd就会把它转介给rsyncd跑port873。
3.设定: /etc/rsyncd.conf
如果在/etc下没有这个文件,请不要迷惑,自己创建一个不就得了,假设要备份的机器名为asialinux(IP:192.168.0.1),
即Samba文件服务器:
#vi /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
secrets file = /etc/rsync.pass
[backup]
path = /home/server/asialinux
auth users = feixue
uid = root
gid = root
secrets file = /home/rsyncd.secrets
read only = no
退出vi编辑模式并保存。
说明:
[backup]代表欲备份的主机代号,可以和主机名相同,也可以自定。本例为backup,而没有用asialinux以便大家在下面使用rsync命令时加以理解。
Path就是用来存放备份档案的绝对目录,请你一定要用mkdir开设好,名称自定,如本例要在/home目录下面建立server目录以及server下面的子目录asialinux。
注:如果你没有建立目录、目录建立的不对或者路径不对,都将不能进行rsync的备份,情况如下所示:
#rsync –rvlHopDtS --password-file=/root/rsyncd.recrets /home feixue@testsmb::backup
@ERROR:chroot failed
rsync:connection unexpectedly closed (75 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(165)
auth users代表授权的账号,名称可自定。
secrets file代表存储账号和密码的档案路径。
当然,大家可以在/etc/rsyncd.conf内加入更多的区块,来备份多台主机或者一台主机的多个目录等,可以灵活运用。
4.设定:密码文件
如果没有和ssh在一块儿运用的话,rsyncd.secrets的内容很简单,格式为 账号:密码
例如:
feixue:asialinux
注:上述设定只是一个范例,请大家务必自定一组,千万不可以直接套用。
账号和密码设定完成之后,为了安全,还要对其属主和权限进行限定,我测试过,server和client端的权限都设为000时,只要密码两者相符,依然可以正常的备份。:D
#chown root.root rsyncd.secrets
#chmod 600 rsyncd.secrets
这样,我们的Rsync Server端就设定完成了,当然你可以查看rsync的记录日志档案,请参考:/var/log/rsyncd.log。
二、设置Rsync Client端
假设欲备份的机器名称为testsmb(IP:192.168.2.220)下的目录/home备份到Rsync Server(asialinux)上。可以做如下设定:
1.设定密码文件
2.测试rsync执行指令
3.将rsync指令放入工作排程(crontab)
说明如下:
1.设定密码文件
假设把密码文件放在/root/rsyncd.secrets,内容很简单,只要含有一行密码即可:
#vi /root/rsyncd.secrets
asialinux
退出vi编辑模式并保存。
注:为了安全,设定密码档案的属性为:600。rsyncd.secrets的密码一定要和Rsync Server密码设定档案里的密码一样。
如果不同,将会出现如下的错误:
#rsync –rvlHopDtS --password-file=/root/rsyncd.recrets /home feixue@testsmb::backup
@ERROR: auth failed on module backup
rsync: connection unexpectedly closed (90 bytes read so far)
rsync error: error in rsync protocol data stream (code 12) at io.c(165)
2. 测试rsync执行指令
一切设定完之后,我们可以带着兴奋的心情来测试、体验一下Rsync的魅力吧:)
# rsync –rvlHopDtS --password-file=/root/rsyncd.recrets /home feixue@testsmb::backup
如果出现如下所示的画面,那么恭喜一下,成功了:
上传备份
# rsync –rvlHopDtS --password-file=/root/rsyncd.recrets /home feixue@testsmb::backup
下载备份
# rsync -vzrtopg --delete --password-file=/etc/rsync.pass --progress user@192.168.1.26::shanxlu /home/wenti
building file list ... done
.profiles/Application Data/Microsoft/Office/WEBFDR16.INF
.profiles/Application Data/Microsoft/WELCOME/DEFAULT.WBM
若出现如下:
# rsync –rvlHopDtS --password-file=/root/rsyncd.recrets /home feixue@testsmb::backup
rsync: getaddrinto: testsmb 873: Name or service not know
rsync error: error in socket IO (code 10 ) at clientserver.c(83)
请分别编辑Rsync Server(假设hostname为asialinux,IP:192.168.0.1)和Rsync Client(假设hostname为testsmb,IP:192.168.0.2)的/etc/hosts文件,分别加入对方的IP地址和机器名,如 下:
[root@asialinux root]#vi /etc/hosts
192.168.0.2 testsmb
退出vi编辑模式并保存。
[root@testsmb root]#vi /etc/hosts
192.168.0.1 asialinux
退出vi编辑模式并保存。
如果没有出现期望的画面,那么请检查一下你的设定。
3.将rsync指令放入工作排程(crontab)
现在可以把我们的备份工作置入排程了,假设每天凌晨1点开始备份工作:
#crontab –u root –e
0 1 * * * /usr/bin/rsync --password-file=/root/rsyncd.recrets /home feixue@testsmb::backup
如果你有其他的目录需要备份,则如法炮制吧
@rsync 试用参数:
-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 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 不将传送端档案的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协定
rsync安装配置实践
前言
Rsync代表”remote sync”,它是本地和远程主机文件同步工具。它只同步更改的文件,以此实现最小化传输数据。rsync的使用场景非常丰富,相信大家会经常使用,这里做下简单的总结。
扩展阅读
rsync - https://www.samba.org/rsync/
rsync简介:rsync is a file transfer program capable of efficient remote update via a fast differencing algorithm.
rsync 是类 unix 系统下的数据镜像备份工具,从软件的命名上就可以看出来了 ——remote sync。它的特性如下:
- 可以镜像保存整个目录树和文件系统
- 可以很容易做到保持原来文件的权限、时间、软硬链接等等
- 无须特殊权限即可安装
- 优化的流程,文件传输效率高
- 可以使用 rsh、ssh 等方式来传输文件,当然也可以通过直接的 socket 连接
- 支持匿名传输
在使用 rsync 进行远程同步时,可以使用两种方式:远程 Shell 方式(用户验证由 ssh 负责)和 C/S 方式(即客户连接远程 rsync 服务器,用户验证由 rsync 服务器负责)。
无论本地同步目录还是远程同步数据,首次运行时将会把全部文件拷贝一次,以后再运行时将只拷贝有变化的文件(对于新文件)或文件的变化部分(对于原有文件)。
rsync源配置文件示例
1 | # 编辑rsync配置文件 |
rsyncd.conf 官方文档请参考 - https://www.samba.org/ftp/rsync/rsyncd.conf.html
rsync常用参数
注: 在指定复制源时,路径是否有最后的 “/” 有不同的含义,例如:
/data 表示将整个 /data 目录复制到目标目录
/data/ 表示将 /data/ 目录中的所有内容复制到目标目录
man rsync 翻译 (rsync 命令中文手册)
http://www.cnblogs.com/f-ck-need-u/p/7221713.html
1 | rsync is a file transfer program capable of efficient remote update via a fast differencing algorithm. |
1 | # rsync 常用参数 |
rsync同步方式
Rsync 远程同步主要有两种方式:使用远程 shell(ssh或rsh) 或使用 rsync 的 daemon 方式
rsync 命令和 ssh,scp 命令有点相似。
我们创建两个测试目录和一些文件:
1 | mkdir dir1 |
本地文件同步
1 | # 如果没有desc目录,会自动创建 |
远程文件同步 –shell 方式
1 | # 从本地传到远端,目标文件会被写成ssh登录用户的属组和属主(如下 www) |
远程文件同步 –daemon 方式
rsync服务端配置
1 | # 创建 rsync 服务的目录和配置文件 (可选) |
rsync客户端配置
1 | # 从 服务端 => 客户端 同步数据,会提示输入密码 |
rsync简化配置实践
1 | # 配置服务端rsyncd.conf |
rsync 有用的选项和注意事项
-n 选项,方便你执行rsync命令前预览结果,不会真正执行
1 | $ rsync -n --delete -r . machineB:/home/userB/ |
–delete 选项,如果源端没有此文件,那么目的端也别想拥有,删除之。
rsync -aP --delete source dest
-P 选项非常有用,它是 -progress 和 -partial 的组合。第一个选项是用来显示传输进度条,第二个选项允许断点续传和增量传输:
rsync -aP source dest
-z 选项,压缩传输的文件,对于已经压缩过的文件不建议添加该参数,针对大文件压缩包传输效率会降低8倍,且消耗CPU
rsync -az source dest
–bwlimit 选项,限制传输带宽,参数值的默认单位是 KBPS,也就是每秒多少 KB
rsync -avzP --bwlimit=100 source dest
–remove-source-files 该选项告诉rsync移除sender端已经成功传输到receiver端的文件(不包括任何目录文件)。
rsync -avP --remove-source-files source dest
rsync过滤模块比较复杂,建议参考官网和Google实例测试
–exclude 选项如果只有前者可以单独使用,多个规则需要写多条
–include 选项通常需要配合–exclude同时使用
过滤规则比较多可以写在文件里读取,由于rsync不支持正则表达式,复杂的逻辑建议先使用bash shell过滤
Basically, first include all directories, then exclude all files.
rsync -a --include='*/' --exclude='*' source/ destination/
https://rsync.samba.org/documentation.html
1 | mkdir -p /data/test_backup/gop-live-msdk_api |
rsync常见错误
1 | rsync: failed to connect to 192.168.205.135 (192.168.205.135): No route to host (113) |
解决:防火墙问题,放行端口或直接关闭
1 | @ERROR: auth failed on module rsync_test |
解决:用户名与密码问题或模块问题,检查用户名与密码是否匹配,服务器端模块是否存在
1 | rsync: read error: Connection reset by peer (104) |
解决:服务器端配置文件 /etc/rsyncd.conf 问题,检查配置文件参数是否出错
参考文章
Rsync+Inotify 文件自动同步,推荐使用lsyncd+rsync
sersync 基于 rsync+inotify 实现数据实时同步: https://wsgzao.github.io/post/sersync/
CentOS7 部署 lsyncd+rsync 实现服务器文件实时同步: https://www.xiebruce.top/919.html
---------------------
使用rsync快速同步与备份服务器数据
在重新研究备份方案时,发现了rsync。与rclone兼容已有协议/服务不同,它是一个CS架构的软件,需要在客户机和服务器上同时部署,虽然增加了一些服务器的负载,不过带来的优势却是很明显的,可以通过数据压缩等各种优化来加快同步。rsync是直接同步文件系统的,有更高的效率。而且,rsync是基于时间戳和文件大小来检查文件是否一致的,这样在文件系统只发生少量变动的情况下在极短的时间内就可以完成同步任务。(基于时间戳和文件大小的方法在原理上可能会出现实际文件发生改动但是时间戳和大小不变的情况,不过正常情况下不会出现这种情况,可以放心使用)
rsync是基于delta-transfer的差分同步方案,对于一些经常改变但是只有一小部分发生更新的大文件非常有效,比如说日志,在降低了网络通信开销的同时也加快了同步速度。此外,它是一个跨机的文件同步的工具,这样就可以异地备份,提高可靠性。
安装部署
rsync部署起来也很方便,直接 sudo apt install -y rsync
就可以了,然后在服务器上使用命令rsync --daemon
运行服务端。
配置和使用
首先要写一下配置文件。前面的部分是全局的配置,后面可以针对每一个子项进行配置,比如我们要同步/data
目录。
# /etc/rsyncd: configuration file for rsync daemon mode |
保存为/data/rsync/config/rsyncd.conf
文件。
再创建一个/data/rsync/config/rsyncd.secrets
文件,文件内容是用户和秘钥,建议设置的复杂一点,文件格式如下:
user1:password1 |
你可以在这里找到完整的配置项和含义。
启动服务端
服务端需要暴露873端口用于请求处理和数据传输。
如果自己在宿主机上配置的话,需要主要秘钥文件的权限一定要是600
,否则会被忽略,你也可以在日志文件里看到提示。
chmod 600 /etc/rsyncd.user1.secret |
安全性
rsync提供了急于账号/秘钥的验证方式,同时也可以配置允许的客户端ip,在数据链路安全上,rsync可以采用基于ssh协议的传输方式(本文没有涉及),基本可以保证安全性。
不过ssh协议容易被检测,直接将rsync服务暴露在公网也有一定的隐患,我的方案是利用已有的内网代理v2ray,然后让rsync走代理,这样即便是rsync的验证存在问题,也可以保证安全。要让rsync走代理,只需要在客户端命令前面加上 RSYNC_PROXY=localhost:8118
即可,http协议,不用写。
参考
-----------------
https://briteming.blogspot.com/2011/11/rsync.html
http://briteming.blogspot.com/2012/11/rsync_2.html