检测两台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/md5_a.txt

ssh $b_ip "find $b_dir -type f | xargs md5sum > /tmp/md5_b.txt"

scp $b_ip:/tmp/md5_b.txt /tmp

#将文件名作为遍历对象进行一一比对

for f in `awk '{print 2} /tmp/md5_a.txt'` do

#以a机器为标准当b机器不存在遍历对象中的文件时直接输出不存在的结果

if grep -qw "$f" /tmp/md5_b.txt

then

md5_a=`grep -w "$f" /tmp/md5_a.txt | awk '{print 1}'`

md5_b=`grep -w "$f" /tmp/md5_b.txt | awk '{print 1}'`

#当文件存在时如果md5值不一致则输出文件改变的结果

if [ $md5_a != $md5_b ]

then

echo "$f  $GCOLOR."

fi

else

echo "$f  $WCOLOR."

fi

done

你可能感兴趣的:(检测两台Linux服务器目录下的文件一致性)