rsync简介
rsync是linux系统下的数据镜像备份工具,支持增量备份,比cp,scp等命令要强大的多
Rsync的特性
- 支持拷贝特殊文件,例如链接文件,设备等等。
- 可以做到保持原文件的权限,时间,属主属组,软链接,硬链接等所有属性均不改变(与原来一摸一样)。
- 有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
- 可以实现增量同步,即只同步发生变化的数据,正是如此,传输效率很高(tar -N可以实现增量同步)。
- 可以使用rcp,rsh,ssh等方式配合传输文件(rsync本身不对数据进行加密)。
- 可以通过socket(进程方式)传输文件和数据(服务端和客户端)
- 支持匿名的或认证(无需系统用户)的进程模式传输,可实现安全方便的进行数据备份和镜像。
常用参数选项说明
参数 | 说明 |
---|---|
-v, --verbose | 详细模式输出,传输时的进度等信息 |
-r, --recursive | 对子目录予以递归模式,即目录下的所有目录都同样传输 |
-a, --archive | 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgD |
-z, --compress | 传输时进行压缩以提高传输效率, |
-t, --times | 保持文件时间信息 |
-o, --owner | 保持文件属主信息 |
-p, --perms | 保持文件权限 |
-g, --group | 保持文件属组信息 |
-P, --progress | 显示同步的过程及传输时的进度等信息 |
-D,–devices | 保持设备文件信息 |
-l | 保持软连接 |
-e | –rsh=COMMAND指定替代rsh的shell程序 |
系统版本
三种使用方式
服务端主机名backup
客户端主机名oldboy
本地模式:我们将/etc/hosts备份到/mnt目录下
这里没有加任何参数,所以属性会不一样
通过远程shell使用
客户端使用rsync命令
从客户端传过来的文件,对比属性与客户端一样
第三种方式单独说一下,涉及到服务端daemon的配置
1.服务器有没有rsync,没有的话安装一下
rpm -qa rsync
2.添加rsync服务的用户,管理本地目录
linux一切文件或目录都有一个对应的用户
执行adduser -s /sbin/nologin -M rsync
-s 指定用户登录使用的shell,这里选nologin,即虚拟用户,不让登录命令行的。
-M不创建用户家目录,linux创建用户会默认创建一个家目录。
id rsync
3.生成rsyncd.conf配置文件,具体作用可以man rsyncd.conf来查看
这个文件默认不存在,需要自己创建
我们直接vi /etc/rsyncd.conf
4.根据rsyncd.conf的auth user配置账户,以及secrets file参数来生成密码文件
echo ‘rsync_backup:123456’ > /etc/rsync.password
cat /etc/rsync.password
5.为密码文件配置权限,不能谁都能看到,那就没意思了。
chmod 600 /etc/rsync.password
ls -l /etc/rsync.password
6.创建共享目录并且授权rsync服务管理
mkdir /backup
chown -R rsync.rsync /backup
7.启动rsync服务并检查
rsync --daemon
ps -ef|grep ‘rsync’|grep -v ‘grep’
lsof -i :873(rsync默认在873端口)
8.加入开机自启动
echo “/usr/bin/rsync --daemon” >> /etc/rc.local
tail -l /etc/rc.local
服务端到此结束
客户端只需要生成连接服务器需要的密码文件即可
继续为密码文件配置权限600
使用第三种方式备份
在客户端/backup里创建100个文件
touch stu{001…100}
使用rsync命令备份到服务器/backup目录下
rsync -avz /backup/ rsync_backup@172.16.1.41::backup/ --password-file=/etc/rsync.password
rsync -avz 命令加属性
/backup 备份这个目录的内容,包括目录,只要目录下的内容多加个/(/backup/)
rsync_backup 配置文件里的auth users
@172.16.1.41指定服务器
::固定格式
backup/ 配置文件里的模块名
后面的就是指定使用客户端里的密码文件
可能出现这种问题:服务端防火墙没关,导致客户端连接不上,telnet查看出原因
关掉服务器防火墙
/etc/init.d/iptables stop