rsync官方网址:https://rsync.samba.org/
rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份工具。
在守护进程模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输协议或者通过远程shell如RSH或者SSH提供文件。SSH模式下,rsync客户端运行程序必须同时在本地和远程机器上安装。
全量与增量,全量:将全部数据进行传输覆盖,增量:只传输差异部分的数据,rsync通过独特的“quick check”算法,实现增量数据传输
rsync的功能
类似与cp命令 — (本地备份传输数据)
类似于scp命令 — (远程备份传输数据)
类似于rm命令 — (实现无差异同步备份)
类似于ls命令 — (本地文件信息查看)
模拟环境,两台机器:Linux 系统Centos 7
备份服务器ip:172.16.7.4
, 客户端服务器(nfs存储共享)ip:172.16.7.3
目的:将nfs服务器/www
目录的数据,备份到备份服务器的/backup/web
目录
服务端(备份服务器)和客户端都要安装。
yum -y install rsync
如果想安装最新版本,则自己wget官网最新版本,然后编译安装。
基本命令语法:
Local: rsync [OPTION...] SRC... [DEST] Access via remote shell: Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST:DEST Access via rsync daemon: Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST] rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST::DEST rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
当然如果觉得记得复杂的话,就记住从前往后传即可:rsync 参数 前面(源路径) 后面(目的路径)
注:源路径如果是一个目录的话,带上尾随斜线和不带尾随斜线是不一样的,不带尾随斜线表示的是整个目录包括目录本身,带上尾随斜线表示的是目录中的文件,不包括目录本身。
将/etc/fstab同步至/tmp目录,如果fstab加斜杠/,则将fstab目录下所有文件同步至/tmp。
以下命令类似功能 cp /etc/fstab /tmp
rsync /etc/fstab /tmp #在本地同步,将fstab目录同步至/tmp rsync /etc/fstab/ /tmp #将fstab目录下所有文件同步至/tmp
远程分pull下载和push上传两种:
[root@xuexi ~]# rsync -r /www 172.16.2.4:/backup/web # 将本地/www目录上传至远程主机的/backup/web下,远程/backup/web目录和本地/www保持同步 [root@xuexi ~]# rsync -r 172.16.2.4:/backup/web /www # 将远程主机的/backup/web目录下载到本地/www下,本地/www目录和远程/backup/web保持同步
#注意:如果是下载数据,远端服务器源数据目录权限可以为任意权限
#注意:如果是上传数据,远端接收文件的目录权限必须是rsync权限
创建rsync系统用户
useradd rsync -s /sbin/nologin -M #创建一个rsync的虚拟用户,只被程序使用
修改服务端配置文件
vim /etc/rsyncd.conf
配置如下:
fake super = yes
这个选项版本以前是没有的,在新版本中如果不加上这个参数,会报权限错误 rsync: chgrp “.hosts.G6sZha” (in backup) failed: Operation not permitted (1)
uid = rsync #用户 远端命令使用rsync访问共享目录 gid = rsync #用户组 use chroot = no #安全相关 max connections = 200 #最大连接数 timeout = 300 #超时时间(不进行备份多长时间断开) pid file = /var/run/rsyncd.pid #进程对应进程号文件(存放服务运行时进程id号) lock file = /var/run/rsync.lock #锁文件 log file = /var/log/rsyncd.log #日志文件,显示出错信息 fake super = yes #在新版本中必须加这个 #模块信息: [backup] comment = "backup" path = /backup #模块对应的位置(路径) ignore errors #忽略错误程序 read only = false #是否只读(这里是假,表示能写入) list = false #是否可以列表* hosts allow = 172.16.1.0/24 #准许访问rsync服务器客户范围(白名单) #hosts deny = 0.0.0.0/32 #禁止访问rsync服务器客户范围(黑名单) auth users = rsync_backup #不存在的用户,只用于认证 #设置进行连接认证的密钥文件: secrets file = /etc/rsync.password #认证时密钥文件
创建数据备份存储目录
mkdir /backup chown -R rsync.rsync /backup/ #一定要将文件属主和属组改成rsync用户
创建认证用户密码文件,修改文件权限
注:密码文件必须是600权限,否则报错
echo "rsync_backup:123456" >/etc/rsync.password chmod 600 /etc/rsync.password #为了安全起见,把认证用户的密码文件权限改成600
启动rsync守护进程,并查看是否启动
rsync --daemon #启动守护进程 ps -ef |grep rsync #查看是否启动进程 netstat -lntup |grep rsync #查看是否监听873端口
查看已经正常启动并监听873端口:
创建密码文件,客户端密码文件中,只需要密码即可,密码文件的权限是600
echo "123456" >/etc/rsync.password chmod 600 /etc/rsync.password
上传至服务端测试:
/www/
将本地www文件下所有文件上传至备份服务器172.16.2.4。如果是/www
,则是将整个www文件夹备份过去。
rsync -avz /www/ rsync_backup@172.16.2.4::backup --password-file=/etc/rsync.password
在客户端下载测试:
将备份服务器的backup模块配置的path路径的文件下载至本地www目录下。
rsync -avz rsync_backup@172.16.2.4::backup --password-file=/etc/rsync.password /www
到此配置完成!!!
参数 | 说明 |
---|---|
-v | –verbose 详细模式输出 |
-a | –archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD |
-z | 对备份的文件在传输时进行压缩处理 |
-v | –verbose 详细模式输出 |
-v | –verbose 详细模式输出 |
-v | –verbose 详细模式输出 |
-P | 显示进度 |
-r, | –recursive 对子目录以递归模式处理 |
-l, | –links 保留软链结 |
-p, | –perms 保持文件权限 |
-o, | –owner 保持文件属主信息 |
-g, | –group 保持文件属组信息 |
-D, | –devices 保持设备文件信息 |
-t, | –times 保持文件时间信息 |
-e, | –rsh=command 指定使用rsh、ssh方式进行数据同步 |
-S, | –sparse 对稀疏文件进行特殊处理以节省DST的空间 |
-n, | –dry-run 现实哪些文件将被传输 |
-w, | –whole-file 拷贝文件,不进行增量检测 |
-B, | –block-size=SIZE 检验算法使用的块尺寸,默认是700字节。 |
-x, | –one-file-system 不要跨越文件系统边界 |
-R, | -relative 使用相对路径信息 |
-b, | –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用–suffix选项来指定不同的备份文件前缀。 |
-u, | –update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件,不覆盖更新的文件 |
-q, | –quiet 精简输出模式 |
-c, | –checksum 打开校验开关,强制对文件传输进行校验 |
–exclude=PATTERN | 指定排除不需要传输的文件模式 |
–exclude-from=FILE | 排除FILE中指定模式的文件 |
–bwlimit=KBPS | 限制I/O带宽,KBytes per second |
–delete | 删除那些DST中SRC没有的文件 |
–password-file=FILE | 从FILE中得到密码 |
平常经常使用命令参数有rsync -avz
压缩或者不压缩rsync -av
排除同步:–exclude=a (排除a)
rsync -avz --exclude=a /backup/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password
排除a 和b
[root@nfs01 backup]# rsync -avz --exclude={a,b} /backup/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password
排除连续的a-f
rsync -avz --exclude={a..f} /backup/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password
完全同步:无差异同步–delete
rsync -avz --delete /backup/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password
文件配置在vim /etc/rsyncd.conf
,没有的话需自己创建。
参数配置分为全局参数和模块参数
全局参数如下:
常见的全局参数: | 说明 |
---|---|
port | # 指定后台程序使用的端口号,默认为873。 |
uid | # 该选项指定当该模块传输文件时守护进程应该具有的uid,配合gid选项使用可以确定哪些可以访问怎么样的文件权限,默认值是" nobody"。 |
gid | # 该选项指定当该模块传输文件时守护进程应该具有的gid。默认值为" nobody"。 |
max connections | # 指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。 默认值是0,也就是没有限制。 |
lock file | # 指定支持max connections参数的锁文件,默认值是/var/run/rsyncd.lock。 |
motd file | # " motd file"参数用来指定一个消息文件,当客户连接服务器时该文件的内容显示给客户, 默认是没有motd文件的。 |
log file | # " log file"指定rsync的日志文件,而不将日志发送给syslog。 |
pid file | # 指定rsync的pid文件,通常指定为“/var/run/rsyncd.pid”,存放进程ID的文件位置。 |
hosts allow = | # 单个IP地址或网络地址 ,允许访问的客户机地址 |
模块参数[modul]如下:
常见的模块参数: | 主要是定义服务器哪个要被同步输出,其格式必须为“ [ 共享模块名 ]” 形式,这个名字就是在 rsync 客户端看到的名字,服务器真正同步的数据是通过 path 来指定的。 |
---|---|
Comment | # 给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。 默认没有描述定义。 |
Path | # 指定该模块的供备份的目录树路径,该参数是必须指定的。 |
read only | # yes为只允许下载,no为可以下载和上传文件到服务器 |
exclude | # 用来指定多个由空格隔开的多个文件或目录(相对路径),将其添加到exclude列表中。 这等同于在客户端命令中使用―exclude或----filter来指定某些文件或目录不下载或上传。 |
exclude from | # 指定一个包含exclude模式的定义的文件名,服务器从该文件中读取exclude列表定义, 每个文件或目录需要占用一行 |
include | # 用来指定不排除符合要求的文件或目录。这等同于在客户端命令中使用–include来指定模式,结合include和exclude可以定义复杂的exclude/include规则。 |
include from | # 指定一个包含include模式的定义的文件名,服务器从该文件中读取include列表定义。 |
auth users | # 该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块, 这里的用户和系统用户没有任何关系。 如果" auth users"被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的challenge/response认证协议。用户的名和密码以明文方式存放在" secrets file"选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。 |
secrets file | # 该选项指定一个包含定义用户名:密码对的文件。 只有在" auth users"被定义时,该文件才有作用。文件每行包含一个username:passwd对。一般来说密码最好不要超过8个字符。没有默认的secures file名,注意:该文件的权限一定要是600,否则客户端将不能连接服务器。 |
hosts allow | # 指定哪些IP的客户允许连接该模块。定义可以是以下形式: 单个IP地址,例如:192.167.0.1,多个IP或网段需要用空格隔开,整个网段,例如:192.168.0.0/24,也可以是192.168.0.0/255.255.255.0,“*”则表示所有,默认是允许所有主机连接。 |
hosts deny | # 指定不允许连接rsync服务器的机器,可以使用hosts allow的定义方式来进行定义。 默认是没有hosts deny定义。 |
list | # 该选项设定当客户请求可以使用的模块列表时,该模块是否应该被列出。 如果设置该选项为false,可以创建隐藏的模块。默认值是true。 |
timeout | # 通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户端。超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600。 |
ignore errors | # 忽略I/P不正确 . |
ignore nonreadable | # 忽略对用户没有可读的文件. |