linux下的数据备份工具rsync

Rsync 是一个 Unix 系统下的文件同步和传输工具。Rsync不只能够远程同步数据(相似于scp),固然还能够本地同步数据(相似于cp),但不一样于cp或scp的一点是,rsync不像cp/scp同样会覆盖之前的数据(若是数据已经存在),它会先判断已经存在的数据和新数据有什么不一样,只有不一样时才会把不一样的部分覆盖掉。linux

1,linux安装rsnyncvim

# yum install -y rsync

启动rsync安全

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

2,rsync的经常使用选项bash

-a 归档模式,表示以递归方式传输文件,并保持全部属性,等同于-rlptgoD, -a选项后面能够跟一个 --no-OPTION 这个表示关闭-rlptgoD中的某一个例如 -a--no-l 等同于-rptgoD服务器

-r 对子目录以递归模式处理,主要是针对目录来讲的,若是单独传一个文件不须要加-r,可是传输的是目录必须加-r选项ssh

-v 打印一些信息出来,好比速率,文件数量等ide

-l 保留软链结工具

-L 向对待常规文件同样处理软链结,若是是SRC中有软链接文件,则加上该选项后将会把软链接指向的目标文件拷贝到DST测试

-p 保持文件权限ui

-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       本地拷贝

# 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

# rsync -av 123.txt /tmp/234.txt


远程拷贝,(1个冒号)就属于经过ssh的方式拷贝

rsync [OPTION]... SRC [USER@]HOST:DEST        远程拷贝 本地->远程

# 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        远程拷贝 远程->本地

# rsync -av  192.168.0.101:/data/123.txt  /tmp


经过ssh方式远程拷贝,若是想不用手动输入密码,那么须要使用ssh的密钥对。

ssh的无密码登录:

制做认证文件

1:公钥  rsa.pub

2:私钥  rsa

# 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 

# 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的身份拷贝的,如今已经不须要输入密码了。

相关文章
相关标签/搜索