作为一个运维工程师,面对的服务器的数量可能非常多,在学会使用ansible、saltstack的同时,环境和数据的同步也是必不可少的技能。
说到"同步",就不得不说到rsync。rsync不但可以在本机进行文件同步,还可以作为远程同步的工具。
下面是梳理的一些常用的rsync命令
一、rsync同步命令中常用的几个参数说明
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等价于 -rlptgoD (注意不包括 -H)
-v, --verbose 详细输出模式
-r, --recursive 对子目录以递归模式处理
-l, --links 保持软链接文件,加上这个参数,同步过来的文件会保持之前的软链接属性不变
-H, --hard-links 保持硬链接文件
-p, --perms 保持文件权限
-t, --times 保持文件时间信息
-g, --group 保持文件属组信息
-o, --owner 保持文件属主信息 (super-user only)
-D 保持设备文件和特殊文件 (super-user only)
-e, --rsh=COMMAND 指定替代 rsh 的 shell 程序
-z, --compress 在传输文件时进行压缩处理
--stats 给出某些文件的传输状态
--progress 在传输时显示传输过程
--timeout=TIME 同步过程中,IP超时时间,单位为秒
--exclude=PATTERN 指定同步时需要过滤掉的文件或子目录(即不需要同步过去的),后面直接跟不需要同步的单个文件名或子目录(不需要跟路径) ,过滤多个文件或子目录,就使用多个--exclude
--exclude-from=FILE 指定同步时需要过滤掉的文件或子目录,后面跟文件(比如/root/exclue.txt),然后将不需要同步的文件和子目录放到/root/exclue.txt下
--include=PATTERN 指定需要传输的文件匹配模式
--include-from=FILE 从 FILE 中读取包含规则
--copy-unsafe-links 拷贝指向SRC路径目录树以外的链接文件
--safe-links 忽略指向SRC路径目录树以外的链接文件(默认)
--existing 仅仅更新那些已经存在于接收端的文件,而不备份那些新创建的文件
--ignore-existing 忽略那些已经存在于接收端的文件,仅备份那些新创建的文件
-b, --backup 当有变化时,对目标目录中的旧版文件进行备份
--backup-dir=DIR 与 -b 结合使用,将备份的文件存到 DIR 目录中
--link-dest=DIR 当文件未改变时基于 DIR 创建硬链接文件
--delete 删除那些目标目录中有而源目录中没有的多余文件。这个是rsync做增量方式的全备份的最佳选择方案!!!!!
--delete-before 接受者在输出之前进行删除操作。即先将目标目录中文件全部删除,再将源目录文件拷贝过去。这是rsync保持目标目录跟源目录一致的方案!!!
--delete-after 在同步操作之后做比较,删除那些目标目录中有而源目录中没有的多余文件
--delete-excluded 删除目标目录中那些被该选项指定排除的文件
--ignore-errors 即使出现 I/O 错误也进行删除
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
-P 等价于 --partial --progress
--delay-updates 将正在更新的文件先保存到一个临时目录(默认为 “.~tmp~”),待传输完毕再更新目标文件
-q, --quiet 精简输出模式
-h, --human-readable 输出文件大小使用易读的单位(如,K,M等)
-n, --dry-run 显示哪些文件将被传输
--list-only 仅仅列出文件而不进行复制
--rsyncpath=PROGRAM 指定远程服务器上的 rsync 命令所在路径
--password-file=FILE 从 FILE 中读取口令,以避免在终端上输入口令,通常在 cron 中连接 rsync 服务器时使用
--version 打印版本信息
--port=PORT 指定其他的rsync服务端口
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
--help 显示帮助信息
-4, --ipv4 使用 IPv4
-6, --ipv6 使用 IPv6
二、rsync在本地磁盘同步数据
rsync -vlzrtogp /test /backups
rsync -vlzrtogp /test/ /backups
注意:在指定复制源时,路径是否有最后的 “/” 有不同的含义,例如:
/test表示将整个/test目录复制到目标目录
/test/表示将test目录中的所以内容复制到目标目录
三、rsync远程同步
1.rsync在远程同步的时候,要求目标目录要和源目录保持同步,目标目录中多余的文件都要删除,这就需要用到了参数–delete
先做好ssh的免密登录,以方便rsync的同步
/usr/bin/rsync -vlzrtogp --progress --delete /test/ dev@192.168.0.122:/backups
2.rsync远程拷贝的时候,过滤某些某个文件或多个文件就用“–exclude 文件名”,要是过滤多个文件或子目录,就把过滤的文件或目录名的关键字放在一个文件里,如下的exclude.txt文件,然后使用–exclude-from exclude.txt文件进行过滤
1)排除单独的文件夹和文件
比如要排除static文件夹,我们可以添加 '--exclude' 选项:
--exclude 'static'
命令是这样的:
[dev@rsync-1 ~]# rsync -e 'ssh -p 22' -vlzrtogp --delete --stats --progress --exclude 'static' /home/dev/test/ dev@192.168.0.122:/home/dev/backups
比如要排除 "datacenter" 文件夹下的 "data.txt" 文件:
--exclude 'datacenter/data.txt'
命令是这样的:
[dev@rsync-1 ~]# rsync -e 'ssh -p 22' -vlzrtogp --delete --stats --progress --exclude 'static' --exclude 'datacenter/data.txt' /home/dev/test/ dev@192.168.0.122:/home/dev/backups
比如排除掉同步目录中的类似*-prod.properties文件(比如global-prod.properties等)
命令是这样的:
[dev@rsync-1 ~]# /usr/bin/rsync -vlzrtogp -e "ssh -p 22" --exclude=*-prod.properties --progress /opt/tomcat/webapps/ROOT/ dev@192.168.0.122:/opt/tomcat/webapps/ROOT/
2)使用 ‘–exclude-from’ 排除多个文件夹和文件
建立文件:
[dev@rsync-1 ~]# touch /home/dev/exclude.txt
在里面定义要排除的文件夹和文件
[dev@rsync-1 ~]# vim /home/dev/exclude.txt
static
datacenter/data.txt
downloads/test/*
使用指令:
--exclude-from '/home/dev/exclude.txt'
最后的命令如下:
[dev@rsync-1 ~]# rsync -e 'ssh -p 22' -vlzrtogp --delete --stats --progress --exclude-from '/home/dev/exclude.txt' /home/dev/test/ dev@192.168.0.122:/home/dev/backups
3)rsync同步时候的限流操作
rsync -vlzrtogp --progress --delete --bwlimit=1000 远程文件 本地文件 //限制为1000kBytes/s
rsync -vlzrtogp --progress --delete --bwlimit=2048 本地文件 远程文件 //限制为2M/s
参考文章:
https://www.cnblogs.com/kevingrace/p/5689491.html
https://www.cnblogs.com/noxy/p/8986164.html