本发明涉及服务器测试技术领域,尤其涉及一种自动进行硬盘数据一致性测试的方法。
背景技术:
在服务器上使用硬盘时,经常会做数据转移,如备份数据,硬盘数据转储。硬盘上的数据是最重要的,在数据转移的过程中硬盘保持数据的一致性尤为重要。对硬盘进行数据一致性测试,可以保证硬盘在服务器上数据的稳定。在腾讯的硬盘测试标准中,有硬盘数据一致性测试。有些机型的开发测试中,腾讯针对nvme硬盘的测试也有该类型的测试。该测试的内容是将随机生成的文件写入要测试的硬盘中,并通过md5值比较拷贝前文件和拷贝后文件的一致性,这个过程会循环一定的次数。针对腾讯新提出的使用md5校验文件的方式,目前没有专门的脚本去执行这样的测试,在此情况下构建了此脚本。现有的技术方案是自行准备待测文件,然后拷贝到a盘,校验后再拷贝到b盘……以此类推,循环至一定次数后停止。现有技术存在的缺点是:现有技术的脚本是通过linux系统中diff命令来校验文件的,该命令只能以逐行的方式去对比文本内容,与使用md5校验文件的要求不符,且需要自己去准备待拷贝的文件,待拷贝的文件可能没有随机性。而且还存在着测试工作操作复杂,测试时间长、效率低下,操作准确度差的问题。
技术实现要素:
本发明就是针对现有技术存在的上述不足,提供一种自动进行硬盘数据一致性测试的方法;本发明操作简单、便于操作人员使用,与人为操作相比、大大减少了操作所花费的时间,大幅度提升了操作准确度,提高了测试工作效率及准确度。本发明操作简单便于操作人员使用,大大减少了人为操作所花费的时间,在时间上相较于人为操作所花费的时间。本发明可以通过修改少量的代码以适应测试各种型号或数量的硬盘,如m.2硬盘、nvme硬盘,通用性好。
本发明解决技术问题的技术方案是:
一种自动进行硬盘数据一致性测试的方法,采用shell脚本语言结合各种算法编写自动化脚本,包括以下步骤:
1)自动将待测硬盘格式化,然后挂载到系统的文件目录;
2)随机生成若干个不同大小的随机文件;
3)记录每个随机文件的md5值;
4)将每个随机文件分别拷贝到待测硬盘里,拷贝完成后获取拷贝文件的md5(报文摘要算法,英文message-digestalgorithm5)值,将拷贝文件的md5值与随机文件的md5值进行比较,设定次数、用若干块硬盘进行测试,分别按顺序手动挂载到了/home/disk[x]文件夹。
所述步骤1)对系统中的sda-sdg盘进行格式化并挂载,将硬盘格式化为ext4(第四代扩展文件系统,英文fourthextendedfilesystem的缩写)格式。
根据要测试的硬盘的数量和硬盘在系统下显示的名称对自动化脚本代码进行修改,以适应各种测试配置。
所述步骤2)采用dd命令生成各个不同大小的随机文件,将随机字节流数据分别按大小写入到当前路径下的随机文件中。
将测试结果按成功或失败存放到log中,验证完成后删除待测硬盘里的文件,用于下次循环的测试。
所述步骤4)将所有硬盘按顺序遍历测试,并循环至指定的次数,将待测试的硬盘按顺序挂载到系统下/home/disk[x]目录,x代表第几块盘;生成的log按测试结果分开,测试成功的日志保存在pass.log中,测试失败的日志保存到fail.log中。
本发明的有益效果:
1.本发明操作简单、便于操作使用,与人为操作相比、大大减少了操作所花费的时间,检测随机性好,大幅度提升了操作准确度,也提高了测试工作效率及准确度。解决了现有技术测试工作操作复杂,测试时间长、效率低下,操作准确度差的问题。
2.本发明此测试方法对测试的硬盘数目不限,测试时将所有硬盘按顺序遍历测试,并循环至指定的次数,将待测试的硬盘按顺序挂载到系统下/home/disk[x]目录即可,x代表第几块盘,生成的log是按测试结果分开的,测试成功的日志保存在pass.log中,测试失败的日志保存到fail.log中,使用范围广,测试效率高,便于操作、保存和管理。
附图说明
图1为本发明的流程图。
具体实施方式
为了更好地理解本发明,下面结合附图来详细解释本发明的实施方式。
结合图1,一种自动进行硬盘数据一致性测试的方法,采用shell脚本语言结合各种算法编写自动化脚本,实现自动将待测硬盘格式化,然后挂载到系统的文件目录,随机生成不同大小的测试文件,将测试文件分别拷贝到待测的硬盘中,使用md5值校验待测文件,将结果按成功或失败存放到log中,校验完成后删除待测硬盘中的测试文件,此过程会循环至指定的次数后自动停止。脚本运行完成后可以查看log来查看数据一致性测试的测试结果。包括以下步骤:
1)将待测硬盘格式化并挂载到系统目录下;
2)使用dd命令生成若干个不同大小的随机文件;
3)记录每个随机文件的md5值;
4)将每个随机文件分别拷贝到待测硬盘里,拷贝完成后获取拷贝文件的md5值,将拷贝文件的md5值与随机文件的md5值进行比较,设定次数、用若干块硬盘进行测试,分别按顺序手动挂载到了/home/disk[x]文件夹。
所述步骤1)对系统中的sda-sdg盘进行格式化并挂载,将硬盘格式化为ext4格式,可根据要测试的硬盘数量和系统下显示的名称对自动化脚本代码进行修改,以适应各种测试配置。
所述步骤2)使用dd命令生成各个不同大小的随机文件,将随机字节流数据分别按大小写入到当前路径下的随机文件中。
将测试结果按成功或失败存放到log中,验证完成后删除待测硬盘里的文件,用于下次循环的测试。
所述步骤4)将所有硬盘按顺序遍历测试,并循环至指定的次数,将待测试的硬盘按顺序挂载到系统下/home/disk[x]目录,x代表第几块盘;生成的log是按测试结果分开的,测试成功的日志保存在pass.log中,测试失败的日志保存到fail.log中。
下面结合具体程序详细说明该测试步骤:
(1)将待测硬盘格式化并挂载到系统目录下;可根据要测试的硬盘数量和系统下显示的名称对自动化脚本代码进行修改,以适应各种测试配置。
m=1
#对系统中的sda-sdg盘进行格式化并挂载
foriin{a..g}
do
#将硬盘格式化为ext4格式,测试没有特殊要求时在linux下测试一般用这种文件格式。
mkfs-text4/dev/sd$i
#将硬盘挂载到/home/disk[x]目录下
mount/dev/sd$i/home/disk$m
let"m++"
done
(2)使用dd命令生成1kb,1mb和1gb大小的随机文件:
/dev/urandom是linux系统中提供的随机伪设备,这两个设备的任务,是提供永不为空的随机字节数据流,使用dd命令将随机字节流数据分别按大小写入到当前路径下的1kfile,1mfile,1gfile文件中
ddif=/dev/urandomof=1kfilebs=1kcount=1
ddif=/dev/urandomof=1mfilebs=1mcount=1
ddif=/dev/urandomof=1gfilebs=1gcount=1
(3)记录这三个文件的md5值
在linux或unix上,md5sum是用来计算和校验文件报文摘要的工具程序。一般来说,安装了linux后,就会有md5sum这个工具。此处代码将获取对应文件的md5值保存到当前程序的变量中。
md51k=`md5sum1kfile|awk'{print$1}'`
md51m=`md5sum1mfile|awk'{print$1}'`
md51g=`md5sum1gfile|awk'{print$1}'`
(4)将这三个文件分别拷贝到要测试的硬盘里,并进行比较,设定次数为100次(通过foriin{1..100}设定),这里用了7块硬盘进行测试,分别按顺序手动挂载到了/home/disk[x]文件夹:
foriin{1..100}
do
echo"loop$i"|teetimes.log
#将生成的随机文件拷贝到待测硬盘中
forain{1..7}
do
cp/root/percopy/*/home/disk$a
echo"loop$icopyover"
done
#拷贝完成后获取拷贝后文件的md5值。
echo"begincheck"
#遍历7块盘,此处设置了遍历的硬盘数目,第1块盘到第7块盘
forain{1..7}
do
#分别获取各个文件的md5值,存储到comd51k、comd51m、comd51g变量中。
comd51k=`md5sum/home/disk$a/1kfile|awk'{print$1}'`
comd51m=`md5sum/home/disk$a/1mfile|awk'{print$1}'`
comd51g=`md5sum/home/disk$a/1gfile|awk'{print$1}'`
#比较1k文件的md5值。将之前获取的1kfile文件的md5与拷贝后1kfile的md5用fi判断语句进行比对,相同时输出日志到pass.log文件中,不同时输出日志到fail.log文件中。日志格式为”loop$idisk$a1kpass”,其中loop$i表示当前循环的次数,disk$a表示是第几块硬盘,[pass/fail]表示文件md5值是否相同,相同为pass,不同为fail。以下比较1m,1g大小的文件时,过程相同。
if[$md51k=$comd51k]
then
echo"loop$idisk$a1kpass"|teepass.log
else
echo"loop$idisk$a1kfail"|teefail.log
#echo$md51k
#echo$comd51k
fi
#比较1m文件的md5值
if[$md51m=$comd51m]
then
echo"loop$idisk$a1mpass"|teepass.log
else
echo"loop$idisk$a1mfail"|teefail.log
fi
#比较1g文件的md5值
if[$md51g=$comd51g]
then
echo"loop$idisk$a1gpass"|teepass.log
else
echo"loop$idisk$a1gfail"|teefail.log
fi
#验证完成后删除待测硬盘里的文件,用于下次循环的测试。
rm-rf/home/disk$a/*
done
echo"loop$iover"
sleep2
done
此测试方法对测试的硬盘数目不限,测试时将所有硬盘按顺序遍历测试,并循环至指定的次数,将待测试的硬盘按顺序挂载到系统下/home/disk[x]目录即可,x代表第几块盘。生成的log是按测试结果分开的,测试成功的日志保存在pass.log中,测试失败的日志保存到fail.log中。
虽然本发明已示出和描述了本发明施例,对本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神下可以对这些施例进行多种变化、修改、替换和变型,都属于本本发明的述权利要求保护范围之内。