-
Notifications
You must be signed in to change notification settings - Fork 20
/
file_lba_test_bsrange.sh
113 lines (85 loc) · 2.62 KB
/
file_lba_test_bsrange.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
#!/bin/bash
#Author: YOUPLUS <zhang_youjia@126.com>
#注意: 脚本必须以前台方式运行
#主要作用: 文件存储稳定性测试和数据一致性校验
#默认限速
bwlimit=102400
#默认簇大小
cluster_sectors=2048
#指定IO随机大小范围
bsrange="1-2048"
#虚拟地址与物理地址映射文件
MAP_FILE=/var/hd_write_verify/mem_map*
#升级的LBA工具
LBA_TOOLS=/var/iso/tools/hd_write_verify
if [ ${#} != 1 -a ${#} != 2 -a ${#} != 3 ]; then
echo "Usage: ${0} /path/test.raw [cluster_sectors] [bwlimit]"
echo "eg: ${0} /path/test.raw"
echo "eg: ${0} /path/test.raw cluster_sectors"
echo "eg: ${0} /path/test.raw cluster_sectors bwlimit"
exit 1
fi
#参数1: 必须指定LBA测试的文件名
LBA_FILE=`realpath ${1}`
#参数2: 可指定
if [ ! -z ${2} ]; then
cluster_sectors=${2}
bsrange="1-${cluster_sectors}"
fi
#参数3: 可指定
if [ ! -z ${3} ]; then
bwlimit=${3}
fi
if [ ! -f ${LBA_TOOLS} ]; then
#临时激活的LBA工具
LBA_TOOLS=/run/hd_write_verify
if [ ! -f ${LBA_TOOLS} ]; then
LBA_TOOLS=hd_write_verify
fi
fi
if [ -f ${LBA_FILE} ]; then
#文件存储: 校验上次LBA测试文件数据一致性
${LBA_TOOLS} -c -D -K -T 10 -L ${bwlimit} ${LBA_FILE}
dmesg -T >> /var/log/dmesg.txt
#如果测试出LBA问题,保留对应文件
LBA_INFO=$(dmesg -cT | grep -n "BUG 00")
if [ ! -z "${LBA_INFO}" ]; then
echo "${LBA_INFO}"
exit 1
fi
rm -f ${LBA_FILE} > /dev/null 2>&1
#退出测试
if [ -f /var/log/QUIT_FILE_LBA_TEST ]; then
exit 0
fi
fi
#LBA测试参数保留一份到dmesg日志
echo "${LBA_TOOLS} -c -D -K -w on -B ${bsrange} -S ${cluster_sectors} -V once -T 10 -L ${bwlimit} ${LBA_FILE}"
echo "${LBA_TOOLS} -c -D -K -w on -B ${bsrange} -S ${cluster_sectors} -V once -T 10 -L ${bwlimit} ${LBA_FILE}" > /dev/kmsg
while :;
do
#退出测试
if [ -f /var/log/QUIT_FILE_LBA_TEST ]; then
break
fi
#创建LBA测试文件
truncate --size 10G ${LBA_FILE}
#文件存储稳定性测试和数据一致性校验
${LBA_TOOLS} -c -D -K -w on -B ${bsrange} -S ${cluster_sectors} -V once -T 10 -L ${bwlimit} ${LBA_FILE}
dmesg -T >> /var/log/dmesg.txt
#如果测试出LBA问题,保留对应文件
LBA_INFO=$(dmesg -cT | grep -n "BUG 00")
if [ ! -z "${LBA_INFO}" ]; then
echo "${LBA_INFO}"
break
fi
rm -f ${LBA_FILE} > /dev/null 2>&1
#同时进行多个LBA测试(磁盘/文件/内存等)时,删除已结束LBA测试的mem_map文件
LBA_PID=`pidof hd_write_verify`
if [ ! -z "${LBA_PID}" ]; then
FILTER=$(echo "${LBA_PID}" | sed s/" "/"\|"/g)
MAP_FILE=$(find /var/hd_write_verify/ -name mem_map* | grep -Ev "${FILTER}")
fi
rm -f ${MAP_FILE} > /dev/null 2>&1
sleep 3
done