rsync 是 linux 系统下的数据镜像备份工具,可以快速增量备份,支持远程同步、本地复制,或者与其他 ssh、rsync主机同步。rsync 具有安全性高、备份迅速、支持增量备份等诸多优点,通过 rsync 可以解决对实时性要求不高的数据备份需求,例如定期备份服务器数据到远端服务器,对本地磁盘定期做数据镜像等。
参数介绍
-V
展示详细的同步信息-a
归档模式,相当于-rlptgoD
-r
递归给定的目录-l
同步软连接文件-p
保留文件权限-t
同步源文件的修改时间-g
保持文件的所属用户组-o
保持文件所属的用户-D
保留设备文件与特殊文件
-z
压缩文件后再传输,减少网络带宽占用,但是会消耗一定的 cpu-H
保持硬链接-n
试运行,不做实际传输-P
相当于--partial --progress
--partial
支持断点续传--progress
传输时展示文件的传输进度
--delete
如果同步目录的文件被删除,同步删除目标文件--delete-excluded
在目标目录删除--exclude
中指定的排除目录--exclude
要排除的路径,即不参与同步的路径--exclude-from=FILE_PATH
如果要排除的路径过多,可以统一写在一个文件内,并指定文件路径-e ssh
使用 ssh 加密隧道传输文件
简单使用
本地文件同步
# 如果目标目录(/tmp/desc/)不存在会自动创建目录 |
远程文件同步
rsync 可以通过 ssh 隧道在不同服务器间同步数据,此方式只需其中一方安装 rsync 即可完成文件同步
- 本地 => 远程
rsync -ave ssh /tmp/test_dir/ www@192.198.2.188:/tmp/desc/ |
- 远程 => 本地
rsync -ave ssh www@192.198.2.188:/tmp/desc/ /tmp/test_dir/
此命令执行后会要求输入 ssh 密码,可设置使用 密钥登录 方式免除密码,如下:
rsync -ave "ssh -i /root/deploy_key" /tmp/test_dir/ www@192.198.2.188:/tmp/desc/ |
-ave
同-a -v -e
ssh -i /root/deploy_key
使用 ssh 连接并指定连接使用的密钥文件/root/deploy_key
,引号内可使用 ssh 命令支持的参数,如-P
、-y
等/tmp/test_dir/
要传输目录www@192.198.2.188:/tmp/desc/
www
连接 ssh 使用的用户名192.198.2.188
远端服务器 ip/tmp/desc/
传输目标路径
服务监听模式
rsync 可开启服务监听模式来完成远程文件同步,设置完成后可直接在两台服务器间同步数据,而无需使用 ssh 隧道连接。在一定程度上相较于 ssh 同步模式安全(只有文件同步权限,ssh 同步模式则有链接 ssh 的权限),但同时需要在其中一端持续运行监听 rsync,并且需要完成一定的配置后才能进行同步
服务端配置
被连接的服务器为 rsync 的监听端(或称为服务端),即推送文件接收方或拉取文件的被拉取方需要在后台持续监听 rsync。
rsync 本身未提供配置文件,需要我们根据需要自行创建,其主要配置文件有以下三个:
rsyncd.conf
主配置文件rsyncd.passwd
用户名密码文件,一个用户一行,用户名与密码之间使用:
分隔rsyncd.motd
连接成功后的欢迎信息,没什么用
创建主配置文件,配置文件路径可以随意,在监听时指定即可,常用配置项如下:
# 设置 pid 文件位置 |
创建密码文件,一行一组用户名密码,用户名与密码之间使用 :
分隔,配置文件地址为主配置文件中指定的路径:
mkdir /etc/rsync |
启动监听,在实际应用中可使用 supervisor
来确保服务不会中断:
# /etc/rsync/rsyncd.conf 为 rsync 主配置文件 |
客户端
客户端只需安装 rsync 即可完成同步,不需要进行复杂的配置
从服务端同步到客户端,即从远端同步到本地
rsync -avz --delete rsync@192.198.2.188::test /tmp/sync/
从客户端同步到服务端,即从本地同步到远端
rsync -avz --delete /tmp/sync/ rsync@192.198.2.188::test
上述命令执行后会要求输入密码,密码即为服务端密码配置中的密码,使用得到账号必须在对应的模块注册过,详细参数解释:
-avz
同-a -v -z
,详情可参考前文 参数介绍--delete
如果本地目录删除了文件,同步删除远端文件rsync@192.198.2.188::test
rsync
服务端模块配置中配置的用户名192.198.2.188
远端服务器地址,需要在远端主配置文件中允许当前 ip 同步test
服务端主配置文件中的模块名,即被[]
包裹的内容
/tmp/sync/
本地目录地址,如果是/tmp/sync
则同步目录,/tmp/sync/
则是同步目录中的内容。如果是从远端同步到本地且此目录不存在,则 rsync 会自动创建目录
免密码同步
上述命令在执行后会有一个输入密码的交互,在自动同步脚本中可以创建一个密码验证文件来跳过此交互,此文件中只需指定连接用户对应的密码即可:
# 创建验证文件 |