您的位置:首页 > 运维架构 > Linux

Linux系统日常管理之rsync备份工具

2015-06-11 12:50 721 查看
rsync备份工具

一、scp
scp备份工具不可以进行增量备份

1、安装scp
[root@chenglinux ~]# yum install -y openssh-clients

2、scp -r 192.168.21.98:/tmp/a/ ./a/

从远程主机把/tmp/下面的a目录拷贝到当前目录下
-r:以递归方式复制

3、[root@chenglinux cheng]# scp 1.txt 192.168.21.98:/root/cheng/
把当前目录下的文件拷贝到远处主机的/root/cheng/目录下

4、[root@chenglinux cheng]# scp 1.txt cheng@192.168.21.98:/tmp/cheng/
把1.txt文件拷贝到远程主机cheng这个用户下

5、如果省略掉用户名,那么就会拷贝到当默认的用户下,就是这边是用的什么用户进行拷贝的,
那么复方也就会是同样的账户。如果对方主机没有那个用户,那么久拷贝不成功

6、scp -r a/ 192.168.21.98:/tmp/b/

把a目录下的文件拷贝到远程主机b目录下,而不是把a目标拷贝到b目录下

二、rsync备份工具,可以把文件拷贝到远程主机,可以支持增量备份

1、默认没有安装,需要安装:
[root@linux2 ~]# yum install -y rsync
同时还要安装:openssh-clients不然无法执行
2、rsync 命令格式
rsync [OPTION]... SRC DEST
rsync -av 123.txt /tmp/把123.txt同步到/tmp目录下
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync -av 123.txt 192.168.0.101:/data/
把123.txt文件同步到192.168.0.101机器的/data/目录下
rsync [OPTION]... [USER@]HOST:SRC DEST

rsync 用户名@ip地址:/tmp/1.txt /tmp/1.txt
把远程主机/tmp/1.tx文件同步到本地来
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST

这两种使用了两个冒号,这种方式和前面的方式的不同在于验证方式不同,稍后写到

rsync -av usr/ /tmp/123/

把user目录拷贝的tmp下面,别切改名为123

SRC:src是source的缩写,也就是源代码的意思。在这里表示的是源文件地址
-a:同步数据时一定要保证数据原来的属性不会改变

三、 rsync常用选项
-a 归档模式,表示以递归方式传输文件,并保持所有属性,等同于-rlptgoD, -a选项后面可以跟一个 --no-OPTION 这个表示关闭-rlptgoD中的某一个例如-a--no-l 等同于-rptgoD
-r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项
-v 打印一些信息出来,比如速率,文件数量等
-l 保留软链结
-L 向对待常规文件一样处理软链接,如果是SRC中有软链接文件,则加上该选项后将会把软链接指向的目标文件拷贝到DST,等于是把真正的文件也拷贝过去了
-p 保持文件权限
-o 保持文件属主信息
-g 保持文件属组信息
-D 保持设备文件信息
-t 保持文件时间信息
-z 在拷贝的时候进行压缩
--delete 删除那些DEST中有,但是SRC没有的文件

--exclude=PATTERN 指定排除不需要传输的文件,等号后面跟文件名,可以是万用字符模式(如*.txt)
rsync -av --exclude="*.txt" usr/ /tmp/123/ #同步的时候排除掉以.txt结尾的文件。
过滤多个文件时,在-av后面直接添加--exclude="文件类型或者名称"就可以了

--progress 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等
可以写成这样:rsync -avP usr/ /tmp/123/

--bwlimit=100:控制同步带宽,100指的是速度,可以根据实际情况来写

-u 加上这个选项后将会把DEST中比SRC还新的文件排除掉,不会覆盖
最常用的 -a -v --delete --exclude

-a --no-l -v:这个选项的作用就是在拷贝文件的时候不拷贝软连接文件

四、rsync选项讲解
1、rsync -av dir1/ dir2/ # 其中dir2/目录可以不存在,记得同步目录时一定要在末尾加上/
-a :会把软连接原原本本的拷贝过去
2、rsync -avL test1/ test2/ #加-L会拷贝软连接文件对应的源文件到目标目录里面

3、-u 选项的作用是,如果目标文件比源文件新,那么会忽略掉该文件

touch test2/1.txt; rsync -avu test1/ test2/
4、rsync -av --delete test1/ test2/ #这样会把test2/目录比test1/目录多出来的文件删除掉
5、rsync -a --exclude=“2.txt” test1/ test2/ #在同步的过程中,会忽略掉2.txt这个文件
6、rsync -a --progress --exclude=“*.txt” test1/ test2/ #--progress 显示同步过程的详细信息,--exclude后面也可以使用通配符*

五、 rsync应用实例 - ssh方式
rsync -avL test1/ www@192.168.0.101:/tmp/test2/
rsync -avL 192.168.0.101:/tmp/test2/ ./test3/
由于需要输入密码所以不适合写到脚本中,但可以通过创建秘钥对,让两台机器产生信任关系从而不用输入密码
1、在Linux2创建以下信息,需要注意的是在实验中,Linux2主机是服务端
[root@linux2 ~]# mkdir .ssh
[root@linux2 ~]# 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:
19:da:90:61:63:d7:94:65:7a:4d:ad:05:06:50:49:5a root@linux2
The key's randomart image is:
+--[ RSA 2048]----+
|      = .oo*Eo+o |
|     o =  o=.+  o|
|      o . o . .o |
|       + o .  .  |
|      . S        |
|                 |
|                 |
|                 |
|                 |
+-----------------+
[root@linux2 ~]# ls .ssh
id_rsa  id_rsa.pub  known_hosts
[root@linux2 ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxCPm8bVIQohY/JWI9KBaHtKb+W4TnNL3Xg12CFj+h52yu0ixvANj+qrSq8xCXD47gNALGt4jzMmGIZQ8TxfRjMyBdNtRWswQR1oxefabMuehwBwmSnMD2g9dzY8r8eKXIEBkSGk5uycPooZJbTfRd0XJEfZFqlhey3PEW9HoOslj/kOGLWPXOdIDLh0oRDZe2QP5KOvhw6NQdyLiJPvEptss4qWr2DsV5reCQW/L7yEi1gxkLSYeFew0Xsia58Hy3GnYLP8PYlcopWIs0oSMhvCLJr/xw7IXFhnWfZaH/Iho5JT+8VoBdao2AjMG5yrNi4OOpldn8VijVgOJ/gd78w== root@linux2
把秘钥复制到chenglinux机器上的/root/.ssh/authorized_keys文件中,如果chenglinux机器没有.ssh目录和authorized_keys文件需要创建。
2、由于chenglinx这个机器上没有.ssh目录和authorized_keys文件,所以需要创建
[root@chenglinux ~]# mkdir .ssh
[root@chenglinux ~]# chmod 600 .ssh/
[root@chenglinux ~]# touch .ssh/authorized_keys
[root@chenglinux ~]# vim .ssh/authorized_keys


3、在Linux2主机上测试登录chenglinx,结果显示已经不要输入密码了。
[root@linux2 ~]# ssh root@192.168.21.99
Last login: Wed Jun  3 14:36:35 2015 from 192.168.21.100
[root@chenglinux ~]#


4、测试rsync同步,也没有提示输入密码,所以成功了。
[root@linux2 ~]# rsync -av chengzelin.txt 192.168.21.99:/root/chengzelin.txt2
sending incremental file list
chengzelin.txt
sent 82 bytes  received 37 bytes  238.00 bytes/sec
total size is 78  speedup is 0.66
[root@linux2 ~]#
5、如果ssh端口不是22,那么需要写成这样的形式

rsync -av -e "ssh -p port” /dir1/ 192.168.0.101:/tmp/dir2/
6、sshd的配置文件位置

/etc/ssh/sshd_condfig
7、strace命令是用来追踪进程的,默认没有安装,需要安装

六、 rsync应用实例 - 后台服务方式
1、全局配置文件
配置文件 /etc/rsyncd.conf ,内容如下:
#port=873 #监听端口默认为873,也可以是别的端口
log file=/var/log/rsync.log #指定日志
pid file=/var/run/rsyncd.pid #指定pid
#address=192.168.0.10 #可以定义绑定的ip
2、模块内的设置
[test] #为模块名,自定义,模块可以有多个
path=/root/rsync # 指定该模块对应在哪个目录下
use chroot=true #是否限定在该目录下,默认为true,当有软连接时,需要改为fasle
max connections=4 # 指定最大可以连接的客户端数
read only=no #是否为只读
list=true #是否可以列出模块名
uid=root #以哪个用户的身份来传输
gid=root #以哪个组的身份来传输
auth users=test #指定验证用户名,可以不设置
secrets file=/etc/rsyncd.passwd #指定密码文件,如果设定验证用户,这一项必须设置
hosts allow=192.168.0.101 #设置可以允许访问的主机,可以是网段
需要注意的一点就是,一般只不需要指定用户名和设置密码,只需要指定hosts这个选项就可以
3、密码文件/etc/rsyncd.passwd的内容格式为:username:password
4、启动服务的命令是:rsync --daemon
5、rsync -av chengzelin.txt 192.168.21.99::test/4.txt

这个格式就是使用刚才设定的模块来同步文件,test就等于模块设置中的rsync目录,类似于一个别名(这里就用到了前面所提到的格式了,就是这个格式:rsync [OPTION]... [USER@]HOST::SRC DEST)

默认去使用/etc/rsyncd.conf这个配置文件,也可以指定配置文件 rsync --daemon --config=/etc/rsyncd2.conf
可使用的选项有: rsync --daemon --help
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux 主机 用户名 cheng