iozone的下载&编译&测试

本文以5.08版本为例,需要其他版本请根据对应版本修改
版本查看地址:http://www.iozone.org/src/current/
下载和编译

点击查看代码
#!/bin/bash
#set -euo pipefail  # 严格模式:遇到错误立即退出、未定义变量报错、管道失败触发退出
if ! command -v wget >/dev/null 2>&1; then
    echo "安装wget..."
    sudo apt update && sudo apt install -y wget
fi
if ! command -v make >/dev/null 2>&1; then
    echo "安装make..."
    sudo apt update && sudo apt install -y make
fi
# ===================== 配置项 =====================

DOWNLOAD_URL="http://www.iozone.org/src/current/"    # 目标文件URL
IOZONE_NAME="iozone3_508.tar"                        # iozone文件全名
TAR_IOZONE_NAME="iozone3_508"                        # 解压后iozone文件夹全名
DOWNLOAD_ADDRESS="${DOWNLOAD_URL}${IOZONE_NAME}"     # 最终下载地址
SAVE_PATH="./downloads"                              # 保存目录
RETRY_TIMES=5                                        # 重试次数
TIMEOUT=30                                           # 超时时间(秒)
LOG_FILE="./download.log"                            # 日志文件路径
MAKE_LOG="./make_log"                                # make日志                                               
downloads_iozone(){
    echo "开始下载:${DOWNLOAD_ADDRESS} -> ${SAVE_PATH}/${IOZONE_NAME}"
    # 2.2.1 执行wget下载(带核心保障参数)
    # -c 断点续传
    # --timeout 重试次数
    wget -c \
        --tries="${RETRY_TIMES}" \
        --timeout="${TIMEOUT}" \
        "${DOWNLOAD_ADDRESS}" \
        >> "${LOG_FILE}" 2>&1
        
    # 2.2.2 检查wget执行状态(核心:$? 是上一条命令的退出码,0=成功)
    if [ $? -ne 0 ]; then
        echo "ERROR: 下载失败!查看日志:${LOG_FILE}"
        exit 1
    fi

    # 2.2.3 最终验证:文件是否存在且非空
    if [ ! -f "${IOZONE_NAME}" ] || [ ! -s "${IOZONE_NAME}" ]; then
        echo "ERROR: 下载的文件为空或不存在!"
        exit 1
    fi
    echo "SUCCESS: 文件已成功下载到 ${SAVE_PATH}/${IOZONE_NAME}"
}
tar_iozone(){ 
    # 3.解压程序
    echo "开始解压:${IOZONE_NAME} -> ${SAVE_PATH}"
    tar -xvf "${IOZONE_NAME}" >> "${LOG_FILE}" 2>&1
    if [ $? -ne 0 ]; then
        echo "ERROR: 解压失败!查看日志:${LOG_FILE}"
        exit 1
    fi
    echo "解压成功:${IOZONE_NAME} -> ${SAVE_PATH}"
    cd "${TAR_IOZONE_NAME}/src/current" || { echo "ERROR: 无法进入目录 ${TAR_IOZONE_NAME}/src/  current"; exit 1; }
    echo "正在编译iozone!!!"
    # 4.编译
    make linux >> "${MAKE_LOG}" 2>&1
    if [ $? -ne 0 ]; then
        echo "ERROR: 编译失败!查看日志:${MAKE_LOG}"
        exit 1
    fi
    echo "编译完成!!!"
}
# 1. 创建保存目录(不存在则创建)
mkdir -p "${SAVE_PATH}" || { echo "ERROR: 无法创建目录 ${SAVE_PATH}"; exit 1; }

# 2.判断是否已经下载
# 2.1进入保存目录
cd "${SAVE_PATH}" || { echo "ERROR: 无法进入目录 ${SAVE_PATH}"; exit 1; }
# 2.2检验文件不存在则下载
if [ ! -f "${IOZONE_NAME}" ]; then
    # ==================================================
    downloads_iozone
    tar_iozone
# 2.3检验文件存在但为空,删除后继续下载
elif [ ! -s "${IOZONE_NAME}" ]; then
    echo "ERROR: 文件为空,正在删除!!!"
    rm "${IOZONE_NAME}" || { echo "ERROR: 无法删除文件 ${IOZONE_NAME}"; exit 1; }
    downloads_iozone
    tar_iozone
#文件存在
else
    echo "INFO: 下载的文件已存在,如需重新下载,请将源文件删除!!!"
    tar_iozone  
fi

测试0.5倍内存 内存获取模块可以修改,仅供参考

点击查看代码
#!/bin/bash
#set -euo pipefail  # 严格模式:遇到错误立即退出、未定义变量报错、管道失败触发退出
mem_total=$(grep MemTotal /proc/meminfo | awk '{printf "%d", ($2/1024/1024)+1}')
test_mem=`expr ${mem_total} / 2`
int=1
results="./downloads/iozone3_508/src/current/report/"
# 按下Ctrl+C则退出
cleanup() {
    echo -e "\n📢 脚本退出(原因:$1)"
    exit 0
}
trap 'cleanup "Ctrl+C/SIGINT"' SIGINT #检测用户是否按下Ctrl+C
mkdir -p "${results}" || { echo "ERROR: 无法创建目录 ${results}"; exit 1; }
while(( $int<=3 ))
do
    echo "==========开始第${int}轮测试=========="
    ./downloads/iozone3_508/src/current/iozone -i 0 -i 1 -i 2 -s ${test_mem}g -r 16m -f /iozone.tmpfile -Rb ${results}iotest_${test_mem}g_${int}.xls 2> "${results}test.log"
    if [ $? -ne 0 ]; then
        echo "ERROR: 测试失败!查看日志:${results}test.log"
        exit 1
    fi
    echo "SUCCESS: 测试成功!查看结果:${results}iotest_${test_mem}g_${int}.xls"
    let "int++"
done
exit 0

测试1倍内存 内存获取模块可以修改,仅供参考

点击查看代码
#!/bin/bash
#set -euo pipefail  # 严格模式:遇到错误立即退出、未定义变量报错、管道失败触发退出
mem_total=$(grep MemTotal /proc/meminfo | awk '{printf "%d", ($2/1024/1024)+1}')
test_mem=`expr ${mem_total} / 1`
int=1
results="./downloads/iozone3_508/src/current/report/"
# 按下Ctrl+C则退出
cleanup() {
    echo -e "\n📢 脚本退出(原因:$1)"
    exit 0
}
trap 'cleanup "Ctrl+C/SIGINT"' SIGINT #检测用户是否按下Ctrl+C
mkdir -p "${results}" || { echo "ERROR: 无法创建目录 ${results}"; exit 1; }
while(( $int<=3 ))
do
    echo "==========开始第${int}轮测试=========="
    ./downloads/iozone3_508/src/current/iozone -i 0 -i 1 -i 2 -s ${test_mem}g -r 16m -f /iozone.tmpfile -Rb ${results}iotest_${test_mem}g_${int}.xls 2> "${results}test.log"
    if [ $? -ne 0 ]; then
        echo "ERROR: 测试失败!查看日志:${results}test.log"
        exit 1
    fi
    echo "SUCCESS: 测试成功!查看结果:${results}iotest_${test_mem}g_${int}.xls"
    let "int++"
done
exit 0

测试2倍内存 内存获取模块可以修改,仅供参考

点击查看代码
#!/bin/bash
#set -euo pipefail  # 严格模式:遇到错误立即退出、未定义变量报错、管道失败触发退出
mem_total=$(grep MemTotal /proc/meminfo | awk '{printf "%d", ($2/1024/1024)+1}')
test_mem=`expr ${mem_total} \* 2`
int=1
results="./downloads/iozone3_508/src/current/report/"
# 按下Ctrl+C则退出
cleanup() {
    echo -e "\n📢 脚本退出(原因:$1)"
    exit 0
}
trap 'cleanup "Ctrl+C/SIGINT"' SIGINT #检测用户是否按下Ctrl+C
mkdir -p "${results}" || { echo "ERROR: 无法创建目录 ${results}"; exit 1; }
while(( $int<=3 ))
do
    echo "==========开始第${int}轮测试=========="
    ./downloads/iozone3_508/src/current/iozone -i 0 -i 1 -i 2 -s ${test_mem}g -r 16m -f /iozone.tmpfile -Rb ${results}iotest_${test_mem}g_${int}.xls 2> "${results}test.log"
    if [ $? -ne 0 ]; then
        echo "ERROR: 测试失败!查看日志:${results}test.log"
        exit 1
    fi
    echo "SUCCESS: 测试成功!查看结果:${results}iotest_${test_mem}g_${int}.xls"
    let "int++"
done
exit 0``
posted @ 2025-12-09 10:45  一只鱼摸鱼  阅读(2)  评论(0)    收藏  举报