首页 > 代码库 > Linux命令之文件同步、定时备份 -rsync,cron,crontab
Linux命令之文件同步、定时备份 -rsync,cron,crontab
一、rsync介绍(可忽略)
Rsync(remote synchronize)是一个远程文件同步工具;
Rsync使用“Rsync算法”来同步文件,该算法只传送两个文件的不同部分,因此速度相当快;
Rsync是替代rcp的一个工具,目前由rsync.samba.org维护,因而rsync.conf文件的格式类似于samba的主配置文件;
Rsync可通过rsh或ssh使用,也能以daemon模式运行,以daemon方式运行时,Rsync Server会打开一个873端口等待客户端连接.连接时,Rsync Server会检查口令是否相符,若口令相符,则进行文件传输.第一次会把整份文件传输一次,以后则为增量传输;
Rsync支持大多数的类Unix系统(Linux、Solaris、BSD等);此外,在windows平台也有相应的版本,如cwRsync和Sync2NAS等工具;
二、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 递归模式;
-l 保持符号连接;
-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的介绍和使用,会在其他博文中介绍,未完待续)