dd命令测试
dd_write() {
echo
echo "--- dd write speed test ---"
rm -f dd-write-output.txt
for i in $(seq "${ITERATION}"); do
echo "Running iteration ${i}..."
rm -f dd.img
echo 3 > /proc/sys/vm/drop_caches
dd if=/dev/zero of=dd.img bs=1048576 count=1024 conv=fsync 2>&1 \
| tee -a "${pwd}"/dd-write-output.txt”
done
}
dd_read() {
echo
echo "--- dd read speed test ---"
rm -f dd-read-output.txt
for i in $(seq "${ITERATION}"); do
echo "Running iteration ${i}..."
echo 3 > /proc/sys/vm/drop_caches
dd if=dd.img of=/dev/null bs=1048576 count=1024 2>&1 \
| tee -a "${pwd}"/dd-read-output.txt
done
rm -f dd.img
}
单独使用一个echo 便是换行,如果不想换行可以使用echo -n
dd命令中if表示:输入文件名
of表示:输出文件名
bs表示:bytes,读写的byte数
count:读/写多少次bs
conv=fsync: 将输入用ibs填充,不足的用NULL 补齐
tee -a表示将结果重定向到"${pwd}"/dd-write-output.txt“ 中
将这段code 保存成dd.sh,运行效果如下图所示:
通过source 命令将dd.sh中定义的两个函数导入到当前的shell环境中,
这样结果看起来还是有点乱,可以再写一个函数来整理结果
parse_output() {
test_case_id="$1"
itr=1
while read -r line; do
if echo "${line}" | egrep -q "(M|G)B/s"; then
measurement="$(echo "${line}" | awk '{print $(NF-1)}')"
units="$(echo "${line}" | awk '{print substr($NF,1,2)}')"
result=$(convert_to_mb "${measurement}" "${units}")
echo "${test_case_id}-itr${itr}" "pass" "${result}" "MB/s"
itr=$(( itr + 1 ))
fi
done < "${pwd}/${test_case_id}-output.txt"
}
执行的dd-write 命令后生成的dd-write-output.txt文件的内容如下:
调用parse_out dd-write 后parse结果如下: