检测两台Linux服务器⽬录下的⽂件⼀致性
在系统部署时,需要将数据库服务器上的重要备份⽂件传输到其他服务器,⽐如应⽤服务器,进⾏异地备份。那么在⽹络备份完成后需要检测两个服务器上的数据⽬录下的备份⽂件是否相同,⼀是保证数据备份是成功的,⼆是防⽌在数据恢复时存在数据不⼀致情况。在windows下的备份是利⽤共享⽂件夹,⽐较共享⽂件夹和数据⽬录的⽂件。在Linux服务器下,可以利⽤脚本来帮助完成检测⼯作,加上MD5会更加健全可靠。
MD5算法常常被⽤来验证⽹络⽂件传输的完整性。MD5 全称是报⽂摘要算法,对任意长度的信息逐位进⾏计算,产⽣⼀个⼆进制长度为128位(⼗六进制就是32位)的报⽂摘要。MD5 与⽂件的内容有关,与⽂件名⽆关,只要⽂件内容相同,其md5值相同。
下⾯是cp的⽂件,  md5sum输出第⼀列为md5值,第⼆列为⽂件名。⽂件名不⼀样,但是计算的md5的值是⼀样的。
以下脚本时基于 md5sum来计算两个服务器指定⽬录下⽂件的⼀致性,先是判断md5sum输出的⽂件名,如果存在再判断md5值是否相同。
脚本是利⽤⽹络上的脚本简单修改⽽成。
本脚本的前提是两个服务器配置了ssh免密,不然ssh远程执⾏命令和scp复制⽂件是需要交互的。脚本是利⽤⽹络上的脚本简单修改⽽成。
#!/bin/bash
>>>>>>>###
检测两台服务器指定⽬录下的⽂件⼀致性
>>>>>>>##
#输出结果定义,颜⾊背景区分
GCOLOR="\e[47;32m ------ [DELETED] \e[0m"
WCOLOR="\e[43;31m ------ [CHANGED] \e[0m"
#通过对⽐两台服务器上⽂件的md5值达到检测⼀致性的⽬的
a_dir=/myapp/data
b_dir=/backup/data
b_ip=192.168.31.55
#将指定⽬录下的⽂件全部遍历出来并作为md5sum命令的参数进⽽得到所有⽂件的md5值并写⼊到指定⽂件中
find $a_dir -type f | xargs md5sum > /tmp/
ssh $b_ip "find $b_dir -type f | xargs md5sum > /tmp/" scp $b_ip:/tmp/ /tmp
#将⽂件名作为遍历对象进⾏⼀⼀⽐对
for f in `awk '{print 2} /tmp/'` do
#以a机器为标准当b机器不存在遍历对象中的⽂件时直接输出不存在的结果if grep -qw "$f" /tmp/
then
md5_a=`grep -w "$f" /tmp/ | awk '{print 1}'`
md5_b=`grep -w "$f" /tmp/ | awk '{print 1}'`
#当⽂件存在时如果md5值不⼀致则输出⽂件改变的结果
cp复制文件到指定目录下if [ $md5_a != $md5_b ]
then
echo "$f  $GCOLOR."
fi
else
echo "$f  $WCOLOR."
fi
done

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论