rsync
Table of Contents
配置 rsync 服务
配置一个简单的rsync服务并不复杂,你需要修改或建立一些配置文件。
-
rsyncd.conf
rsyncd.conf 是 rsync 服务的主要配置文件,它控制 rsync 服务的各种属性,下面给出一个 rsyncd.conf 文件的例子:
# 先定义整体变量 secrets file = /etc/rsyncd.secrets motd file = /etc/rsyncd.motd read only = yes list = yes uid = nobody gid = nobody hosts allow = 192.168.100.90 # 哪些电脑可以访问rsync服务 hosts deny = 192.168.100.0/24 # 哪些电脑不可以访问rsync服务 max connections = 2 log file = /var/log/rsyncd.log pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock # 再定义要rsync目录 [oxnz] comment = oxnz's directory from 192.168.100.21 path = /home/oxnz auth users = oxnz,rsync [test] comment = test rsync path = /home/test
在上面的配置文件中,限定了 192.168.100.0/24 这个子网中,只有 192.168.100.90 的机器可以来访问这台 rsync 服务器的 rsync 服务。 配置文件的后面部分定义了两个 rsync 的目录,oxnz 目录是只有知道 oxnz、rsync 两个账号的人才能使用的,而 test 目录是无需账号就可以访问的。 rsync 在定义目录时还提供了一些其它选项,可以作更严格的控制。
-
rsyncd.secrets
# vi /etc/rsyncd.secrets
rsyncd.secrets 是存储 rsync 服务的用户名和密码的,它是一个明文的文本文件,下面给出一个 rsyncd.secrets 文件的例子:
oxnz:12345 rsync:abcde
因为 rsyncd.secrets 存储了 rsync 服务的用户名和密码,所以非常重要,因此文件的属性必须设为 600,只有所有者可以读写:
# chmod 600 /etc/rsyncd.secrets
-
rsyncd.motd
# vi /etc/rsyncd.motd
rsyncd.motd 记录了 rsync 服务的欢迎信息,你可以在其中输入任何文本信息,如:
Welcome to use the rsync services!
-
services
# vi /etc/services
services 并不是 rsync 的配置文件,这一步也可以不做。而修改了 services 文件的好处就在于系统知道 873 端口对就的服务名为 rsync。修改 services 的方法就是确保 services 中有如下两行,没有的话就自行加入:
rsync 873/tcp # rsync rsync 873/udp # rsync
-
/etc/xinetd.d/rsync
xinetd (eXtended InterNET services daemon) 已经取代了 inetd,并且提供了访问控制、加强的日志和资源管理功能,已经成了 Red Hat 7 的 Internet 标准超级守护进程。
建立一个名为 /etc/xinetd.d/rsync 文件,输入以下内容:
service rsync { disable = no socket_type = stream wait = no user = root server = /usr/local/rsync/bin/rsync server_args = --daemon log_on_failure += USERID }
保存后,就可以运行 rsync 服务了。输入以下命令:
# /etc/rc.d/init.d/xinetd reload
这样 rsync 服务就在这台机器上 (192.168.100.21) 运行起来了,接下来就是如何来使用它了。
rsync 命令的用法
在配置完 rsync 服务器后,就可以从客户端发出 rsync 命令来实现各种同步的操作。rsync 有很多功能选项,下面就对介绍一下常用的选项:
Usage: rsync [OPTION]... SRC [SRC]... DEST
or rsync [OPTION]... SRC [SRC]... [USER@]HOST:DEST
or rsync [OPTION]... SRC [SRC]... [USER@]HOST::DEST
or rsync [OPTION]... SRC [SRC]... rsync://[USER@]HOST[:PORT]/DEST
or rsync [OPTION]... [USER@]HOST:SRC [DEST]
or rsync [OPTION]... [USER@]HOST::SRC [DEST]
or rsync [OPTION]... rsync://[USER@]HOST[:PORT]/SRC [DEST]
The ':' usages connect via remote shell, while '::' & 'rsync://' usages connect
to an rsync daemon, and require SRC or DEST to start with a module name.
rsync 有六种不同的工作模式:
- 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。
- 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当 DST 路径地址包含单个冒号”:”分隔符时启动该模式。
- 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当 SRC 地址路径包含单个冒号”:”分隔符时启动该模式。
- 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。
- 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。
- 列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。
下面以实例来说明:
# rsync -vazu -progress oxnz@192.168.100.21:/oxnz/ /home
- v 详细提示
- a 以 archive 模式操作,复制目录、符号连接
- z 压缩
- u 只进行更新,防止本地新文件被重写,注意两者机器的时钟的同时
- -progress 指显示
以上命令是保持客户机 192.168.100.90 上的 /home/oxnz 目录和 rsync 服务器上的 oxnz 目录同步。 该命令执行同步之前会要求你输入 oxnz 账号的密码,这个账号是我们前面在 rsyncd.secrets 文件中定义的。 如果想将这条命令写到一个脚本中,然后定时执行它的话,可以使用 –password-file 选项,具体命令如下:
# rsync -vazu -progress --password-file=/etc/rsync.secret
oxnz@192.168.100.21:/oxnz/ /home
要使用 –password-file 选项,就得先建立一个存放密码的文件,这里指定为 /etc/rsync.secret。 其内容很简单,如下:
oxnz:12345
同样要修改文件属性如下:
# chmod 600 /etc/rsyncd.secrets
利用 rsync 保持 Linux 服务器间的文件同步
现在假设有两台 Linux 服务器 A(192.168.100.21) 和 B(192.168.100.90),服务器 A 中的 /home/oxnz 和服务器 B 中的 /home/oxnz 这两个目录需要保持同步,也就是当服务器 A 中文件发生改变后,服务器 B 中的文件也要对应去改变。
我们按上面的方法,在服务器 A 上安装 rsync,并将其配置为一台 rsync 服务器,并将 /home/oxnz 目录配置成 rsync 共享出的目录。然后在服务器 B 上安装 rsync,因为 B 只做客户端,所以无需配置。
然后在服务器 B,建立以下脚本:
#!/bin/bash
/usr/loca/rsync/bin/rsync -vazu --bwlimit=1000 -progress --delete
--password-file=/etc/rsync.secret oxnz@192.168.100.21:/oxnz/ /home
将这个脚本保存为 AtoB.sh,并加上可执行属性:
# chmod 755 /root/AtoB.sh
然后,通过 crontab 设定,让这个脚本每 30 分钟运行一次。执行命令:
# crontab -e
0,30 * * * * /root/AtoB.sh
保存退出,这样服务器 B 每个小时的 0 分和 30 分时都会自动运行一次 AtoB.sh,AtoB.sh 是负责保持服务器B和服务器A同步的。 这样就保证了服务器 A 的所有更新在 30 钟后,服务器 B 也一样取得了和服务器 A 一样的最新的资料。
其它应用
rsync 除了同步文件及目录之外,还可以利用它来实现对远程网站的远程备份。 如果再结合脚本和 crontab 就能实现定时自动远程备份。
rsync 修正下载错误
文件镜像下载出错之后可以使用 rsync 同步解决:
用rsync工具同步解决映像不完整问题
大家都知道 rsync 最主要的功能就是同步备份和镜像功能,前提是得有 rsync 服务器 (因为 rsync 并不能同步 ftp 和 web 服务器上的映像文件)。 目前大多数 Linux 发行版都有 rsync 服务器,我们就可以利用 rsync 服务器上的源来同步不完整的光盘映像。 当然也能用 rsync 下载 rsync 服务器上的文件。
寻找Linux发行版的rsync服务器,我们得找有类似下面的地址: rsync://mirrors.kernel.org
rsync 进入服务器的方法:
比如我下载的 FC-18-i386-DVD.iso 有问题,想用 rsync 来同步解决。 首先就要找拥有 FC-18-i386-DVD.iso 的 rsync 服务器 于是到 Fedora.redhat.com 的下载列表中寻找,发现 rsync://mirrors.kernel.org 上有这个文件 所以先要进入这台服务器 (请不要把地址后面的/省略,这样不会列出服务器或服务器目录中的文件)
[root@localhost xinyi]# rsync rsync://mirrors.kernel.org/
MOTD:
MOTD: Welcome to the Linux Kernel Archive.
MOTD:
mirrors All mirror sites
LDP Linux Documentation Project
debian Debian Linux distribution mirror
debian-cd Debian CD image mirror
redhat RedHat mirror
fedora Fedora - RedHat community project
fedora-enchilada Fedora - RedHat community project
fedora-epel Fedora - RedHat community project
fedora.us fedora.us - Additional stuff for Fedora
centos CentOS - An Enterprise-class Linux distribution (complete)
sourceware sourceware.org (formerly sources.redhat.com) mirror
CPAN CPAN mirror
suse Novell SUSE mirror
opensuse OpenSUSE - Novell's community project
archlinux Archlinux - A simple, lightweight linux distribution
ubuntu ubuntu mirror
ubuntu-releases ubuntu-releases mirror
gentoo Gentoo
slackware slackware mirror
发现在这个服务器上有fedora的镜像 我们一级一级的进去;执行下面的命令:
MOTD:
MOTD: Welcome to the Linux Kernel Archive.
MOTD:
drwxr-xr-x 101 2016/05/17 06:56:09 .
drwxr-xr-x 4,096 2006/10/17 20:46:37 core
drwxr-xr-x 41 2016/07/28 09:45:56 development
drwxrwxr-x 27 2013/04/25 16:55:49 extras
drwxr-xr-x 4,096 2016/06/17 09:14:13 releases
drwxrwsr-x 4,096 2016/08/05 06:49:33 updates
[root@F8SG: xinyi]$ rsync rsync://mirrors.kernel.org/fedora/releases/18/Fedora/i386/iso/
drwxr-sr-x 4096 2012/05/25 13:30:02 .
-rw-r--r-- 1121 2012/05/25 13:30:02 Fedora-18-i386-CHECKSUM
-rw-r--r-- 3912237056 2012/05/23 05:00:47 Fedora-18-i386-DVD.iso
-rw-r--r-- 208666624 2012/05/23 04:58:41 Fedora-18-i386-netinst.iso
我们发现了 FC-18-i386-DVD.iso,这时我们要进行下一个过程,同步文件
用rsync 同步文件的语法:
rsync -vzP <映像文件的 rsync 地址> <你以前下载下来的文件>
[root@localhost fc5]# rsync -vzP \
rsync://mirrors.kernel.org/fedora/releases/18/i386/iso/Fedora-18-i386-DVD.iso \
FC-5-i386-DVD.iso
稍等片刻便会出现下载提示之类的。
rsync 的原理是先从本地已存的文件中下载,然后对照服务器的文件,如果已经下载的文件不完整,就从服务器上下载;如果有错误的,就修正;会先产生一个临时文件,也就类似下面的
[root@localhost fc5]# ls -la
-rw-rw-r-- 1 a2di a2di 1.2G Dec 11 18:00 Fedora-18-i386-DVD.iso
-rw-rw-r-- 1 a2di a2di 1.0G Dec 11 18:00 Fedora-18-i386-DVD.iso.NF3D2U
等完成后,会有类似下面这样的提示,然后 rsync 会自动删除临时文件,更新原 iso 文件。
Fedora-18-i386-DVD.iso 3253669888 100% 164.78kB/s 5:21:22 (1, 100.0% of 1)
wrote 381831 bytes read 953051797 bytes 48730.35 bytes/sec total size is 3253669888 speedup is 3.41
经过这个简单的过程,我们就把有问题的文件同步更新了。然后我们再来检测文件的完整性;这样就可以修正存在问题的文件
注意: 同步文件时,要有大一点的空间;因为同步的过程中,rsync 会创建一个和你下载文件同等大小的临时文件。