1. rsync概述
1.1 rsync简介
rsync 是一种非常强大的文件传输工具,它在 Unix-like 系统中广泛使用,用于同步文件和目录。以下是对您提供信息的简要概述和补充:
rsync 的基本功能:
全量同步:复制客户端的所有文件到服务器,不考虑服务器上已有的文件。
增量同步:仅同步自上次同步以来发生变化的文件,这样可以节省带宽和时间。
rsync 的使用场景:
备份服务:结合定时任务(如 cron job),可以实现自动化的定期备份。
数据同步:在多台服务器之间同步数据,保持数据一致性。
rsync 的默认端口:
rsync 默认使用 873 端口,但也可以通过命令行参数自定义端口。
rsync 的运行模式:
客户端/服务器模式:rsync 可以作为守护进程在服务器上运行,客户端通过命令行与之通信。
rsync 的备份示例:
如果客户端有文件 xyz1, xyz2, xyz3,而服务器上只有 xyz1,使用 rsync 可以:
完全备份:将所有文件复制到服务器,包括重复的 xyz1。
增量备份:只复制 xyz2 和 xyz3 到服务器。
rsync 的传输方式:
push(推):从客户端推送数据到服务器。
pull(拉):从服务器拉取数据到客户端。
rsync 的传输模式:
本地模式:在本地文件系统内复制文件,不支持网络传输。
远程模式:通过网络在远程主机之间复制文件,支持增量和差异备份。
守护进程模式:rsync 作为守护进程运行,等待客户端的连接请求。
使用 rsync 时,可以通过命令行参数来控制同步的行为,例如 -a(归档模式,保留原有属性)、-v(详细模式,显示更多信息)、--incremental(增量备份)等。此外,rsync 还支持通过 SSH 进行加密传输,增加了数据传输的安全性。
1.2 rsync官网
https://rsync.samba.org
GitHub - RsyncProject/rsync: An open source utility that provides fast incremental file transfer. It also has useful features for backup and restore operations among many other use cases.
1.3 rsync直接安装
[root@node1 ~]# yum install rsync -y
2.rsync使用
2.1 参数
-a 或 --archive:归档模式,等效于 -rlptgoD(不包括 -A、-X、-U、-N、-H)。这个选项会保留符号链接、设备文件、权限、属主和组信息。
-v 或 --verbose:详细模式,显示传输过程中的详细信息。
-z 或 --compress:在传输文件的同时压缩数据,节省网络带宽。
-e 或 --rsh=COMMAND:指定远程 shell 命令,默认为ssh的22号端口。
-r 或 --recursive:递归地复制目录及其子目录。
-h 或 --human-readable:以人类可读的格式输出数字
-O或--omit-dir-times 是 rsync 命令的一个选项,用于在同步过程中忽略目录的修改时间
-H 保留源文件的硬链接文件
-n 或 --dry-run:试运行模式,不会真正执行任何操作,只显示会发生的变化。
-b 或 --backup:在数据同步期间进行备份。
-u 或 --update:跳过目标机器上新的文件。
-p 或 --perms:保留文件权限。
-t 或 --times:保留文件修改时间。
-o 保留文件的属主标记
--exclude=PATTERN 指定排除不需要传输的文件模式
-progress:显示传输进度。
2.2 rsync模式
rsync 支持两种操作模式:推(push)和拉(pull)。这两种模式的区别在于你在命令行中首先指定的是源文件还是目标文件。
推(Push):如果你首先指定的是本地文件,那么就会启动一个推操作。在这种情况下,你要将本地文件同步到远程服务器上。
拉(Pull):如果你首先指定的是远程文件,那么就会启动一个拉操作。在这种情况下,你要从远程服务器上同步文件到本地服务器
2.2.1 push推
# node1
[root@node1 ~]# echo 'iyuyi.xyz@aliyun.com' >> /opt/xyz.txt
[root@node1 ~]# rsync -a /opt/xyz.txt 192.168.110.143:/opt/ #将opt下的文件xyz.txt向node2的/opt目录下
Authorized users only. All activities may be monitored and reported.
# node2
[root@node2 ~]# ll /opt/
total 8
drwxr-xr-x. 4 root root 4096 Jan 24 18:21 patch_workspace
-rw-r--r--. 1 root root 21 Jan 24 18:20 xyz.txt
[root@node2 ~]# cat /opt/xyz.txt
iyuyi.xyz@aliyun.com
2.2.2 pull拉
[root@node1 ~]# rsync -a 192.168.110.143:/opt/ ./ #将node2的/opt目录的内容拉到本地
[root@node1 ~]# ll
total 12
-rw-------. 1 root root 1066 Jan 21 14:59 anaconda-ks.cfg
drwxr-xr-x. 2 root root 4096 Jan 21 19:31 mysql
-rw-r--r--. 1 root root 21 Jan 24 18:20 xyz.txt
[root@node1 ~]# cat xyz.txt
iyuyi.xyz@aliyun.com
简单来说,推就是把自己文件推的给别人,拉就是把别人文件的拉过给自己
2.3 rsync守护进程
Rsync守护进程,通常被称为rsyncd,是一个在后台运行并等待客户端连接的服务器。它允许你在没有SSH访问的情况下同步文件
配置node1为服务端
2.3.1 Rsync 配置文件
[root@node1 ~]# vim /etc/rsyncd.conf #默认打开都是注释(可以当模板),谁是服务端配谁
uid = rsync #指定运行rsync守护进程的用户
gid = rsync #指定运行rsync守护进程的组
use chroot =no #不使用chroot安全机制选项,chroot指定系统目录结构的位置,关闭则默认从/根开始
max connections = 100 #最大连接数
timeout = 300 #超时时间,超时则断开连接
pid file = /var/run/rsyncd.pid #存储rsync守护进程的进程ID的文件的路径
lock file = /var/run/rsync.lock #存储rsync守护进程的锁文件的路径
log file = /var/log/rsyncd.log
ignore errors #忽略错误
dont commpress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 #指定在rsync守护进程传输文件时不进行压缩的文件,后面是不压缩文件的扩展名
hosts allow= 192.168.110.0/24 #允许192.168.110.0/24 访问的网段,这里写自己的
hosts deny =0.0.0.0/32 #0.0.0.0/32,表示拒绝所有IP地址的连接
fake super =yes #指定rsync守护进程是否假装拥有root权限,无需使用root用户启动,解决故障(必须配置,不配置无法启动服务)
auth users = rsync_backup #指定rsync守护进程的认证用户,虚拟用户不用创建
secrets file= /etc/rsync.passwd #指定rsync守护进程的用户密码文件的路径
[bak] #[bak] 是一个模块的定义。模块是一个目录,客户端可以访问这个目录,进行文件的同步,可以定义多个
comment = my backup #对这个模块的备注,随便写
path = /backup #块的物理路径,也就是这个模块在服务器上的实际目录
read only= false #是否只读
list = false #是否允许客户端列出这个模块的内容
[root@node1 ~]# mkdir /backup #创建上传的目录
# 其他选项
--delete 表示:目标和源目录数据保持一致 /home/xyz/ 后面得有斜线(注意一般是小的向大的同步,不要搞反,不然文件会丢失)
rsync -avz --delete /opt/demo.txt rsync_backup_xyz@::backup --password-file=/etc/rsync.passwd
--exclude-from 参数指定排除多个数据信息文件(排除一些文件,加-from可以指定一个脚本,里面写多个要排除的文件)
rsync -avz /home/xyz/ --exclude-from= rsync_backup_xyz@10.0.1.51::backup–password-file=/etc/rsync.passwd
启动
[root@node1 ~]# useradd rsync -s /sbin/nologin -M #创建用户,/sbin/nologin这个用户不需要登录不设置家目录,-M不创建用户的家目录
[root@node1 ~]# cat > /etc/rsync.passwd << EOF # 配置用户名(虚拟用户)和密码
rsync_backup:123456
EOF
[root@node1 ~]# chmod 600 /etc/rsync.passwd #将该文件权限设置为600(必须设置否则传不了
[root@node1 ~]# ll /etc/rsync.passwd
-rw-------. 1 root root 20 Jan 24 20:05 /etc/rsync.passwd
[root@node1 ~]# setfacl -R -m u:rsync:rwx /backup/ #修改用户目录权限,也可以用chown
[root@node1 ~]# systemctl start rsyncd #启动服务
测试
# node2
[root@node2 ~]# echo " hello " > /opt/xyz.txt
[root@node2 ~]# rsync -avz /opt/xyz.txt rsync_backup@192.168.110.142::bak
Password:
sending incremental file list
xyz.txt
sent 127 bytes received 43 bytes 11.72 bytes/sec
total size is 15 speedup is 0.09
# node1
[root@node1 ~]# ll /backup/
total 8
-rw-r--r--. 1 rsync rsync 15 Jan 24 20:29 xyz.txt
[root@node1 ~]# cat /backup/xyz.txt #成功传输
hello
配置免密操作
配置免密操作
# node2
[root@node2 ~]# echo "123456" >> /etc/rsync.passwd #直接写密码到一个文件
[root@node2 ~]# chmod 600 /etc/rsync.passwd #权限也是600
[root@node2 ~]# echo "kdsg" >> /opt/xyz.txt #再追加内容,放便测试
[root@node2 ~]# rsync -avz /opt/xyz.txt rsync_backup@192.168.110.142::bak --password-file=/etc/rsync.passwd #指定密码文件,即可免密传输
sending incremental file list
xyz.txt
sent 132 bytes received 49 bytes 17.24 bytes/sec
total size is 20 speedup is 0.11
# node1
[root@node1 ~]# cat /backup/xyz.txt #成功传输
hello
2.4 补充命令
2.4.1 setfacl命令
setfacl 是 Linux 中的一个命令,全称为 Set File Access Control List,用于设置文件和目录的访问控制列表(Access Control Lists,ACLs)。与传统的文件权限(如读、写和执行)不同,ACLs 提供了更详细的控制级别,允许用户为特定的用户和组指定权限
2.4.2 参数
-m 或 --modify=acl:修改文件或目录的 ACL。
-M 或 --modify-file=file:从文件中读取 ACL 条目进行修改。
-x 或 --remove=acl:从文件或目录的 ACL 中移除指定的条目。
-X 或 --remove-file=file:从文件中读取 ACL 条目进行移除。
-b 或 --remove-all:移除所有的扩展 ACL 条目。
-k 或 --remove-default:移除默认的 ACL。
--set=acl:设置文件或目录的 ACL,替换当前的 ACL。
--set-file=file:从文件中读取 ACL 条目进行设置。
--mask:重新计算有效权限掩码。
-n 或 --no-mask:不重新计算有效权限掩码。
-d 或 --default:操作应用于默认的 ACL。
-R 或 --recursive:递归进入子目录。
-L 或 --logical:逻辑步行,跟随符号链接。
-P 或 --physical:物理步行,不跟随符号链接。
--restore=file:恢复 ACLs(getfacl -R 的反向操作)。
--test:测试模式(ACLs 不被修改)。
-v 或 --version:打印版本并退出。
-h 或 --help:打印帮助文本。
2.4.3 示例
[root@node2 ~]# setfacl -m u:user:rwx file #用户 'user' 添加了对文件 'file' 的读、写和执行权限
[root@node2 ~]# setfacl -R -m u:user:rwx /test #用户 'user' 添加了对目录test及其所有子目录的读、写和执行权限
[root@node2 ~]# setfacl -x u:user file