Rsync & Inotify

2014-06-30 Monday     linux , misc

rsync 是一个远程数据同步工具,使用 “rsync算法” 来使本地和远程两个主机之间的文件达到同步,该算法只传送两个文件的不同部分;而 inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制。

这里介绍下 rsync 和 inotify 的使用。

RSYNC

也就是 Remote Synchronize,这是一个在 *nix 下的一个远程数据同步工具,可以通过网络快速同步多台主机间的文件和目录;而且并非每次都整份传输,而是只传输两个文件的不同部分,因此其传输速度相当快。

rsync 的传输效率要比 scp 高很多,其特点有:

  • 可镜像保存整个目录树和文件系统;
  • 可做到保持原文件的权限、时间、软硬连接等;

如下是常见的数据传输方式。

传输方式

这三种传输方式的主要差异是,是否有冒号 (:),本地传送不需要冒号,通过 ssh 或 rsh 时,需要一个冒号,通过 rsync 传送需要两个冒号。

1. 复制本地文件

在本地直接运行,用法与 cp 几乎一模一样。

$ rsync [OPTION]... SRC DEST

$ rsync -av /etc /tmp              ← 将/etc/的资料备份到/tmp/etc內

2. 利用ssh

实际上就是使用远程 shell 程序,一般为 rsh 或者 ssh 实现内容的远程复制,通常路径地址包含单个冒号 “:” 分隔符时启动该模式。

$ rsync [OPTION]... SRC [USER@]host:DEST

----- 将remote-server的/etc备份到本地主机/tmp內
$ rsync -ave ssh user@remote-server:/etc /tmp

3. 使用rsync服务器

通过 rsync 提供的服务来传送,此时 rsync 服务主机会启动 873 端口,也就意味着必须要在服务端启动 rsync 服务,可以查看 /etc/xinetd.d/rsync 服务。

此外,还需要 A) 编辑 /etc/rsyncd.conf 配置文件;B) 需要设置好客户端密码文件。

命令行

$ rsync [OPTION]... SRC [USER@]HOST::DEST
$ rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
$ rsync -av user@hostname::/dir/path /local/path

参数列表

常用的参数列表如下。

rsync [-avrlptgoD] [-e ssh] [user@host:/dir] [/local/path]

参数简介:
  --compress/-z, --compress-level=level
    传输过程中是否进行数据压缩,以及指定的压缩级别;
  --archive/-a, --times, --perms, --owner, --group
    用于设置保留原来的更新时间戳、权限、所有者和组信息,注意,对于 -a 同时会设置 --recursive 和 --links,
    相当于 -rlptgoD;
  --recursive/-r VS. --dirs/-d
    前者递归复制所有目录(含子目录);后者会跳过子目录及其内容;
  --delete
    默认从源复制到目的端时,不删除额外文件,通过该选项保证源和目标目录的内容完全一致,如果源是空,那么会
    导致目的目录内容被删除;
  --links/-l, --hard-links/-H, --copy-links/-L, --copy-unsafe-links, --safe-links
    分别为保持符号链接、保持硬链接、复制符号链接指向的内容而非符号链接本身、如果符号链接指向源目录外则仍
    复制、指向源目录外时为保证安全不复制;
  --verbose, --progress, --stats
    用于显示正在执行的状态,默认不打印任何信息;
  --rsh/-e
    默认使用的就是ssh,通过该参数强制使用,可以通过 --rsh "ssh -p 12345" 指定 ssh 的参数;
  --exclude, --include
    选择要同步的文件,可以指定多次,例如 --exclude "*bak" --exclude "*~" ;
    示例:注意,指定时使用的是源地址的相对路径。
    --exclude "checkout"    某个目录
    --exclude "filename*"   某类文件
    --exclude-from=sync-exclude.list  通过文件指定要忽略的文件
  --update/-u
    增量传输,也就是会跳过所有存在于目标,且时间较新的文件。注意,只检查文件名和最后修改时间,并不检查文
    件大小,如果目的端有1M的A.txt文件,但是更新时间新于源端10M的A.txt那么本地文件不会更新;
  --partial, -P
    断点续传,会保留没有完全传输的文件,以加快随后的再次传输,其中 -P 相当于 --partial --progress;注意,
    该参数与 -u 冲突,会导致传了一半的文件会被 rsync 跳过,详见上面的介绍;

注意: 在指定复制源时,路径是否有最后的 "/" 有不同的含义,例如:
    /data  :表示将整个 /data 目录复制到目标目录含;
    /data/ :表示将 /data/ 目录中的所有内容复制到目标目录。

inotify

inotify 是基于 inode 级别的文件系统监控技术,是一种强大的、细粒度的、异步的机制。

inotify-tools 提供了一个命令行管理的命令,可以查看 Github inotify-tools ,也可以通过 Github Wiki 查看下载最新版本,此时会安装 inotifywait 和 inotifywatch 两个文件。

$ tar -zxf inotify-tools-3.14.tar.gz && cd inotify-tools-3.14
$ ./configure --prefix=/usr && make && su -c 'make install'
# mv /lib/libinotifytools.* /lib64/


如果喜欢这里的文章,而且又不差钱的话,欢迎打赏个早餐 ^_^


About This Blog

Recent Posts

Categories

Related Links

  • RTEMS
    RTEMS
  • GNU
  • Linux Kernel
  • Arduino

Search


This Site was built by Jin Yang, generated with Jekyll, and hosted on GitHub Pages
©2013-2018 – Jin Yang