设为首页 收藏本站
查看: 165|回复: 0

[经验分享] linux下的数据备份工具rsync

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-6-11 08:59:46 | 显示全部楼层 |阅读模式
Rsync 是一个 Unix 系统下的文件同步和传输工具。Rsync不仅可以远程同步数据(类似于scp),当然还可以本地同步数据(类似于cp),但不同于cp或scp的一点是,rsync不像cp/scp一样会覆盖以前的数据(如果数据已经存在),它会先判断已经存在的数据和新数据有什么不同,只有不同时才会把不同的部分覆盖掉。

1,linux安装rsnync

1
# yum install -y rsync



启动rsync

1
# rsync --daemon --config=/etc/rsyncd.conf



2,rsync的常用选项

-a 归档模式,表示以递归方式传输文件,并保持所有属性,等同于-rlptgoD, -a选项后面可以跟一个 --no-OPTION 这个表示关闭-rlptgoD中的某一个例如 -a--no-l 等同于-rptgoD
-r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项
-v 打印一些信息出来,比如速率,文件数量等
-l 保留软链结
-L 向对待常规文件一样处理软链结,如果是SRC中有软连接文件,则加上该选项后将会把软连接指向的目标文件拷贝到DST
-p 保持文件权限
-o 保持文件属主信息
-g 保持文件属组信息
-D 保持设备文件信息
-t 保持文件时间信息
--delete 删除那些DST中SRC没有的文件
--exclude=PATTERN 指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)
--progress 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等
-u 加上这个选项后将会把DST中比SRC还新的文件排除掉,不会覆盖

3,rsync语法

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


举例:
本地拷贝:
rsync [OPTION]... SRC DEST       本地拷贝
1
2
3
4
5
# rsync -av 123.txt /tmp/
sending incremental file list
123.txt
sent 71 bytes  received 31 bytes  204.00 bytes/sec
total size is 0  speedup is 0.00



上面例子表示把当前目录下的123.txt同步到/tmp/目录下。
也可以更改目标文件的名字,将123.txt 改为234.txt
1
# rsync -av 123.txt /tmp/234.txt




远程拷贝,(1个冒号)就属于通过ssh的方式拷贝
rsync [OPTION]... SRC [USER@]HOST:DEST        远程拷贝 本地->远程
1
2
3
4
5
6
# rsync -av 123.txt 192.168.0.101:/data/
The authenticity of host '192.168.0.101 (192.168.0.101)' can't be established.
RSA key fingerprint is b4:54:5f:73:ec:c2:60:5f:c3:79:c0:f9:51:e9:ac:e5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.101' (RSA) to the list of known hosts.
root@192.168.0.101's password:



没有加user@host 如果不加默认指的是root.
首次连接会提示是否要继续连接,我们输入yes继续,当建立连接后,需要输入密码。如果手动去执行这些操作还好,但若是写在脚本中怎么办?这就涉及到添加信任关系了,该部分内容稍后会详细介绍。

rsync [OPTION]... [USER@]HOST:SRC DEST        远程拷贝 远程->本地
1
# rsync -av  192.168.0.101:/data/123.txt  /tmp




通过ssh方式远程拷贝,如果想不用手动输入密码,那么需要使用ssh的密钥对。
ssh的无密码登陆:
制作认证文件
1:公钥  rsa.pub
2:私钥  rsa
1
# ssh-keygen



一路回车

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:
51:e9:2a:a0:76:a2:ef:f2:51:88:52:ae:25:b8:5f:7c root@test1
# scp /root/.ssh/id_rsa.pub 192.168.0.101:/root/.ssh/authorized_keys     
把公钥发送给要远程的ip机器,改名为authorized_keys,然后ssh连接就不再需要密码验证了。

远程拷贝,(2个冒号)就属于通过后台服务的方式拷贝
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST

这种方式可以理解成这样,在远程主机上建立一个rsync的服务器,在服务器上配置好rsync的各种应用,然后本机作为rsync的一个客户端去连接远程的rsync服务器。下面介绍如何去配置一台rsync服务器。
1,建立并配置rsync的配置文件 /etc/rsyncd.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# vim /etc/rsyncd.conf
port=873
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
#address=192.168.0.10
[test]
path=/root/rsync
use chroot=true
max connections=4
ignore errors
read only=yes
list=true
uid=root
gid=root
auth users=test
secrets file=/etc/rsyncd.passwd
hosts allow=192.168.0.101



其中配置文件分为两部分:全部配置部分和模块配置部分,全局部分就是几个参数而已,就像上面的rsyncd.conf中port, log file, pid file, address这些都属于全局配置,而[test]以下部分就是模块配置部分了。一个配置文件中可以有多个模块,模块名自定义。其实模块中的一些参数例如use chroot, max connections, udi, gid, auth users, secrets file以及hosts allow都可以配置成全局的参数。上面的配置文件中给出的参数并不是所有的,你可以通过man rsyncd.conf 获得更多信息。下面就简单解释一下这些参数的意义:
port     指定在哪个端口启动rsyncd服务,默认是873
log file 指定日志文件
pid file 指定pid文件,这个文件的作用涉及到服务的启动以及停止等进程管理操作
address  指定启动rsyncd服务的IP,假如你的机器有多个IP,就可以指定其中一个启动rsyncd服务,默认是在全部IP上启动
[test] 指定模块名,自定义
path 指定数据存放的路径
use chroot true|false 默认是true,意思是在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true,如果你的数据当中有软连接文件的话建议设置成false。
max connections 指定最大的连接数,默认是0即没有限制
ignore errors  忽略同步中出现的错误
read only yes   定义访问方式为只读
list 指定当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐藏
uid/gid 指定传输文件时,以哪个用户/组的身份传输
auth users 指定传输时要使用的用户名
secrets file 指定密码文件,该参数连同上面的参数如果不指定则不使用密码验证
hosts allow 指定被允许连接该模块的主机,可以是IP或者网段,如果是多个,之间用空格隔开

编辑rsyncd.passwd密码文件,格式为用户名:密码保存后要赋予600权限,如果权限不对,不能完成同步
# cat /etc/rsyncd.passwd
test:test123
修改权限

# chmod 600 /etc/rsyncd.passwd
启动rsyncd服务
# rsync --daemon --config=/etc/rsyncd.conf

到另一台机器上测试(必须得是hosts allow中允许连接的IP地址
# rsync -avL test@192.168.0.10::test /tmp/test5/
Password:
receiving incremental file list
created directory /tmp/test5
./
1
1.txt
2
2.txt
3
4
注意:这样同步还是需要输入密码,如果不想输入密码,有两个方法
方法一:同步命令指定密码文件
在客户端上(注意,并不是在rsync服务端上)编辑密码文件

vim /etc/pass   加入test用户的密码:
test123
修改密码文件的权限:(权限不对会报错)
# chmod 600 /etc/pass
在同步的时候,指定一下密码文件,就可以省去输入密码的步骤了:
# rsync -avL test@192.168.0.10::test /tmp/test8/ --password-file=/etc/pass
receiving incremental file list
created directory /tmp/test8
./
1
1.txt
2
2.txt
3
4
test.txt
sent 190 bytes  received 451 bytes  1282.00 bytes/sec
total size is 0  speedup is 0.00

方法二:在rsync服务器端不指定用户
在rsync服务端修改配置文件rsyncd.conf, 去掉关于认证账户的配置项(auth user 和 secrets file这两行):
# sed -i 's/auth users/#auth users/;s/secrets file/#secrets file/' /etc/rsyncd.conf
上面的这个命令是把 “auth users” 和 “secrets file” 两行的最前面加一个 “#”, 这样就把这两行注释掉,使其失去意义。然后我们再到客户端主机上测试:

# rsync -avL 192.168.0.10::test/test1/ /tmp/test9/
receiving incremental file list
created directory /tmp/test9
./
1
1.txt
2
2.txt
3
4
test.txt
sent 162 bytes  received 410 bytes  1144.00 bytes/sec
total size is 0  speedup is 0.00
注意,这里不用再加test这个用户了,默认是以root的身份拷贝的,现在已经不需要输入密码了。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-76100-1-1.html 上篇帖子: centos7设置rc.local文件使用 下篇帖子: Debian下怎样以不同颜色显示不同的文件或目录 linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表