--- title: "rsync 命令" date: 2019-10-29T21:21:14+08:00 lastmod: 2019-10-29T21:21:14+08:00 keywords: [] tags: ["rsync", "同步"] categories: ["shell"] --- ## 简介 - rsync(Remote Sync,远程同步)是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。 - 支持: - 本地复制 - 与其他SSH同步 - 与rsync主机同步 ## rsyncd 源服务 - 创建 rsync 配置文件 /etc/rsyncd.conf,内容如下 ```ini # 限制客户端登陆身份为 nobody:nobody uid = nobody gid = nobody # 禁锢在源目录下 use chroot = yes # 指定监听端口,默认监听 tcp 873 端口 port = 873 # 指定监听地址,默认监听全部网卡 address = 192.168.1.101 # 允许访问的客户端地址 hosts allow = 192.168.1.0/24 max connections = 4 # 日志位置 log file = /var/log/rsyncd.log # PID 文件位置 pid file = /var/run/rsyncd.pid exclude = lost+found/ transfer logging = yes timeout = 900 ignore nonreadable = yes # 同步时不压缩的文件类型 dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # 账户文件,每行格式 user:password,权限 600 secrets file = /etc/rsyncd_users.db [data1] # 源目录实际路径,注意该目录需要对 nobody 用户可读 path = /path/to/data1 # 描述 comment = sth about dir data1 # 只读 read only = yes # 授权账户 auth users = backuper ``` - 创建备份帐号信息 ```bash echo 'backuper:123456' > /etc/rsyncd_users.db chmod 0600 /etc/rsyncd_users.db ``` - 启动 rsyncd 服务 ```bash systemctl start rsyncd ``` ## rsync 命令选项 - -r: 递归模式,包含目录及子目录中所有文件 - -l: 对于符号链接文件仍然复制为符号链接文件 - -p: 保留文件的权限标记 - -t: 保留文件的时间标记 - -g: 保留文件的属组标记(仅超级用户使用) - -o: 保留文件的属主标记(仅超级用户使用) - -D: 保留设备文件及其他特殊文件 - -a: 归档模式,递归并保留对象属性,等同于 -rlptgoD - -v: 显示同步过程的详细(verbose)信息 - -z: 在传输文件时进行压缩(compress) - -H: 保留硬连接文件 - -A: 保留ACL属性信息 - --delete: 删除目标位置有而原始位置没有的文件 - --checksum: 根据对象的校验和来决定是否跳过文件 - --password-file: 指定包含密码的文件 ## 简单使用 - 本地复制,类似 cp 命令 ```bash rsync -a /etc/passwd 123.txt ``` - 与其他 ssh 同步 ```bash rsync -av root@192.168.1.100:/root/123.txt . ``` - 与 rsync 主机同步 ```bash rsync -avz backuper@192.168.1.100::data1 /root # 或者 rsync -avz rsync://backuper@192.168.1.100/data1 /root ``` - 向同步源服务上传文件时,直接调换源参数和目的参数,注意客户端可写上传目录 ## 参考 - [https://www.linuxidc.com/Linux/2019-08/160108.htm](https://www.linuxidc.com/Linux/2019-08/160108.htm)