一个集成在DRBL内的硬盘检测脚本

#!/bin/bash

#检查硬盘健康状态的函数,主要检查C5和C7两个值

Diskcheck(){

    disknum=$1 #接收参数决定需要检查的磁盘的盘符

    echo "Check $disknum"

    IFS=" " read -r -a C5info <<< "$(smartctl -a /dev/$disknum | grep Current_Pending_Sector)"

    IFS=" " read -r -a C7info <<< "$(smartctl -a /dev/$disknum | grep UDMA_CRC_Error_Count)" #通过smartctl 获取需要检测的两个参数的值,放入数组

    echo "The Value of C5 is ${C5info[9]}"

    echo "The Value of C7 is ${C7info[9]}"  

    if  [[ "${C5info[9]}" -gt "0"  ||  "${C7info[9]}" -gt "0" ]]; then #判断两个值是否为零,不为零即硬盘可能有问题,提示重启检查

            echo -e "\033[31m Your HardDisk has some problem, Please reboot and checkout \033[0m"

            read -p "Press [Enter] key to restart..."

            echo "reboot"

            reboot

    else

      echo -e "\033[31m Hard disk no exception,Continue \033[0m "

    fi

}



disktype=$(cat /sys/block/sda/queue/rotational) #判断sda的盘是机械还是固态,机械数值应为1

if [[ "$disktype" -eq "1" ]]; then #若数值为1说明第一个盘为机械或nvme固态,即检测sda的盘即可

    echo "The First  Disk is HDD or Nvme"

    Diskcheck sda

    sleep 5

else

    echo "The First  Disk is SATA ssd" #否则则是sata接口的固态,即检测sdb的盘

    Diskcheck sdb

    sleep 5

fi

利用smartctl检测机械硬盘的健康状态,将脚本加入DRBL的prerun阶段,可以达到在装机之前检测的效果








 

你可能感兴趣的:(运维,shell,shell)