racadm環境之伺服器BIOS設定(三)

來源:互聯網
上載者:User

標籤:local   sed   testing   命令   test   dell伺服器   $1   啟動順序   control   

此篇文章主要針對於DELL伺服器racadm環境的BIOS配置,以F1/F2 Error提示和硬碟啟動順序更改為例。racadm基礎用法可以參考前面文章。

#!/bin/bash# Sly Chen# date : 2016-09-14IDRAC_IP=$1USER=‘root‘PASSWD=‘calvin‘# racadm通用文法定義成變數COMMAND="racadm -r ${IDRAC_IP} -u $USER -p $PASSWD"# 擷取控制器CONTROLLER=$($COMMAND storage get controllers --nocertwarn | sed ‘s/\r/\n/g‘ | egrep "RAID")# 當前作業數量統計JOBS=$($COMMAND jobqueue view --nocertwarn | sed -n ‘/---/,$p‘ | wc -l)# 以紅色顯示function red() {    echo -e "\033[31;40m$*\033[0m"}# 以綠色顯示function green() {    echo -e "\033[32;40m$*\033[0m"}function sys_reboot {        # 定義物理機重啟函數    $COMMAND serveraction powercycle --nocertwarn &> /dev/null    if [ $? -eq 0 ]; then        echo "${IDRAC_IP}: server powercycle success"    else        red "${IDRAC_IP}: server powercycle false"        exit    fi}function jobdel () {    # 刪除所有作業記錄    echo "${IDRAC_IP}: start jobqueue delete."    while [ ${JOBS} -ne 2 ]; do        racadm -r ${IDRAC_IP} -u ${USER} -p ${PASSWD} jobqueue delete --all --nocertwarn &> /dev/null        local JOBS=$($COMMAND jobqueue view --nocertwarn | sed -n ‘/---/,$p‘ | wc -l)    done    echo "${IDRAC_IP}: jobqueue delete success."}function get_job_id (){    # 此函數用於判斷任務作業百分比,達到100%時確認作業完成    # 啟用LC    $COMMAND set LifeCycleController.LCAttributes.LifecycleControllerState 1 &> /dev/null    # 作業進度100%則退出死迴圈    while true; do        # 擷取作業進度百分比        JOB_PERCENT=$(${COMMAND} jobqueue view --nocertwarn | egrep -A7 "$JOBID" | awk -F "=" ‘/Percent Complete/ {print $2}‘ | sed ‘s/\r//g‘)        if [ -z "$JOB_PERCENT" ]; then            red "${IDRAC_IP}: Jobqueue is empty"            exit        elif echo $JOB_PERCENT | egrep ‘100‘ &> /dev/null; then            break        fi        sleep 10    done    echo "${IDRAC_IP}: Jobqueue create success."}function jobsub_bios (){    # 提交BIOS任務    echo "${IDRAC_IP}: Jobqueue create BIOS.Setup, May be need 15min. Start time: $(date +%Y-%m-%d-%H:%M:%S)"    # 提交BIOS作業    local JOBID=$($COMMAND jobqueue create BIOS.Setup.1-1 --nocertwarn | awk ‘/Commit JID/ {print $4}‘ | sed ‘s/\r//g‘)    [ -z "$JOBID" ] && red "${IDRAC_IP}: Did not get the JID" && exit    ${COMMAND} serveraction powercycle --nocertwarn &> /dev/null    # 判斷作業百分比    get_job_id ${IDRAC_IP}    echo "${IDRAC_IP}: BIOS.Setup task jobsub done"}# job submitfunction jobsub (){    echo "${IDRAC_IP}: Jobqueue create Hard disk task, May be need 15min. Start time: $(date +%Y-%m-%d-%H:%M:%S)"    # 提交陣列作業,擷取作業JID    local JOBID=$($COMMAND jobqueue create ${CONTROLLER} -s TIME_NOW -r forced --nocertwarn | awk ‘/Commit JID/ {print $4}‘ | sed ‘s/\r//g‘)    # JID為空白則退出    [ -z "$JOBID" ] && red "${IDRAC_IP}: Did not get the JID" && exit    ${COMMAND} serveraction powercycle --nocertwarn &> /dev/null    # 判斷作業百分比    get_job_id ${IDRAC_IP}    echo "${IDRAC_IP}: BIOS Controller task jobsub done"}function disable_error_prompt {    # BIOS F1/F2 ErrPrompt    echo "${IDRAC_IP}: Start disable ErrPrompt"    $COMMAND set BIOS.MiscSettings.ErrPrompt Disabled &> /dev/null    echo "${IDRAC_IP}: ErrPrompt disabled done"}function set_hard_disk_first_boot () {    # 取出所有啟動裝置重新排序,sort命令預設會比較首字元,磁碟啟動會優先於網卡    BOOT_DRIVES_LIST=$($COMMAND get BIOS.BiosBootSettings.BootSeq | awk -F ‘[=]‘ ‘/BootSeq/{print $2}‘ | sed ‘s/\r$//;s/,/ /g‘ | xargs -n 1 | sort | xargs -n 9 | sed ‘s/ /,/g‘)    $COMMAND set BIOS.BiosBootSettings.BootSeq $BOOT_DRIVES_LIST &> /dev/null}function bios_setup_check () {    # 定義BIOS檢查函數    ERR_PROMPT_STATU_CHK=$($COMMAND get BIOS.MiscSettings.ErrPrompt | awk -F ‘=‘ ‘/ErrPrompt/ {print $2}‘ | sed ‘s/\r$//‘)    # ErrorPrompt狀態不為Disabled則報錯        if [ "$ERR_PROMPT_STATU_CHK" == "Disabled" ]; then            green "${IDRAC_IP}: BIOS F1/F2 error prompt is Disabled."    else            red "${IDRAC_IP}: BIOS F1/F2 error prompt is Enabled"            exit    fi    FIRST_BOOT_NAME_CHK=$($COMMAND get BIOS.BiosBootSettings.BootSeq  | awk -F "[=.]" ‘/BootSeq/ {print $2}‘ | sed ‘s/\r$//‘)    # 第一啟動不為HardDisk則報錯,如果有包含CD-ROM啟動,排序需往後移         if [ "$FIRST_BOOT_NAME_CHK" == "HardDisk" ]; then        green "${IDRAC_IP}: After testing,Hard disk first boot."    else        red "${IDRAC_IP}: The boot sequence: ${FIRST_BOOT_NAME_CHK}"        exit    fi}function main (){    jobdel ${IDRAC_IP}    # 擷取第一啟動項裝置名稱    FIRST_BOOT_NAME=$($COMMAND get BIOS.BiosBootSettings.BootSeq  | awk -F "[=.]" ‘/BootSeq/ {print $2}‘ | sed ‘s/\r$//‘)    # 擷取ErrPrompt項狀態    ERR_PROMPT_STATU=$($COMMAND get BIOS.MiscSettings.ErrPrompt | awk -F ‘=‘ ‘/ErrPrompt/ {print $2}‘ | sed ‘s/\r$//‘)    # 如果BIOS當前設定為硬碟第一啟動,且F1/F2錯誤提示為Disabled,則退出,否則執行更改函數    if [ "$FIRST_BOOT_NAME" == "HardDisk"  -a "$ERR_PROMPT_STATU" == "Disabled" ]; then        echo "${IDRAC_IP}: BIOS F1/F2 errot prompt default is Disabled"        echo "${IDRAC_IP}: Hard disk drive default is the first boot"        exit    elif [ "$FIRST_BOOT_NAME" != "HardDisk"  -a "$ERR_PROMPT_STATU" == "Disabled" ]; then        set_hard_disk_first_boot        echo "${IDRAC_IP}: BIOS F1/F2 errot prompt default is Disabled"        jobsub_bios ${IDRAC_IP}    elif [ "$FIRST_BOOT_NAME" == "HardDisk"  -a "$ERR_PROMPT_STATU" == "Enabled" ]; then        echo "${IDRAC_IP}: Hard disk drive default is the first boot"        disable_error_prompt        jobsub_bios ${IDRAC_IP}    elif [ "$FIRST_BOOT_NAME" != "HardDisk"  -a "$ERR_PROMPT_STATU" == "Enabled" ]; then        set_hard_disk_first_boot        disable_error_prompt        jobsub_bios ${IDRAC_IP}    else        red "${IDRAC_IP}: Get Bios valus error"        exit 3    fi    bios_setup_check ${IDRAC_IP}}main ${IDRAC_IP}

racadm環境之伺服器BIOS設定(三)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.