inux下的数据备份工具rsync.docx
- 文档编号:27415457
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:26
- 大小:28.88KB
inux下的数据备份工具rsync.docx
《inux下的数据备份工具rsync.docx》由会员分享,可在线阅读,更多相关《inux下的数据备份工具rsync.docx(26页珍藏版)》请在冰豆网上搜索。
inux下的数据备份工具rsync
linux下的数据备份工具rsync¶
数据备份,毫无疑问很重要。
阿铭就曾经有过一次非常痛苦的经历,备份策略没有做好,结果磁盘坏掉数据丢失,简直是撕心裂肺的痛呀。
还好数据重要性不是特别高,即使是不高也是丢失了数据,这是作为系统管理员最不应该出现的事故。
所以,在你以后的系统维护工作中,一定要把数据备份当回事,认真对待。
在linux系统下数据备份的工具很多,但阿铭就只用一种那就是rsync.从字面上的意思你可以理解为remotesync(远程同步)这样可以让你理解的更深刻一些。
Rsync不仅可以远程同步数据(类似于scp[1]),当然还可以本地同步数据(类似于cp),但不同于cp或scp的一点是,rsync不像cp/scp一样会覆盖以前的数据(如果数据已经存在),它会先判断已经存在的数据和新数据有什么不同,只有不同时才会把不同的部分覆盖掉。
如果你的linux没有rsync命令请使用yuminstall-yrsync安装。
下面阿铭先举一个例子,然后再详细讲解rsync的用法:
[root@localhost~]#rsync-av123.txt/tmp/
sendingincrementalfilelist
123.txt
sent71bytesreceived31bytes204.00bytes/sec
totalsizeis0speedupis0.00
上面例子表示把当前目录下的123.txt同步到/tmp/目录下,也可以更改目标文件的名字,rsync-av123.txt/tmp/234.txt如果是远程拷贝的话就是这样的形式了:
IP:
path(如:
10.0.2.34:
/root/)
[root@localhost~]#rsync-av123.txt192.168.0.101:
/data/
Theauthenticityofhost'192.168.0.101(192.168.0.101)'can'tbeestablished.
RSAkeyfingerprintisb4:
54:
5f:
73:
ec:
c2:
60:
5f:
c3:
79:
c0:
f9:
51:
e9:
ac:
e5.
Areyousureyouwanttocontinueconnecting(yes/no)?
yes
Warning:
Permanentlyadded'192.168.0.101'(RSA)tothelistofknownhosts.
root@192.168.0.101'spassword:
首次连接会提示是否要继续连接,我们输入yes继续,当建立连接后,需要输入密码。
如果手动去执行这些操作还好,但若是写在脚本中怎么办?
这就涉及到添加信任关系了,该部分内容稍后会详细介绍。
1.rsync的命令格式
rsync[OPTION]...SRCDEST
rsync[OPTION]...SRC[USER@]HOST:
DEST
rsync[OPTION]...[USER@]HOST:
SRCDEST
rsync[OPTION]...[USER@]HOST:
:
SRCDEST
rsync[OPTION]...SRC[USER@]HOST:
:
DEST
阿铭在一开始举的两个例子,第一个例子即为第一种格式,第二个例子即为第二种格式,但不同的是,阿铭并没有加user@host如果不加默认指的是root.第三种格式是从远程目录同步数据到本地。
第四种以及第五种格式使用了两个冒号,这种方式和前面的方式的不同在于验证方式不同,稍后详细介绍。
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还新的文件排除掉,不会覆盖
选项确实有点多,不过不用担心,阿铭工作这么多年,常用的选项页仅仅那么几个:
(-a-v--delete--exclude),请熟记他们吧。
下面阿铭将会针对这些选项做一些列小实验:
1)建立目录以及文件:
[root@localhost~]#mkdirrsync
[root@localhost~]#cdrsync
[root@localhostrsync]#mkdirtest1
[root@localhostrsync]#cdtest1
[root@localhosttest1]#touch123
[root@localhosttest1]#ln-s/root/123.txt./123.txt
[root@localhosttest1]#ls-l
总用量0
-rw-r--r--1rootroot06月1012:
581
lrwxrwxrwx1rootroot136月1012:
59123.txt->/root/123.txt
-rw-r--r--1rootroot06月1012:
582
-rw-r--r--1rootroot06月1012:
583
[root@localhosttest1]#cd..
阿铭建立这些文件的目的就是为做试验做一些准备工作。
2)使用-a选项
[root@localhostrsync]#rsync-atest1test2
[root@localhostrsync]#lstest2
test1
[root@localhostrsync]#lstest2/test1/
1123.txt23
这里有一个问题,就是本来想把test1目录直接拷贝成test2目录,可结果rsync却新建了test2目录然后把test1放到test2当中。
为了避免这样的情况发生,可以这样做:
[root@localhostrsync]#rm-rftest2
[root@localhostrsync]#rsync-atest1/test2/
[root@localhostrsync]#ls-ltest2/
总用量0
-rw-r--r--1rootroot06月1012:
581
lrwxrwxrwx1rootroot136月1012:
59123.txt->/root/123.txt
-rw-r--r--1rootroot06月1012:
582
-rw-r--r--1rootroot06月1012:
583
加一个斜杠就好了,所以阿铭建议你在使用rsync备份目录时要养成加斜杠的习惯。
在上面讲了-a选项等同于-rlptgoD,而且-a还可以和--no-OPTIN一并使用。
下面看看-l选项的作用:
[root@localhostrsync]#rsync-av--no-ltest1/test2/
sendingincrementalfilelist
createddirectorytest2
./
1
skippingnon-regularfile"123.txt"
2
3
sent200bytesreceived72bytes544.00bytes/sec
totalsizeis13speedupis0.05
使用-v选项看来就是方便呀,上例告诉我们跳过了非普通文件123.txt,其实123.txt是一个软连接文件,如果不使用-l选项则不理会软连接文件的。
虽然加上-l选项会把软连接文件给拷贝过去,但是软连接的目标文件却没有拷贝过去,有时候咱们指向拷贝软连接文件所指向的目标文件,那这时候该怎么办呢?
3)使用-L选项
[root@localhostrsync]#rsync-avLtest1/test2/
sendingincrementalfilelist
createddirectorytest2
./
1
123.txt
2
3
sent231bytesreceived91bytes644.00bytes/sec
totalsizeis0speedupis0.00
[root@localhostrsync]#ls-ltest2/
总用量0
-rw-r--r--1rootroot06月1012:
581
-rw-r--r--1rootroot06月1012:
39123.txt
-rw-r--r--1rootroot06月1012:
582
-rw-r--r--1rootroot06月1012:
583
加上-L选项就可以把SRC中软连接的目标文件给拷贝到DST.
4)使用-u选项
首先查看一下test1/1和test2/1的创建时间(肯定是一样的),然后使用touch修改一下test2/1的创建时间(此时test2/1要比test1/1的创建时间晚了一些),如果不加-u选项的话,会把test2/1的创建时间变成和test1/1的创建时间一样。
这样讲也许你会迷糊,不妨看一看:
[root@localhostrsync]#lltest1/1test2/1
-rw-r--r--1rootroot06月1012:
58test1/1
-rw-r--r--1rootroot06月1012:
58test2/1
两者之间的创建时间是一样的,下面修改test2/1的创建时间,然后不加-u同步:
[root@localhostrsync]#touchtest2/1
[root@localhostrsync]#lltest2/1
-rw-r--r--1rootroot06月1013:
20test2/1
[root@localhostrsync]#rsync-atest1/1test2/
[root@localhostrsync]#lltest2/1
-rw-r--r--1rootroot06月1012:
58test2/1
test2/1的创建时间又变成和test1/1的创建时间一样了。
下面加上-u再看看结果是怎么样的:
[root@localhostrsync]#touchtest2/1
[root@localhostrsync]#lltest2/1
-rw-r--r--1rootroot06月1013:
31test2/1
[root@localhostrsync]#rsync-avutest1/test2/
sendingincrementalfilelist
./
123.txt->/root/123.txt
sent100bytesreceived18bytes236.00bytes/sec
totalsizeis13speedupis0.11
[root@localhostrsync]#lltest2/1
-rw-r--r--1rootroot06月1013:
31test2/1
[root@localhostrsync]#lltest1/1
-rw-r--r--1rootroot06月1012:
58test1/1
加上-u选项后,不会再把test1/1同步为test2/1了,现在你明白-u选项的妙用了吧。
5)使用--delete选项
首先删除test1/123.txt:
[root@localhostrsync]#rm-ftest1/123.txt
[root@localhostrsync]#lstest1/
123
然后把test1/目录同步到test2/目录下:
[root@localhostrsync]#rsync-avtest1/test2/
sendingincrementalfilelist
./
1
sent94bytesreceived34bytes256.00bytes/sec
totalsizeis0speedupis0.00
[root@localhostrsync]#lstest2/
1123.txt23
test2/目录并没有删除掉123.txt,下面加上--delete选项:
[root@localhostrsync]#rsync-av--deletetest1/test2/
sendingincrementalfilelist
deleting123.txt
sent52bytesreceived12bytes128.00bytes/sec
totalsizeis0speedupis0.00
[root@localhostrsync]#lstest2/
123
test2/目录里的123.txt也被删除了,这就是--delete选项的用处。
还有一种情况就是如果在DST增加文件了,而SRC当中没有这些文件,同步时加上--delete选项后同样会删除新增的文件:
[root@localhostrsync]#touchtest2/4
[root@localhostrsync]#lstest1/
123
[root@localhostrsync]#lstest2/
1234
[root@localhostrsync]#rsync-a--deletetest1/test2/
[root@localhostrsync]#lstest1/
123
[root@localhostrsync]#lstest2/
123
6)使用--exclude选项
[root@localhostrsync]#touchtest1/4
[root@localhostrsync]#rsync-a--exclude="4"test1/test2/
[root@localhostrsync]#lstest1/
1234
[root@localhostrsync]#lstest2/
123
另外还可以使用匹配字符*
[root@localhostrsync]#touchtest1/1.txttest1/2.txt
[root@localhostrsync]#lstest1/
11.txt22.txt34
[root@localhostrsync]#rsync-a--progress--exclude="*.txt"test1/test2/
sendingincrementalfilelist
./
4
0100%0.00kB/s0:
00:
00(xfer#1,to-check=0/5)
sent104bytesreceived34bytes276.00bytes/sec
totalsizeis0speedupis0.00
[root@localhostrsync]#lstest2/
1234
上例中,阿铭也连带着使用了--progress选项,这个主要是用来观察rsync同步过程的状态的。
最后简单总结一下,平时你使用rsync同步数据的时候,使用-a选项基本上就可以达到我们想要的效果了,只是有时候会有个别的需求,会用到-a--no-OPTION,-u,-L,--delete,--exclude以及progress这些选项,还有些选项阿铭都没有介绍,如果在以后的工作中遇到特殊需求了,就去查一下rsync的man文档吧。
3.rsync应用实例
1)通过ssh的方式
最上面介绍的5种方式当中,第二、第三(1个冒号)就属于通过ssh的方式,这种方式其实就是让用户去登录到远程机器,然后执行rsync的任务。
[root@localhostrsync]#rsync-avLtest1/www@192.168.0.101:
/tmp/test2/
www@192.168.0.101'spassword:
sendingincrementalfilelist
createddirectory/tmp/test2
./
1
1.txt
2
2.txt
3
4
sent327bytesreceived129bytes182.40bytes/sec
totalsizeis0speedupis0.00
这种方式就是前面介绍的第二种方式了,是通过ssh拷贝的数据,需要输入192.168.0.101那台机器www账户的密码。
当然也可以使用第三种方式拷贝:
[root@localhostrsync]#rsync-avLwww@192.168.0.101:
/tmp/test2/./test3/
www@192.168.0.101'spassword:
receivingincrementalfilelist
createddirectory./test3
./
1
1.txt
2
2.txt
3
4
sent128bytesreceived351bytes38.32bytes/sec
totalsizeis0speedupis0.00
以上两种方式如果写到脚本里,备份起来就有麻烦了,因为要输入密码,脚本本来就是自动的,不可能做到的。
但是不代表没有解决办法。
那就是通过密钥验证,密钥不设立密码就ok了。
还记得在前面阿铭曾经介绍过通过密钥登录远程主机吗,下面要讲的内容就是那些东西了。
在操作之前我们先讲明主机信息:
192.168.0.10(主机名Aming-1)和192.168.0.101(主机名Aming)需要从Aming-1上拷贝数据到Aming上。
首先确认一下Aming-1上是否有这个文件/root/.ssh/id_rsa.pub:
[root@Aming-1~]#ssh-keygen
Generatingpublic/privatersakeypair.
阿铭之前生成过密钥对,所以这个文件已经存在了,如果你的Linux不存在这个文件,请按照如下方法生成:
[root@Aming-1~]#ssh-keygen
Generatingpublic/privatersakeypair.
Enterfileinwhichtosavethekey(/root/.ssh/id_rsa):
Enterpassphrase(emptyfornopassphrase):
Entersamepassphraseagain:
Youridentificationhasbeensavedin/root/.ssh/id_rsa.
Yourpublickeyhasbeensavedin/root/.ssh/id_rsa.pub.
Thekeyfingerprintis:
3b:
74:
af:
e8:
08:
ac:
99:
30:
3f:
ef:
84:
7a:
a0:
a6:
3d:
89root@Aming-1
在这个过程中会有一些交互的过程,它首先提示要输入这个密钥的密码,出于安全考虑应该定义个密码,但是我们的目的就是为了自动化同步数据,所以这里不输入任何密码,直接按回车,即密码为空。
最后则生成了私钥(/root/.ssh/id_rsa)和公钥文件(/root/.ssh/id_rsa.pub)
把公钥文件的内容拷贝到目标机器上:
[root@Aming-1~]#cat.ssh/id_rsa.pub
ssh-rsaAAAAB3NzaC1yc2EAAAABIwAAAQEA5SPyJ/kliGTAMUan/GCN325VS8jMxvOn4uQoLU/NqBpCI3MrmvSucv6EAzxx1J2uOssW08el06LG+cUwXmm5mkqDRBV6C9qNnR/bVV5vr3QsUwbKPr7fdyJvruQWWR7cSL+mjP0SYmG2Qy2JcM3hl1IZArzC6yeUnq2Gwbax8LgbZE3XfRfOYdimwyh5Tfft7yLYipWc37k+oRUWkI3mW7PalsOlfQhxrLD/lS891y6RdSbGxMJWPoV0KMFbVh+uJgyAXpeuWl+F+/iuQPzb6w3h4pWI31bvbsE9BU82jSzHYEjpq3SN2MJN2vaLs5a0mVpm9zka/h4ITFB8Uy1iSQ==root@Aming-1
复制主机Aming-1的/root/.ssh/id_rsa.pub文件内容,并粘贴到主机Aming的/home/www/.ssh/authorized_keys中:
[root@Aming~]#vim/home/www/.ssh/authorized_keys
在这一步也许你会遇到/home/www/.ssh目录不存在的问题,可以手动创建,并修改目录权限为700也可以执行ssh-keygen命令生成这个目录。
保存/home/www/.ssh/authorized_keys文件后,再到主机Aming-1上执行:
[root@Aming-1~]#sshwww@192.168.0.101
Lastlogin:
WedJun1212:
24:
342013from192.168.0.10
[www@Aming~]$
现在不用输入密码也可以登录主机Aming了。
下面先从Aming主机退出来,再从主机Aming-1上执行一下rsync命令试试吧。
[root@Aming-1~]#rsync-avrsync/test1/www@192.168.0.101:
/tmp/test4/
sendingincrementalfilelist
createddir
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- inux 数据 备份 工具 rsync