如何使用rsync命令
rsync(Remote Sync)是linux系统下的数据镜像备份工具。使用快速增量备份工具rsync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。它的特性如下:
可以镜像保存整个目录树和文件系统
可以很容易做到保持原来文件的权限、时间、软硬链接等等
无须特殊权限即可安装
优化的流程,文件传输效率高,rsync 在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽。
我们可以使用rsync增量同步特性同步数据库备份到远程备份机,也可以临时同步文件到其他的机器上。文件比较大的情况下,可以实现断点续传的效果,从而提高工作效率。
二 安装部署
2.1 安装
一般使用yum 的方式安装
yum install -y rsync
yum install -y xinetd
方式二 :源码编译安装
下载rsync包 最新的版本是3.1.3
wget "https://download.samba.org/pub/rsync/src/rsync-3.1.3.tar.gz"
2. 解压缩编译安装
tar -xvf rsync-3.1.3.tar.gz
cd rsync-3.1.3
./configure --prefix=/usr/local/bin
make
make install
三 如何使用
rsync可以在客户端使用,也可以作为服务来接受其他客户端传递过来的文件。本文以A B 两个机器为例,A为客户端,B为服务端进行配置。
3.1 服务器端配置
在B机器上配置文件/etc/rsyncd.conf 该文件有一个或者多个模块组成,比如我们要备份文件到路径B服务器的 /data/rsync_dir 目录下。具体的配置如下
pid file=/var/run/rsyncd.pid
log file=/var/log/rsyncd.log
port=873 ###服务端口
[db_backup]
path=/data/rsync_dir
comment=database backups ###注释
hosts allow= 10.10.10.8 10.10.15.9 #例子
read only=false
其中核心参数:
port 指定rsync服务进程监听的端口。
path 指定rsync文件在服务器端的路径。
hosts allow=IP #允许哪些ip地址上传或者下载文件。
read only=false ##该选项设定是否允许客户上载文件。如果为true那么任何上载请求都会失败,如果为false并且服务器目录读写权限允许那么上载是允许的。默认值为true。
max connections #指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。默认值是0,也就是没有限制。
auth users 指定授权用户列表,只有指定的用户才能访问rsync服务。 可以使用空格或者逗号隔开 a,b,c 或者a b c,如果指定了则需要配合secrets file一起使用。
secrets file #该选项指定一个包含定义[用户名:密码]对的文件。只有在"auth users"被定义时,该文件才会起作用。文件每行包含一个username:passwd对。该参数没有默认的值,必须指定一个文件/etc/rsyncd.passwd,同时rsyncd.passwd 文件的权限建议设置为:0600
配置xinetd管理rsync服务启动
修改 /etc/xinetd.d/rsync文件中的 disable=yes ,flags=IPv4
service rsync
{
disable = no
flags = IPv6
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
log_on_failure += USERID
}
启动rsync服务
service xinetd start
3.2 rsync客户命令
相关参数
在学习名之前我们首先了解几个比较核心的参数,其他参数欢迎大家查询相关资料文档。
-a 表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD。推荐使用-a
--bwlimit=KBPS 限制I/O带宽,单位为KB/s
-l 保留文件的软链接
-p 保留原有权限
--progress 显示备份过程
-r 以递归方式拷贝目录
-t 保留文件时间信息
-g 保留属组权限
-o 保留属主权限
-R, --relative 使用相对路径信息,举个例子:
rsync a/b/c.txt dest:/tmp/ 在/tmp目录下创建c.txt文件,而如果使用-R参数
rsync -R a/b/c.txt dest:/tmp/ 在目标端保持完全路径信息,结果为:/tmp/a/b/c.txt
-z, --compress 对备份的文件在传输时进行压缩处理
3.3 同步数据
在本机同步数据
$ tree dir1 dir1 ├── file1 ├── file2 ├── file3 └── file4
方式一
$ rsync -av dir1 dir2 sending incremental file list dir1/ dir1/file1 dir1/file2 dir1/file3 dir1/file4 sent 255 bytes received 92 bytes 694.00 bytes/sec total size is 0 speedup is 0.00 $ tree dir2 dir2 └── dir1 ├── file1 ├── file2 ├── file3 └── file4 1 directory, 4 files
说明:
rsync dir1 dir2 会将dir1中的文件以及dir1目录本身同步到dir2文件中。
方式二
$ rsync -av dir1/ dir2 sending incremental file list ./ file1 file2 file3 file4 sent 242 bytes received 91 bytes 666.00 bytes/sec total size is 0 speedup is 0.00 $ tree dir2 dir2 ├── file1 ├── file2 ├── file3 └── file4
说明:
rsync dir1/ dir2 会将dir1中的文件同步到dir2
同步数据到远程的机器 配置信息参见3.1的配置文件。同步数据的语法结构如下: 同步到远程机器:
rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
从远程机器拉取:
rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
将本地/root/dir1文件同步到远程服务器的/data/rsync_dir 目录中。
$ rsync -rav dir1 rsync://10.215.20.7/db_backup sending incremental file list dir1/ dir1/file1 dir1/file2 dir1/file3 dir1/file4 sent 251 bytes received 88 bytes 678.00 bytes/sec total size is 0 speedup is 0.00
拉dir1文件夹以及文件夹中的数据到本地
$ rsync -av rsync://10.215.20.7/db_backup/dir1 ./ receiving incremental file list dir1/ dir1/file1 dir1/file2 dir1/file3 dir1/file4
注意
rsync://10.215.20.7/db_backup/dir1是拉取包含文件夹本身。
rsync://10.215.20.7/db_backup/dir1/是拉取包含文件夹dir1里面的文件。
$ rsync -rav rsync://10.215.20.7/db_backup/dir1/ ./ receiving incremental file list ./ file1 file2 file3 file4 sent 110 bytes received 249 bytes 718.00 bytes/sec total size is 0 speedup is 0.00 [yangqilong@qabb-r1db13 12:07:17 ~/test] $ ls file1 file2 file3 file4
四 遇到的问题
在我们实际使用过程中遇到比较多的问题是权限问题以及文件相对路径的问题。 关于目标机器权限相关的设置 ,默认/etc/rsyncd.conf 文件中uid ,gid 如果不设置,系统会是nobody ,这个时候需要提前讲 文件中指定的path路径创建好。如果指定uid=root gid=root 调用root账号执行权限。
关于相对路径,文章举例子的时候特别强调过,注意source_dir和 source_dir/的区别。