任何时候数据备份都是十分重要的,但当你的工作目录经常编辑时,你就需要时常进行备份操作,不但挺麻烦的而且每次执行备份操作可能会占大量的带宽或磁盘资源,如果有款软件能够自动对比源文件夹和备份文件夹,仅更新变更部分,那岂不是非常方便。没错,这么好用的东西早已经预装在了几乎所有Linux发行版本,就是rsync。
需求:实现两台Linux主机文件夹定期自动同步。
环境:操作系统Ubuntu 16.04rsync版本3.1.1
Step 0 简介
rysnc支持两种运行模式,一种是直接通过shell使用,另外一种是通过socket以deamon的形式使用。
简短截说,通过shell使用有点类似于scp,通过22端口使用对端操作系统用户名口令进行交互式认证后进行操作;
而通过socket以deamon的形式则有点类似于ftp,服务端开放873端口供客户端连接,认证方式支持基于password-file的非交互式认证。
我现在需要服务器能够自动定期备份数据,而crontab我不知道怎么配置交互式的命令,所以就准备采用daemon的方式运行。这种方式有个缺点是额外开放了个端口,增加了系统的安全风险,不过采用这种方式认证用户不是操作系统用户,而且也有强制认证和IP白名单等措施,也算马马虎虎吧。
Step 1 rsync --daemon配置
虽然操作系统已经预装了rysnc,但是服务默认是不开启的,按以下步骤开启服务端。
①创建配置文件
cp /usr/share/doc/rsync/examples/rsyncd.conf /etc
只要把示例的文件copy过来就行。
②修改配置文件
如果你还记得菜鸟跟你一起学搭建Samba服务器,那么你会发现rsync的配置文件有点像,都是分为全局配置和模块配置两大部分。
示例的配置文件要改的地方不是很多,以下逐一说明:
[模块名]这个可以自定义,后面客户端访问的时候会使用到[模块名];
read only = false因为我是从客户端向服务端推数据,所以需要可写;
uid和gid指定了客户端推过来的文件权限分配给谁;
hosts allow允许的客户端IP;
dont compress指定哪些文件传输时不压缩;
auth users客户端认证时允许的用户
secrets file密码文件,每行是 用户名:口令
*记得手动创建密码文件。
③开启服务
使用rsync --daemon命令即可开启服务。
④配置开机启动
貌似有很多办法实现开机启动,也有说只要修改/etc/default/rsync就行,但是可能是我比较菜,最终采取了修改/etc/rc.local的方式,在rc.local中添加rsync --daemon即可。
*程序开机自启具体是怎样一个过程我还不是太明白,以后有机会再慢慢搞明白吧。
Step 2 客户端操作
rsync命令参数非常多,就不一一列举了,有兴趣的可以自己百度,主要介绍下常用的方式。以下命令会把本地源目录推至服务端对应模块的对应目录:
rsync -avz --password-file=/etc/rsync.passwd 本地源目录 用户名@服务器IP::模块名 --delete
其中:
-a代表归档模式,简单理解就是保证源目的文件夹一模一样。
-v代表开启信息输出
-z代表传输前进行压缩
--delete代表删除目的目录比源目录多的内容
与服务端有区别的是/etc/rsync.passwd这个文件只用写口令即可,不用写用户名。
rsync区分源目的目录就是在命令中的先后顺序,在前面的就是源目录,所以怎么从服务端拉数据应该也不用多说了。
最后把调试好的命令放到crontab里定期执行就OK了。
*rsync能配置的参数还很多,例如说配置排除的文件、配置同步的文件大小、时间,是否保留上个版本的文件等等等等……不过暂时还是不研究了。
*另外rsync也有比较傻的一点,如果只是重命名了文件夹,在同步的时候会删除这个文件夹包括里面所有的东西,然后再重新copy一份,所以改名字要慎重,也有可能是我没研究透吧,嘛。
以上。
领取专属 10元无门槛券
私享最新 技术干货