rsync(Remote Sync,远程同步)
是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。
在远程同步任务中,负责发起rsync同步操作的客户机称为起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源。在同步过程中,同步源负责提供文件的原始位置,发起端应对该位置具有读取权限。
配置rsync源服务器
发起端:
基本格式:rsync [选项] 原始位置 目标位置 |
常用选项
-r | 递归模式,包含目录及子目录中的所有文件 |
-l | 对于符号链接文件仍然复制为符号链接文件 |
-v | 显示同步过程的详细信息 |
-z | 在传输文件时进行压缩 |
-a | 归档模式,保留文件的权限、属性等信息,等同于组合选项“-rlptgoD” |
-p | 保留文件的权限标记 |
-t | 保留文件的时间标记 |
-g | 保留文件的属组标记(仅超级用户使用) |
-o | 保留文件属主标记(仅超级用户使用) |
-H | 保留硬连接文件 |
-A | 保留ACL属性信息 |
-D | 保留设备文件及其他特殊文件 |
--delete | 删除目标位置有而原始位置没有的文件 |
--checksum | 根据校验和(而不是文件大小、修改时间)来决定是否跳过文件 |
##免交互格式配置
rsync实时同步:
定期同步的不足:
- 执行备份的时间固定,延迟明显、实时性差
- 当同步源长期变化时,密集的定期任务是不必要的
实时同步的优点:
- 一旦同步源出现变化,立即启动备份
- 只要同步源无变化,则不执行备份
发起端配置rsync+inotify
使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便的实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
将inotify机制与rsync工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生改变,则立即启动增量备份操作:否则处于静默等待状态。这样,就避免了按固定周期备份时存在的延迟性、周期过密等问题。
因为inotify通知机制有Linux内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步。
2、调整inotify内核参数
在Linux内核中,默认的inotify机制提供了三个调整参数:max_queue_events(监控事件队列,默认值为16384)、max_user_instances(最多监控实例数,默认值128)、max_user_watches(每个实例最多监控文件数,默认值8192)。当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。
3、安装inotify-tools
用inotify机制还需要安装inotify-tools,以便提供inotifywait、inotifywatch辅助工具程序,用来监控、汇总改动情况。notifywait:可监控modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件,一有变动立即输出结果。inotifywatch:可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。
- 选项-e:用来指定要监控那些事件
- 选项-m:表示持续监控
- 选项-r:表示递归整个目录
- 选项-q:简化输出信息
4、在另外一个终端编写触发式同步脚本
使用rsync来实现快速删除大量文件
rm -rf * 删除大量文件可能需要很长时间,rsync可以巧妙的处理,rsync实际用的是替换的原理
选项说明:
- --delete-before:接受者在传输进行删除操作
- -a:归档模式,表示以递归方式传输文件,并保持所有文件属性
- -H:保持硬连接的文件
- -v:详细输出模式
- --progress:在传输时显示传输过程
- --stats:给出某些文件的传输状态