知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

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

发布时间:2014-09-05 17:40:15作者:知识屋

一、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的介绍和使用,会在其他博文中介绍,未完待续)

(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜