rsync
1.rsync简介
rysnc是一种备份工具。支持增量备份和差异备份。rsync有三种备份方式,第一种是本地备份类似与cp命令,第二种是远程备份,类似与scp,使用的是ssh传输通道(需要进行ssh身份验证)。第三种是守护进程模式,需要有一台linux主机作为服务器监听端口,其他主要通过服务器的ip和端口进行访问(备份)操作
2.rsync用法
2.1选项
rsync有许多选项:
-n: 在不确定命令是否能按意愿执行时,务必要事先测试;-n可以完成此功能;
-v: –verbose,详细输出模式
-q: –quiet,静默模式
-c: –checksum,开启校验功能,强制对文件传输进行校验
-r: –recursive,递归复制;
-a: –archives,归档,保留文件的原有属性
-p: –perms 保留文件的权限
-t: –times 保留文件的时间戳
-l: –links 保留文件的符号链接
-g: –group 保留文件的属组
-o: –owner 保留文件的属主
-D: –devices 保留设备文件
-H, –hard-links 保留硬链结;
-S, –sparse 对稀疏文件进行特殊处理以节省DST的 空间;
-e ssh: 表示使用ssh协议作承载
-z: 对文件压缩后传输
–progress:显示进度条
–stats: 显示如何执行压缩和传输
–delete:删除那些DST中有而SRC没有的文件,即删除DST中多余的文件
2.2命令格式
1 |
|
由此语法可知,rsync有三种工作方式:
(1).本地文件系统上实现同步。命令行语法格式为上述”Local”段的格式。
(2).本地主机使用远程shell和远程主机通信。命令行语法格式为上述”Access via remote shell”段的格式。
(3).本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述”Access via rsync daemon”段的格式。
前两者的本质是通过管道通信,即使是远程shell。而方式(3)则是让远程主机上运行rsync服务,使其监听在一个端口上,等待客户端的连接。
2.3 配置文件
rsync配置文件一般为/etc/rsyncd.conf:
1 |
|
rsyncd.conf配置文件常用参数说明
1 |
|
3.实验
3.1 本地传输
文件同步
rsync -avz /etc/fstab /data/
目录同步
rsync -avz /data /opt
data 后面加/表示将data下的内容同步过去 不加/表示将data目录同步过去
–delete 让目标目录与原目录数据同步
3.2远程传输
备注:需要注意的是,远程传输方式使用的是ssh传输通道,ssh传输通道本身传输数据加密的,是安全的,但也有几个缺点:
1.用户权限问题
2.用户身份暴露(安全隐患)
3.文件路径暴露(安全隐患)
tcp传输过程,每传输一个数据都会有连接的建立,维护,断开过程。所以传输多个文件会比较慢
且两边都需要安装rsync程序。
第一次传输需要进行秘钥确定,且每次登陆需要输入密码,如不想输入密码,可生成秘钥并发送到远程主机。
使用ssh-keygen生成秘钥,并使用ssh-copy-id 发送至远程主机
此时传输数据便不会提示输入密码(ssh登陆亦是如此)
3.3 守护进程方式
守护进程方式需要一台机器作为server端,启动rsync deamon程序,监听端口,通过ip+socket来进行交互。
1.rpm -ql rsync查看rsync是否有安装(有的rsync把rsync与rsync-deamon分开,需要注意下)
如果没有的话则需要安装
yum -y install rsync-deamon rsync
2.编辑配置文件
vim /etc/rsyncd.conf
3.创建程序用户
useradd -M -s /sbin/nologin rsync
chown -R rsync.rsync /backup
4.创建目录
mkdir /backup && chown -R rsync.rsync /backup
5.创建虚拟用户认证文件
echo “rsync_backup:1” > /etc/rsync.password
chmod 600 rsync.password
6.启动守护进程
systemctl start rsyncd
使用rsync带上参数–password-file=xxx指定密码文件可以免输入密码
首先 echo 123456 > /etc/rsync_password; chmod 600 /etc/rsync_password
然后 rsync -avz xxx rsyncd_backup@192.168.1.1::bakcup –password-file=/etc/rsync_password
或者设置环境变量:
export RSYNC_PASSWORD =123456
这样不用跟上参数也可以免密码传输
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!