本发明涉及硬盘数据测试技术,尤其涉及一种测试硬盘数据一致性的方法。
背景技术:
随着浪潮服务器产业的不断发展和壮大,作为国内最大的服务器供应商,服务器市场已经囊括各个领域,尤其是金融、互联网等主流领域,互联网的高速发展,信息的高安全性和系统的高可靠性越来越成为公司、企业、政府最为关注的事情,而硬盘作为数据存储的主要载体,其稳定性和可靠性也越来越受到重视,因此对于硬盘在我们服务器上使用时经常会有备份和硬盘数据的转储出现,在硬盘数据转移的过程中,硬盘之间的数据一致性很重要。基于以上要求,在测试过程中需要一种方法在系统下测试硬盘数据一致性。
技术实现要素:
为了解决以上问题,本发明提出了一种测试硬盘数据一致性的方法。可以应用于各种配置下的硬盘数据一致性的测试,实现快速、高效、准确、自动化的进行差异的对比,而且对比的结果简单明了,对提高服务器产品的质量提供了可靠的保障。
本发明便于发现硬盘复制和转储的过程中出现的错误。在硬盘分区上复制数据,通过对数据的复制和对比等操作,之后与原始数据对比,来完成压力测试发现是否具有数据一致性。
本发明的技术方案是:
一种测试硬盘数据一致性的方法,
通过将硬盘分区再将分区格式化后,把硬盘的分区挂载到文件系统中,通过对数据(文件)在硬盘所挂载的文件系统中复制并且比较,查看是否数据一致如果不一致就记录差异;在多个硬盘之间循环一次以上复制和比较,模拟客户业务长时间的运行过程,记录差异查看数据的差异性。然后查看结果,看是否在复制的过程中产生了数据不一致的情况。
具体流程为:
1)安装linux系统取得root权限,
2)为硬盘或逻辑磁盘分区并格式化;
3)将格式化的硬盘分区挂载到文件系统下;
4)将文件从一个文件夹复制到另一个文件夹;
5)比较两个文件夹内容的差异,查看是否一致;
6)如果一致,继续复制,再查看差异;
如果不一致,记录差异并继续复制,再查看差异。
准备工作
需要将待测硬盘接入到系统中,安装linux系统,在/root下创建Src文件夹,将非二进制文件copy到Src文件夹中。
具体测试步骤为:
1)对服务器系统中的硬盘进行分区;
2)将硬盘分区格式化成EXT4的格式;
3)在/opt下建立与硬盘数量相等,并且名称对应的文件夹;
4)将硬盘分区挂载到相应的文件夹下;
5)将Src文件夹中的所有文件在硬盘的分区中循环复制和删除;
6)比较每次复制的差异;
7)将差异记录,回传测试结果。
本发明的有益效果是
通过自动运行的方法减少了以往测试的时候手动测试的复杂性,可以减少简化操作,节省了人力和时间。
附图说明
图1是测试流程示意图。
具体实施方式
下面对本发明的内容进行更加详细的阐述:
本发明的验证步骤为:
将待测硬盘接入到系统中,安装linux系统,在/root下创建Src文件夹,将非二进制文件copy到Src文件夹中。
1、运行copy and compare时,显示copy次数;
2、当运行完成时,出现“Test finished1000times!”
3、查看test.log,可以查看成功复制的次数和是否通过。
附脚本和说明
脚本deal_disk是给硬盘分区及格式化的脚本,其中给硬盘分配的大小为40G,格式化模式为ext4的格式。
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH
for i in {b..d};
do
fdisk /dev/sd$i <<ESXU
n
p
1
+40G
w
ESXU
sleep 3s
mkfs.ext4 /dev/sd"$i"1
done
脚本mount_disk是在/root下创建文件夹并将硬盘分区挂载到相应文件夹的脚本
#/bin/bash
for i in {b..d};
do
umount /root/test/$i
done
rm -rf /root/test
mkdir /root/test
for i in {b..d};
do
mkdir /root/test/$i
done
for i in {b..d};
do
mount /dev/sd"$i"1 /root/test/$i
done
脚本copy_and_compare是将Src中的非二进制文件copy到/opt下的文件中,并在各个文件夹中不断进行多次copy和compare的脚本,脚本中使用cp命令进行复制使用diff命令进行对比校验并将对比结果记录到diffsrc.txt和diff.txt中,同时也会将出现差异的地方也记录下来,方便测试完成后进行查看,将copy次数和结果放到test.log和Success.log中。
#!/bin/bash
TestCount=1000
rm diff.txt
rm diffsrc.txt
rm SuccessCount.log
rm test.log
for i in {b..d};
do
rm -rvf /root/test/$i/*
done
cp -a /root/Src/* /root/test/b
diff /root/Src /root/test/b |tee -a diffsrc.txt
diffsrc=$(cat diffsrc.txt | wc -l)
if [ "$diffsrc" != "0" ]; then
echo "Compare with the source files fail !!!"
exit 1
fi
count=0
###copy from disk to disk###
while (true);do
######copy from b to c
cp -a /root/test/b/* /root/test/c
count=$(($count + 1))
diff /root/test/b /root/test/c |tee -a diff.txt
diffnum=$(cat diff.txt |wc -l)
if [ "$diffnum" != "0" ];then
echo "failed at "$count "times test" | tee -a diff.txt
echo "failed at when copy from sdb to sdc"|tee -a diff.txt
cat SuccessCount.log >>test.log
break
fi
echo "Successfully copy files "$count"times !" |tee -a SuccessCount.log
rm -rvf /root/test/b/*
if [ -n "${TestCount}" ];then
if [ "$count" == "$TestCount" ];then
echo "Test finished"$count"times!"
cat SuccessCount.log>> test.log
echo "PASS !!!">> test.log
exit
fi
fi
######copy from c to d
cp -a /root/test/c/* /root/test/d
count=$(($count + 1))
diff /root/test/c /root/test/d |tee -a diff.txt
diffnum=$(cat diff.txt |wc -l)
if [ "$diffnum" != "0" ];then
echo "failed at "$count "times test" | tee -a diff.txt
echo "failed at when copy from sdc to sdd"|tee -a diff.txt
cat SuccessCount.log >>test.log
break
fi
echo "Successfully copy files "$count"times !" |tee -a SuccessCount.log
rm -rvf /root/test/c/*
if [ -n "${TestCount}" ];then
if [ "$count" == "$TestCount" ];then
echo "Test finished"$count"times!"
cat SuccessCount.log>> test.log
echo "PASS !!!">> test.log
exit
fi
fi
######copy from d to b
cp -a /root/test/d/* /root/test/b
count=$(($count + 1))
diff /root/test/d /root/test/b |tee -a diff.txt
diffnum=$(cat diff.txt |wc -l)
if [ "$diffnum" != "0" ];then
echo "failed at "$count "times test" | tee -a diff.txt
echo "failed at when copy from sdd to sdb"|tee -a diff.txt
cat SuccessCount.log >>test.log
break
fi
echo "Successfully copy files "$count"times !" |tee -a SuccessCount.log
rm -rvf /root/test/d/*
if [ -n "${TestCount}" ];then
if [ "$count" == "$TestCount" ];then
echo "Test finished"$count"times!"
cat SuccessCount.log>> test.log
echo "PASS !!!">> test.log
exit
fi
fi
done。
本方法可以应用于各种配置下的硬盘数据一致性的测试,实现快速、高效、准确、自动化的进行差异的对比,而且对比的结果简单明了,对提高服务器产品的质量提供了可靠的保障。