rsync选项 | ||
---|---|---|
-a | -rlptgoD | |
-v | 显示过程 | |
-p | 保持属性不变 | |
-t | 保持修改时间不变 | |
-z | 数据压缩 | |
--bwlimit | 限速 | |
-P | 显示传输速率 | |
--delete | 删除目标中内容,与源目录一模一样。(数据同步) |
rsync:是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。
全量:将全部数据,进行传输覆盖
增量:只传输差异部分的数据
Rsync特性:
支持拷贝普通文件与特殊文件如链接文件,设备等。
可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
#tar zcvf backup_1.tar.gz /opt/data --exclude=clsn 说明:在打包/opt/data时就排除了clsn命名的目录和文件。
可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变-p。
可实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar -N)。
# 将备份/home 目录自 2008-01-29 以来修改过的文件 # tar -N 2008-01-29 -zcvf /backups/inc-backup$(date +%F).tar.gz /home # 将备份 /home 目录昨天以来修改过的文件 # tar -N $(date -d yesterday "+%F") -zcvf /backups/inc-backup$(date +%F).tar.gz /home # 添加文件到已经打包的文件 # tar -rf all.tar *.gif 说明:这条命令是将所有.gif的文件增加到all.tar的包里面去。-r是表示增加文件的意思。
可以使用rcp,rsh,ssh等方式来配合进行隧道加密传输文件(rsync本身不对数据加密)
可以通过socket(进程方式)传输文件和数据(服务端和客户端)*。重点掌握
支持匿名的或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像
2.3:本地模式
#-a
[root@prometheus tmp]# rsync -a /root/shellscript/ /opt/
2.4:远程模式
#scp 源文件 用户@IP:目标目录【全量】
#-r传目录
[root@prometheus opt]# scp /etc/hosts root@10.0.0.55:/tmp
#增量备份
[root@prometheus opt]# rsync -a /etc root@10.0.0.55:/tmp/
2.5:推与拉
#拉取
[root@prometheus opt]# rsync -a root@10.0.0.55:/tmp/ /etc
2.6:异地传输:数据压缩+限速
#-z -avz 压缩
#--bwlimit 限速
[root@prometheus opt]# rsync -a --bwlimit 1M root@10.0.0.55:/tmp/ /etc
守护进程:持续运行的进程,也可以叫做服务。
服务一般分为:客户端和服务端
服务端:Linux服务器上运行的各种服务软件
客户端:Linux中客户端可能是一个命令,也可能是app,小程序
rsync守护进程模式与远程模式
1.远程模式,用户每次输入用户名和密码
2.远程模式,需要使用系统已经存在的可登录的而用户(root)
3.远程模式,每个用户都可以使用,在任何地方都可以使用
4.一般用户临时传输数据,(scp/rsync)
1.rsync守护进程模式,通过配置文件设置密码
2.rsync守护进程模式,通过配置文件设置用户和密码(设置用户和密码 )
3.rsync守护进程模式,可以通过配置文件控制IP,网段。
4.rsync守护进程模式,与定时任务配合定时传输数据
3.1:实战搭建指南
rsync服务端配置文件/etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connetions = 2000
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
fake super = yes
list = false
hosts allow = 10.0.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
#####################
[backup]
comment = this is hems writter
path = /backup
uid = rsync #程序属主
gid = rsync #程序属组
use chroot = no # 是否root账户
max connetions = 2000 #最大连接的客户端数量
timeout = 300 #超时时间,超时自动断开,需要服务再主动连接
pid file = /var/run/rsyncd.pid #pid文件存放地址
lock file = /var/run/rsync.lock #锁文件地址
log file = /var/log/rsyncd.log #日志文件存放目录
ignore errors #忽略错误
read only = false #表示可读可写
fake super = yes #无需让rsync以root身份运行即可保持文件完整属性
list = false #表示可以远程列表
hosts allow = 10.0.0.0/24 #允许主机地址
hosts deny = 0.0.0.0/32 #拒绝主机地址
auth users = rsync_backup #运行服务的用户
secrets file = /etc/rsync.password #密码文件
#####################
[backup] #模块名字
comment = this is hems writter #注释
path = /backup #需要备份的目录,最好和模块名字一样,方便查找
创建用户
[root@backup_55 /]# useradd -M -s /sbin/nologin rsync
创建密码文件
[root@backup_55 /]# echo 'rsync_backup:123456' > /etc/rsync.password
#修改密码文件权限
[root@backup_55 /]# chmod 600 /etc/rsync.password
创建共享目录
[root@backup_55 /]# mkdir /backup
#修改目录所有者
[root@backup_55 /]# chown rsync.rsync /backup/
[root@backup_55 /]# ll -d /backup/
设置开机自启&重启服务
[root@backup_55 /]# systemctl enable rsyncd
Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd.service to /usr/lib/systemd/system/rsyncd.service.
[root@backup_55 /]# systemctl start rsyncd
[root@backup_55 /]# systemctl status rsyncd
● rsyncd.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2023-04-11 18:44:44 CST; 1s ago
Main PID: 10701 (rsync)
CGroup: /system.slice/rsyncd.service
└─10701 /usr/bin/rsync --daemon --no-detach
Apr 11 18:44:44 backup_55 systemd[1]: Started fast remote file copy program daemon.
Apr 11 18:44:44 backup_55 rsyncd[10701]: Unknown Parameter encountered: "max connetions"
Apr 11 18:44:44 backup_55 rsyncd[10701]: IGNORING unknown parameter "max connetions"
Apr 11 18:44:44 backup_55 rsyncd[10701]: params.c:Parameter() - Ignoring badly formed line in config file: ignore errors
Apr 11 18:44:44 backup_55 rsyncd[10701]: rsyncd version 3.1.2 starting, listening on port 873
[root@backup_55 /]# ps -ef |grep rsync
root 10701 1 0 18:44 ? 00:00:00 /usr/bin/rsync --daemon --no-detach
root 10705 10203 0 18:46 pts/0 00:00:00 grep --color=auto rsync
[root@backup_55 /]# ss -lntup| grep rsync
tcp LISTEN 0 5 *:873 *:* users:(("rsync",pid=10701,fd=3))
tcp LISTEN 0 5 :::873 :::* users:(("rsync",pid=10701,fd=5))
测试服务端
[root@backup_55 backup]# rsync -avz /etc/hostname rsync_backup@10.0.0.55::backup
Password:
sending incremental file list
hostname
sent 105 bytes received 43 bytes 32.89 bytes/sec
total size is 10 speedup is 0.07
报错
加上参数 fake super = yes #无需让rsync以root身份运行即可保持文件完整属性
[root@backup_55 backup]# rsync -avz /etc/hostname rsync_backup@10.0.0.55::backup
Password:
sending incremental file list
hostname
rsync: chgrp ".hostname.XdALw8" (in backup) failed: Operation not permitted (1)
sent 105 bytes received 127 bytes 66.29 bytes/sec
total size is 10 speedup is 0.04
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1178) [sender=3.1.2]
[root@prometheus ~]# echo '123456' >/etc/rsync.pass
[root@prometheus ~]# cat /etc/rsync.pass
123456
[root@prometheus ~]# chmod 600 /etc/rsync.pass
[root@prometheus ~]# rsync -avz /etc/hosts rsync_backup@10.0.0.55::backup --password-file=/etc/rsync.pass
sending incremental file list
sent 47 bytes received 20 bytes 134.00 bytes/sec
total size is 266 speedup is 3.97