首页 > 代码库 > Linux命令之文件同步、定时备份 -rsync,cron,crontab

Linux命令之文件同步、定时备份 -rsync,cron,crontab

一、rsync介绍(可忽略)

Rsyncremote synchronize)是一个远程文件同步工具;

Rsync使用“Rsync算法来同步文件,该算法只传送两个文件的不同部分,因此速度相当快;

Rsync是替代rcp的一个工具,目前由rsync.samba.org维护,因而rsync.conf文件的格式类似于samba的主配置文件;

Rsync可通过rshssh使用,也能以daemon模式运行,daemon方式运行时,Rsync Server会打开一个873端口等待客户端连接.连接时,Rsync Server会检查口令是否相符,若口令相符,则进行文件传输.第一次会把整份文件传输一次,以后则为增量传输;

Rsync支持大多数的类Unix系统(LinuxSolarisBSD);此外,windows平台也有相应的版本,cwRsyncSync2NAS等工具;



二、rsync安装(可忽略)

Linux发行版默认已经安装rsync工具,如果想自行安装,可以参考如下安装步骤:

#网 http://rsync.samba.org/ 上下载 rsync-3.1.0.tar.gz

tar -zxvf rsync-3.1.0.tar.gz

cd rsync-3.1.0

./configure -prefix=/opt/app/rsync

make

make install


#此时,安装完成,将 /opt/app/rsync/bin 增加到PATH;



rsync 一般使用

命令行使用rsync语法

$ rsync <dir_name> <remote_ip>:<dir_name>

 

实际使用中,根据不同的情况使用下面的格式

#同步文件夹到远程

rsync -avI dir_name remote_ip:dir_name

 

#同步文件夹到远程,传输时进行压缩

rsync -avzI dir_name remote_ip:dir_name

 

#同步文件夹到远程(保持严格同步,即本地删除,远程也同步删除)

rsync -avzI –-delete dir_name remote_ip:dir_name

 

#排除指定的文件或目录,可多次使用,支持通配符(比如.svn.git等目录)

rsync -avzI --exclude=/a/b/*.svn --exclude=/a/b/*.git dir_name remote_ip:dir_name

 

#当排除的文件较多时,可将文件写到某文件中,同时使用 --exclude-from 指定该文件即可。

rsync -avzI --exclude-from=/a/exclude_file_list.txt dir_name remote_ip:dir_name

 

以上使用的选项说明如下:

-a, --archive 归档模式,等于-rlptgoD;

-r, --recursive 递归模式;

-保持符号连接;

-p 保持文件原有权限;

-t 保持文件原有修改时间;

-g 保持文件原有用户组;

-o 保持文件原有属主;

-D -devices -specials,保持块设备文件和特殊文件;

 

-I 强制扫描,放弃“quick check”策略(quick check策略,通过查看文件的时间戳和文件大小,先排除一批认为相同的文件[rsync不会对文件夹本身做“quick check”]);

-z, --compress 压缩,默认的压缩算法和gzip一样;

-v, --verbose 显示进度详细信息;

-q, --quiet 精简输出模式;

-R, --relative 保持全路径;

--progress  显示传输进度(百分百);

--delete 本地删除一文件,远程也同步的删除该文件,保持严格的一致(不加该参数,则表示只增不减);

--exclude="*.tmp" 排除某些文件;

--exclude-from=FILE 排除FILE中指定模式的文件;

--port=PORT 指定其他的rsync服务端口;

 

注意:

就路径格式而言,如果源路径末尾使用/,rsync会将源路径尾端目录中的所有内容复制到目的端;如果没有使用/,rsync会将源路径尾端目录本身复制到目的端。

$ rsync -av /home/test/ /home/backup; #test目录中的内容备份;

$ rsync -av /home/test /home/backup; #test目录本身备份;

如果目的路径末尾使用/,rsync会将来自源端的内容复制到目的端的目录中;如果没有使用/,rsync会在目的端路径尾部创建一个和目的端尾部目录同名的目录,并将源端内容复制到该目录中。

$ rsync -av /home/test /home/backup/; #将源端内容复制到backup目录中;

$ rsync -av /home/test /home/backup; #/home/backup创建下级目录backup,并将源端内容复制到/home/backup/backup目录中;

 

该部分内容参考http://roclinux.cn/?p=2643



四、rsync结合crontab实现定时备份
关于crontab的介绍和简单使用,可参考另一篇博文:http://blog.csdn.net/wangjunjun2008/article/details/19497803

#创建crontab定时任务,调用rsync命令进行定时备份:

$ crontab -e

0 1 * * * rsync -avzI dir_name remote_ip:dir_name

#每晚1点进行数据备份

注意:需要建立本地服务器和远程服务器的信任,以便于实现免登录操作(相关内容可参考http://blog.csdn.net/wangjunjun2008/article/details/20037101)



五、rsync高级用法(使用rsyncd服务进行定时备份)

使用crontab的方式实现定时备份虽然可行,但却不是正统的方法;规范、流行的rsync定时备份方案是使用rsyncd服务实施定时备份策略.

(此部分没有深入学习,未完待续)



六、定时备份不能完成的任务

定时备份虽好,却不能完成全部的备份任务假如需要实时同步一些数据(任意时间点,本地数据的改变,都能及时同步到远程服务器),使用定时备份的话,会存在时间差(在这个时间段内,数据不同步),解决此类问题的方法是:结合 inotify 工具来实现实时备份策略。

 

(关于inotify的介绍和使用,会在其他博文中介绍,未完待续)