inotify介绍:
notify一种强大的、细粒度的、异步文件系统监控机制,它满足各种各样的文件监控需要,可以监控文件系统的访问属性、读写属性、
权限属性、删除创建移动等操作,也就是可以监控文件发生的一切变化,我们可以利用内核提供的这个属性,在文件发生任何变化时都
触发rsync同步动作,这样就做到数据的实时同步了。
Inotify的监控功能是需要内核支持的,Linux从kernel 2.6.13开始,Inotify功能正式加入内核,在RHEL5版本已经完全支持。
Rsync介绍:
1.1 软件简介
Rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync本来是用以取代rcp的一个工具,它当前由 rsync.samba.org维护。Rsync使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。运行Rsync server的机器也叫backup server,一个Rsync server可同时备份多个client的数据;也可以多个Rsync server备份一个client的数据。
Rsync可以搭配rsh或ssh甚至使用daemon模式。Rsync server会打开一个873的服务通道(port),等待对方Rsync连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
Rsync支持大多数的类Unix系统,无论是Linux、Solaris还是BSD上都经过了良好的测试。此外,它在windows平台下也有相应的版本,比较知名的有cwRsync和Sync2NAS。
Rsync的基本特点如下:
1.可以镜像保存整个目录树和文件系统;
2.可以很容易做到保持原来文件的权限、时间、软硬链接等;
3.无须特殊权限即可安装;
4.优化的流程,文件传输效率高;
5.可以使用rcp、ssh等方式来传输文件,当然也可以通过直接的socket连接;
6.支持匿名传输。
1.2 核心算法
假定在名为α和β的两台计算机之间同步相似的文件A与B,其中α对文件A拥有访问权,β对文件B拥有访问权。并且假定主机α与β之间的网络带宽很小。那么rsync算法将通过下面的五个步骤来完成:
1.β将文件B分割成一组不重叠的固定大小为S字节的数据块。最后一块可能会比S 小。
2.β对每一个分割好的数据块执行两种校验:一种是32位的滚动弱校验,另一种是128位的MD4强校验。
3.β将这些校验结果发给α。
4.α通过搜索文件A的所有大小为S的数据块(偏移量可以任选,不一定非要是S的倍数),来寻找与文件B的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。
5.α发给β一串指令来生成文件A在β上的备份。这里的每一条指令要么是对文件B经拥有某一个数据块而不须重传的证明,要么是一个数据块,这个数据块肯定是没有与文件B的任何一个数据块匹配上的。
1.3 命令语法
rsync的命令格式可以为以下六种:
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
对应于以上六种命令格式,rsync有六种不同的工作模式:
1)拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":"分隔符时就启动这种工作模式。
2)使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号":"分隔符时启动该模式。
3)使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号":"分隔符时启动该模式。
4)从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含"::"分隔符时启动该模式。
5)从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含"::"分隔符时启动该模式。
6)列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
Linux实时同步文件至Linux配置:
服务端配置【Linux】
1.到http://rsync.samba.org下载最新版本3.0.7
2.解压缩到/usr/local/rsync
3.编译 root@xiaoshan-desktop:/usr/local/rsync/rsync-3.0.7# ./configure –prefix=/usr/local/rsync && make && make install
4.配置/etc/rsyncd.conf
uid=root
gid=root
hosts allow=192.168.61.113,192.168.61.195
#hosts deny=0.0.0.0/32
use chroot=no
max connections=10
secrets file=/etc/rsyncd.pas
motd file=/etc/rsyncd.motd
pid file =/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
log file=/var/log/rsyncd.log
[test]
path=/tongbu1
comment=rsync files
ignore errors
read only=no
list=no
auth users=root
#secrets file=/etc/rsyncd.pas
pid file=/var/run/rsyncd.pid
log file=/var/log/rsyncd.log
lock file=/var/run/rsyncd.lock
[test1]
path=/tongbu2
comment=rsync files
ignore errors
read only=no
list=no
auth users=root
#secrets file=/etc/rsyncd.pas
pid file=/var/run/rsyncd.pid
log file=/var/log/rsyncd.log
lock file=/var/run/rsyncd.lock
【注:】rsyncd.conf中不能有空格,[test]为一个模块,在配置文件中可以增加多个模块
5.配置/etc/rsyncd.pas
root:000000
格式为:用户名:密码,可以设置多个用户密码,每个
6.修改rsyncd.pas的文件属性
chmod 0600 /etc/rsyncd.pas
7.启动rsync,默认端口为873
root@xiaoshan-desktop:~# /usr/local/rsync/bin/rsync --daemon --port=873
若需要在开机时自动启动,则可以
加入inetd.conf
编辑/etc/services,加入rsync 873/tcp,指定rsync的服务端口是873
编辑/etc/inetd.conf,加入rsync stream tcp nowait root /bin/rsync rsync –daemon
加入rc.local
8.检查防火墙开放873端口
9.使用telnet 192.168.61.195 873查看端口是否开放
10.使用rsync root@192.168.61.195验证是否可用
配置/etc/rsyncd_clinet.pas
000000
格式为:密码
修改rsyncd_client.pas的文件属性
sh# chmod 0600 /etc/rsyncd.pas
配置自动同步inotify【linux】
为能在shell下使用inotify特性,需要安装inotify-tools
下载地址:http://inotify-tools.sourceforge.net/
编译安装
./configure
make
make install
完成后,注意查看manpage,man inotify 、 man inotifywait
inotifywait 仅执行阻塞,等待 inotify 事件。您可以监控任何一组文件和目录,或监控整个目录树(目录、子目录、子目录的子目录等等)。在 shell 脚本中使用 inotifywait。
inotifywatch 收集关于被监视的文件系统的统计数据,包括每个 inotify 事件发生多少次。
gedit /opt/inotify-rsync.sh
#!/bin/bash
###########################
# 在这里配置本地文件夹,目标host,目标的rsync_module。rsync_module在同步机器的/etc/rsyncd.conf文件中配置
# 逗号前后不要有空格
#sync[0]='/tongbu,192.168.61.113,test' # localdir,host,rsync_module
#sync[0]='/tongbu,192.168.61.195,test' # localdir,host,rsync_module
sync[0]='/tongbu,192.168.61.195,test'
sync[1]='/tongbu,192.168.61.195,test1'
###########################
for item in ${sync[@]}; do
dir=`echo $item | awk -F"," '{print $1}'`
host=`echo $item | awk -F"," '{print $2}'`
module=`echo $item | awk -F"," '{print $3}'`
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f %e' \
--event CLOSE_WRITE,create,move,delete $dir | while read date time file event
do
echo $event'-'$file
case $event in
MODIFY|CREATE|MOVE|MODIFY,ISDIR|CREATE,ISDIR|MODIFY,ISDIR)
if [ "${file: -4}" != '4913' ] && [ "${file: -1}" != '~' ]; then
cmd="rsync -vzrtopg --progress --delete --password-file=/etc/rsyncd-clinet.pass $dir root@$host::$module"
echo $cmd
$cmd
fi
;;
MOVED_FROM|MOVED_FROM,ISDIR|DELETE|DELETE,ISDIR)
if [ "${file: -4}" != '4913' ] && [ "${file: -1}" != '~' ]; then
cmd="rsync -vzrtopg --progress --delete --password-file=/etc/rsyncd-clinet.pass $dir root@$host::$module"
echo $cmd
$cmd
fi
;;
esac
done &
done
测试:
1.开放终端:/usr/local/rsync/bin/rsync --daemon --port=873 启动rsync服务端
2.root@xiaoshan-desktop:/opt# ./inotify-rsync.sh 启动监控脚本,此脚本支持多目录多服务器监控
3.增加文件:root@xiaoshan-desktop:/tongbu# touch happy.txt
4.查看/tongbu1、/tongbu2中文件变化
Linux实时同步文件至Windows配置:
服务端配置【windows】
1.到http://www.itefix.no/i2/cwrsync下载最新版本的cwRsync_Server和cwRsync
2.安装cwRsync服务端
3.配置rsyncd.conf文件,和linux一样的配置
4.启动服务,在“服务”中将服务设置为“自动”启动
5.测试从linux手动同步文件至windows
将linux的/tongbu中的文件同步到113的test模块对应的目录
root@xiaoshan-desktop:~# rsync -vzrtopg --progress --delete /tongbu root@192.168.61.113::test
由于inotify是Linux的守护进程,所有windows上使用这个无法做到实时同步,可以使用Jnotify进行编程,然后调用rsync的命令实现同步。
Windows实时同步文件:
windows下实时同步文件可以使用Robocopy,它可以做到将监控文件,但监控到变化之后,最少需要1分钟才会执行同步,当然执行同步的时间,和有多少文件变化才会同步,都可以设置,可以进行文件类型和文件夹过滤,可以对大问文件进行过滤,可以不删除备份服务器的文件等等,功能非常强大。
分享到:
相关推荐
`sersync` 是一个专门为Linux设计的实时文件同步工具,它具有比rsync更细粒度的监控和更丰富的配置选项。`linux-sersync2.tar.gz` 提供了这个工具的源码。安装并配置sersync后,可以在A服务器上监视`/opt/tongbu`...
`sersync`是一个基于`inotify`的文件同步工具,专为Linux设计,它能监听文件系统的变动并实时同步。与Rsync相比,sersync更专注于实时性和自动化,尤其适合监控大量小文件的变化。 1. **实时性**:sersync通过监听...
### Linux下rsync文件夹同步配置详解 #### 引言 在Linux环境下,rsync工具因其高效、稳定、灵活的特点,被广泛应用于文件备份、数据迁移以及文件夹同步等场景。本文将详细介绍如何在Linux系统中配置rsync进行...
Linux 时间同步配置 Linux 时间同步配置是指在 Linux 系统中对时钟进行同步的配置,以确保系统时间的准确性和一致性。本文将介绍使用 ntpdate 命令和 ntpd 服务来实现时间同步的配置。 一、使用 ntpdate 命令 1.1...
### 实时同步技术详解:利用Rsync与Inotify在Linux环境下构建高效同步方案 #### 一、概述 在现代IT环境中,数据同步是一项至关重要的任务,尤其是在多服务器架构下,保持数据的一致性和实时性对于业务连续性至关...
`rsync`是一个强大的文件同步工具,它能够快速地比较并复制本地或远程文件系统中的差异。rsync的优势在于它只传输文件的差异部分,从而大大减少了网络带宽的使用。`rsyncd.conf.txt`文件通常包含rsync服务的配置信息...
本文将详细讨论如何利用Inotify和Rsync工具实现Linux文件的实时同步,并结合SSH(Secure Shell)进行远程同步。首先,我们需要理解这两个工具的核心功能。 **Inotify简介** Inotify是Linux内核提供的一种文件系统...
### Linux NTP时间同步设置详解 #### 一、概述 在Linux系统中,时间的准确性对于许多服务至关重要,比如日志记录、定时任务等。为了确保时间的精确性,Linux通常采用NTP(Network Time Protocol)协议来进行时间...
Linux 系统时间同步配置 Linux 系统时间同步配置是指通过 NTP 服务来同步和校对 Linux 系统时间的过程。NTP 服务是一种网络时间协议,能够通过互联网同步时间,确保系统时间的准确性。 1. NTP 软件下载安装 在 ...
在Linux系统中,C语言作为底层编程的主要工具,其对配置文件的操作往往涉及到繁琐的文件I/O操作。然而,为了简化这一过程,开发者通常会利用特定的库来处理配置文件,比如读取、写入、解析键值对等。本文将深入探讨...
### Linux下MySQL主从同步配置详解 #### 一、引言 在数据库管理领域,MySQL主从同步是一种常见的数据复制技术,它可以帮助我们构建高可用性和数据冗余性,从而提高系统的稳定性和可靠性。本文将详细介绍如何在Linux...
Unison是一款强大的文件同步工具,可在多个操作系统之间,如Windows、Linux之间实现文件的双向同步。Unison的独特之处在于它的跨平台性、低系统要求、双向同步功能以及对冲突处理的智能策略。本文将详细介绍如何在双...
### Linux系统文件实时同步实现详解 #### 一、引言 在Linux环境下,尤其是在多服务器部署的场景中,实现文件的实时同步对于提高系统的稳定性和数据一致性至关重要。本文将详细介绍如何利用`rsync`和`inotify`工具...
sersync 是一个实时文件同步工具,主要用于服务器同步、Web 镜像等功能。它基于 Boost 1.43.0、inotify API 和 rsync 命令开发。相比于其他同步解决方案,sersync 的优点是使用 C++ 编写,并对 Linux 系统文件系统...
linux环境下的ntp时间同步,服务器端需要修改配置文件ntp.conf,附件给出了详细的配置信息。
Unison是一款强大的、跨平台的文件同步工具,它支持Linux和Windows操作系统,使得用户能够在不同系统之间方便地进行文件和目录的同步。Unison的独特之处在于它的双向同步功能,这意味着两个同步端的数据改动都可以被...
在Linux系统中,文件同步是一项重要的任务,特别是在多台机器间协同工作或者备份数据时。本文将深入探讨如何利用unison和inotify这两个工具实现文件的实时双向同步,确保数据的一致性与安全性。 【描述】: 这篇...