Linux操作篇之备份(rsync)

一、rsync支持单向的完全备份和增量备份,两者各有优劣(双向数据同步差点)。rsync同步文件前需要先登录到目标主机进行用户身份验证,身份认证的协议可以使用ssh协议和rsync协议。当使用ssh协议时,使用的是Linux的系统用户;当使用rsync协议时,使用的是非系统用户(虚拟用户)。

二、rsync特性:

更新整个目录树和文件系统

可以有选择的保留符号链接、硬链接、文件属性、权限、设备以及时间等

安装时,无任何特殊权限要求

多文件传输效率高

可以使用ssh或自定义端口进行传输。

 

软件名称:rsync。

三、使用ssh协议进行数据传输:

使用普通系统用户,则需要普通用户对目录有相应的权限,可以使用acl赋予其用户权限

下载格式:rsync -avz  系统用户名@服务器地址:/服务器目录/*  /本地目录

-a  归档模式,递归并保留文件属性

-v  显示同步过程

-z  在进行文件传输时进行压缩

rsync2下载rsync1中的文件

 

 

 上传格式:rsync -avz    /本地目录  系统用户名@服务器地址:/服务器目录/*

rsync2中的文件上传到rsync1中

 

 

 

 可以使用密钥的形式进行免密操作。

ssh-keygen -t rsa -b 2048

 ssh-copy-id root@目标服务器地址

两台设备都需要操作,输入一次密码即可。再次传输时,不需输入密码。

 

 

 

四、使用rsync协议进行数据传输,这一项只需要在服务器端进行配置即可。

1、vi /etc/rsyncd.conf  配置主配置文件

address = 192.168.171.137    绑定服务器端地址
port 873              服务端口
log file = /var/log/rsyncd.log    日志的存放位置
pid = /var/run/rsyncd.pid       进程pid文件位置

[web]              共享名
        comment = backup       描述
        path = /test1         实际的文件目录
        read only = no        是否允许读取
        dont compress = *.gz *.bz2 *.zip  哪些文件不需要进行压缩传输
        auth users = zhangsan      虚拟用户名称
        secrets file = /etc/rsyncd_users.db  虚拟用户密码的存放位置及密码文件名称

2、vi /etc/rsyncd_users.db  编写用户及对应的密码

用户名:密码的形式

 

 

3、chmod  600 /etc/rsyncd_users.db  修改文件权限

4、rsync  --daemon   启动服务

5、映射用户对其备份的目录有权限

  setfacl -m u:nobody:rwx  /test1

6、测试

下载格式:rsync -avz  rsync://用户名@服务器端IP地址/共享名  /本地目录

上传格式:rsync -avz    /本地目录   rsync://用户名@服务器端IP地址/共享名 

 

 

 扩展:--delete 可以将服务器端中没有的,但是在客户端有的文件删除。

 

 

 若要想免密传输,则需要在客户端设置一环境变量。

export  RSYNC_PASSWORD=虚拟用户密码

 

 

 

 

五、rsync+inotifywait+脚本实现实时备份

1、下载安装inotifywait

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

yum -y install gcc*

tar xzf inotify-tools-3.14.tar.gz

./configure && make && make install
2、编写脚本  

#!/bin/bash
detection="inotifywait -mrq -e create,delete,modify /test1"    #检测/test1目录下,新建、删除、写入动作
action="rsync -avz  /test1/* root@192.168.171.138:/test2"    #将/test1目录下的文件传输到另外一台设备的/test2目录下,用户是root。也可以使用普通系统用户或虚拟用户

$detection | while read directory event file      #while判断是否收到监控记录

do
        $action
done     

需要做免密验证

 

六、实现双向数据传输(unsion+inotify)

需要软件包:unison-2.13.16.tar.gz   ocaml-3.10.0.tar.gz   inotify-tools-3.14.tar.gz

前两个软件一定要注意软件版本。我是centos7.5安装的,其他版本安装失败。

1、安装inotify-tools-3.14.tar.gz

yum -y install gcc*
tar -xzf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure && make && make install

 

2、安装ocaml-3.10.0.tar.gz (unison依赖此软件)

tar -xzf ocaml-3.10.0.tar.gz
cd ocaml-3.10.0
./configure   (** Objective Caml configuration completed successfully **  出现这个表示成功)
make world opt
make install

3、安装unison-2.13.16.tar.gz

tar -xzf unison-2.13.16.tar.gz
cd unison-2.13.16
make UISTYLE=text THREADS=true STATIC=true  (因为Makefile文件已经存在,不需要./configure。)
cp unison /usr/local/bin/
unison -version

 

 可以出现版本号,代表安装成功。同样的,另外一台也需要进行相同的安装即可。

 

4、编写脚本,使其可以自动检测文件变化,自动进行文件同步。

#!/bin/bash
detection="inotifywait -mrq -e create,delete,modify /test1"
action="/usr/local/bin/unison -bash /test1/  ssh://192.168.171.138//test2/"

$detection | while read directory event file

do
        $action
done    
脚本两边都是上面的代码,唯一不同点是:其中的 IP//目录 是对端的 IP//目录。

 

5、建立ssh互信。

ssh-keygen -t rsa -b 2048   (一直回车)

ssh-copy-id root@对端IP地址  (第一次需输入一次yes)

输入密码即可

6、测试

有时候在一端删除,另外一端还存在,这个没有影响,当下次同步的时候,会自动同步。

posted on 2021-11-02 20:36  沫仔  阅读(1145)  评论(0编辑  收藏  举报

导航