使用rsync备份数据
(1).实验环境与目标
源主机:youxi1 192.168.5.101
目标主机:youxi2 192.168.5.102
目标:将源主机youxi1的数据备份到youxi2上。
rsync是C/S模式,默认端口873
(2).rsync命令常用格式与常用选项、
常用格式:
rsync [OPTION] SRC [USER@]HOST:DEST //源主机执行的推送数据命令,需要目的主机执行守护进程
rsync [OPTION] SRC [USER@]HOST::DEST //与上一条命令类似,但使用的是非系统用户,并且需要配置文件
rsync [OPTION] [USER@]HOST:SRC [DEST] //目的主机执行的拉取数据命令,需要源主机执行守护进程
rsync [OPTION] [USER@]HOST::SRC [DEST] //与上一条命令类似,但使用的是非系统用户,并且需要配置文件
常用选项:
1 2 3 4 5 | -a,--archive 存档模式,相当于-rlptgoD -z,--compress 传输过程中压缩数据 -v,--verbose 复杂输出信息 --delete 删除目标中存在,而源中不存在的文件 --password-file=FILE 从FILE中读取密码 |
注意:-z选项适合杂碎文件的传输,如果是单个大文件传输并不适合使用此选项
(3).实验
1)检查是否安装了rsync和xinetd
1 2 3 4 | [root@youxi2 ~]# yum list installed | grep xinetd xinetd.x86_64 2:2.3.15-13.el7 @ base [root@youxi2 ~]# yum list installed | grep rsync rsync.x86_64 3.1.2-6.el7_6.1 @updates |
如果以上命令没有输出结果,那么请使用yum -y install xinetd rsync安装两个程序,并systemctl enable [服务名]设置为开机自启。
2)两台主机上创建同名用户,密码可以不一样
在主机youxi1上添加rsync1用户,密码为101101
1 2 3 4 | [root@youxi1 ~]# useradd rsync1 [root@youxi1 ~]# echo "101101" | passwd --stdin rsync1 更改用户 rsync1 的密码 。 passwd:所有的身份验证令牌已经成功更新。 |
在主机youxi2上添加rsync1用户,密码为102102
1 2 | [root@youxi2 ~]# useradd rsync1 [root@youxi2 ~]# echo "rsync1:102102" | chpasswd |
3)在主机youxi1上创建源文件夹,并给rsync1添加权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [root@youxi1 ~]# mkdir -p /www/html [root@youxi1 ~]# setfacl -m u:rsync1:rwx /www/html //目录设置ACL权限,如果存在文件或目录,可以使用-R选项遍历赋权 [root@youxi1 ~]# setfacl -m d:u:rsync1:rwx /www/html //目录设置默认ACL权限,新建的文件或目录将继承默认ACL权限 [root@youxi1 ~]# getfacl /www/html getfacl: Removing leading '/' from absolute path names # file: www/html # owner: root # group: root user::rwx user:rsync1:rwx group ::r-x mask::rwx other::r-x default :user::rwx default :user:rsync1:rwx default : group ::r-x default :mask::rwx default :other::r-x |
拷贝一些数据作为测试
1 2 3 4 | [root@youxi1 ~]# cp -r / var /* /www/html/ [root@youxi1 ~]# ls /www/html/ adm crash empty gopher lib lock mail opt run tmp cache db games kerberos local log nis preserve spool yp |
4)在主机youxi2上创建目的文件夹
1 2 3 4 | [root@youxi2 ~]# mkdir -p /backup/www/html [root@youxi2 ~]# chown rsync1:rsync1 /backup/www/html/ [root@youxi2 ~]# ls -ld /backup/www/html/ drwxr-xr-x 2 rsync1 rsync1 6 5月 15 11:16 /backup/www/html/ |
5)从主机youxi1上将数据推送到主机youxi2上
推送数据,命令会在源主机youxi1上执行,那么相应的需要目的主机youxi2监听。
目的主机youxi2执行监听(守护进程)
1 2 3 4 | [root@youxi2 ~]# rsync --daemon [root@youxi2 ~]# netstat -antup | grep 873 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1824/rsync tcp6 0 0 :::873 :::* LISTEN 1824/rsync |
源主机youxi1执行推送命令
1 2 | [root@youxi1 ~]# rsync -avz /www/html/ rsync1@192.168.5.102:/backup/www/html/ rsync1@192.168.5.102's password: |
最后到目的主机youxi2上查看是否成功
1 2 3 | [root@youxi2 ~]# ls /backup/www/html/ adm crash empty gopher lib lock mail opt run tmp cache db games kerberos local log nis preserve spool yp |
6)当然也可以在主机youxi2上拉取youxi1上的数据
拉取数据,命令会在目的主机youxi2上执行,那么相应的需要源主机youxi1监听
源主机youxi1执行监听(守护进程)
1 2 3 4 | [root@youxi1 ~]# rsync --daemon [root@youxi1 ~]# netstat -antup | grep 873 tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1947/rsync tcp6 0 0 :::873 :::* LISTEN 1947/rsync |
目的主机youxi2执行拉取命令
1 2 | [root@youxi2 ~]# rsync -avz rsync1@192.168.5.101:/www/html/ /backup/www/html/ rsync1@192.168.5.101's password: |
最后查看目的主机youxi2上是否成功
1 2 3 | [root@youxi2 ~]# ls /backup/www/html/ adm crash empty gopher lib lock mail opt run tmp cache db games kerberos local log nis preserve spool yp |
(4).使用非系统用户备份数据
1)配置文件说明
rsync的配置文件是/etc/rsyncd.conf,在执行rsync守护进程时调用。配置文件内分为全局参数和模块参数。
常见全局参数:
1 2 3 4 5 6 7 8 9 | port 指定端口号,默认873。 uid 指定传输文件时守护进程应该具有的uid,默认为nobody。配合gid可以确定访问权限。 gid 指定传输文件时守护进程应该具有的gid,默认为nobody。 max connections 指定最大连接数,默认为0,也就是没有限制。 lock file 指定支持max connections参数的锁文件,默认为/ var /run/rsyncd. lock 。 motd file 指定提示文件,连接时显示文件内容给连接者,默认没有。 log file 指定rsync的日志文件,而不将日志发送给syslog。 pid file 指定rsync的pid文件,一般指定为/ var /run/rsyncd.pid,存放进程ID的文件位置。 hosts allow 指定允许同步的客户机地址,可以是IP地址也可以是网段 |
常见模块参数:
1 2 3 4 5 6 7 8 9 10 11 12 | comment 对模块的描述,默认没有。 path 指定提供给模块的目录,必须指定。 read only 如果值是yes表示只允许下载,no既可以加载也可以上传 exclude 指定多个由空格隔开的文件或目录,不上传或下载(即不可访问),相当于命令中的--exclude=PATTERN或-f,--filter=RULE。 exclude from 从指定文件中读取exclude文件或目录列表,换行符分隔。 include 指定不排除符合要求的文件或目录,相当于命令中的--include=PATTERN。 include from 从指定文件读取include文件或目录列表,换行符分隔。 auth users 指定允许连接该模块的用户名列表,用空格或逗号分隔,与系统用户无关。用户名和密码以明文方式存在在secrets file参数的文件中。 secrets file 指定包含“username:password”对的文件,换行符分隔,只有auth users参数被指定,才生效。 hosts allow 指定允许同步的客户机地址,可以是IP地址也可以是网段 list 设定当请求使用模块列表时,该模块是否被列出。 false 隐藏,默认值为 true 显示 timeout 超时时间,默认为0,没有超时时间。理想数值600。 |
2)使用非系统用户从源主机youxi1上将数据推送到目标主机youxi2上
在目标主机youxi2上配置rsync.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@youxi2 ~]# cat /etc/rsyncd.conf uid = root //运行进程的用户 gid = root //运行进程的组 address = 192.168.5.102 //监听地址 port = 873 //监听端口号 hosts allow = 192.168.5.101/24 //允许同步的IP地址 use chroot = yes //是否锁定家目录,rsync被黑后,黑客无法在rsync运行的家目录之外创建文件。 max connections = 5 //最大连接数 pid file = / var /run/rsyncd.pid //进程ID存放文件,自动生成 lock file = / var /run/rsync. lock //max connections参数的锁文件 log file = / var /log/rsyncd.log //日志文件位置 motd file = /etc/rsyncd.motd //提示信息存放文件位置 [backupwwwhtml] //模块名 path = /backup/www/html //模块运行路径 comment = backup /www/html/ //描述 read only = false //上传下载权限 list = yes //允许查看模块信息 auth users = rsync2 //非系统用户名 secrets file = /etc/rsync.passwd //存放密码文件 |
在目标主机youxi2上创建密码文件,并限制权限
1 2 3 | [root@youxi2 ~]# cat /etc/rsync.passwd rsync2:102102 [root@youxi2 ~]# chmod 600 /etc/rsync.passwd |
启动rsync的守护进程,并指定使用/etc/rsyncd.conf配置文件
1 2 3 | [root@youxi2 ~]# rsync --daemon --config=/etc/rsyncd.conf [root@youxi2 ~]# netstat -antup | grep rsync tcp 0 0 192.168.5.102:873 0.0.0.0:* LISTEN 1384/rsync |
在目标主机youxi2上添加端口号
1 2 3 4 | [root@youxi2 sysconfig]# firewall-cmd --permanent --zone= public --add-port=873/tcp success [root@youxi2 sysconfig]# firewall-cmd reload success |
最后在源主机youxi1上执行推送命令
1 2 3 | [root@youxi1 ~]# rsync -avz /www/html/ rsync2@192.168.5.102::backupwwwhtml Password: |
3)使用非系统用户在目标主机youxi2上拉取源主机youxi1的数据
在源主机youxi1上配置rsync.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@youxi1 ~]# cat /etc/rsyncd.conf uid = root gid = root address = 192.168.5.101 port = 873 hosts allow = 192.168.5.102/24 use chroot = yes max connections = 5 pid file = / var /run/rsyncd.pid lock file = / var /run/rsync. lock log file = / var /log/rsyncd.log motd file = /etc/rsyncd.motd [backup] path = /www/html comment = backup /www/html read only = no list = yes auth users = rsync3 secrets file = /etc/rsync.passwd |
在源主机youxi1上创建密码文件,并限制权限
1 2 3 | [root@youxi1 ~]# cat /etc/rsync.passwd rsync3:101101 [root@youxi1 ~]# chmod 600 /etc/rsync.passwd |
启动rsync的守护进程,并读取配置文件/etc/rsyncd.conf
1 2 3 | [root@youxi1 ~]# rsync --daemon --config=/etc/rsyncd.conf [root@youxi1 ~]# netstat -antup | grep rsync tcp 0 0 192.168.5.101:873 0.0.0.0:* LISTEN 2188/rsync |
在源主机youxi1上添加端口
1 2 3 4 | [root@youxi1 ~]# firewall-cmd --permanent --zone= public --add-port=873/tcp success [root@youxi1 ~]# firewall-cmd --reload success |
在目标主机youxi2上执行拉取命令
1 2 3 | [root@youxi2 ~]# rsync -avz rsync3@192.168.5.101::backup /backup/www/html/ Password: |
注意:如果不想每次备份数据都输入一次命令,或需要进行定时计划任务,可以使用--password-file=FILE选项,将密码保存到文件中使用选项调用。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性