1
0

raid.sh 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. #!/bin/bash
  2. #########################################################################
  3. # Script for check HDD & RAID state #
  4. # Created by Pavol Macko - DoIT #
  5. # ver 0.4 #
  6. #########################################################################
  7. #---------------------------- VARIABLES --------------------------------#
  8. REP=/tmp/hdd.rep
  9. WEB=/var/www/hdd
  10. TMP=/tmp/hdd.tmp
  11. LOG=/tmp/hdd.log
  12. test -d $WEB || mkdir -p $WEB
  13. test -f $TMP && rm -rf $TMP
  14. test -f $LOG && rm -rf $LOG
  15. #----------------------------- WEB-START -------------------------------#
  16. webstart(){
  17. cat > $WEB/hdd.html <<\EOF
  18. <!DOCTYPE html>
  19. <html lang="en">
  20. <head>
  21. <meta charset="UTF-8">
  22. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  23. <title>SITE HDD</title>
  24. <link rel="icon" href="logo.ico">
  25. <style>
  26. body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; background-color: #0f172a; color: #f8fafc; margin: 0; padding: 40px 20px; }
  27. .container { max-width: 1000px; margin: 0 auto; background: #1e293b; border-radius: 10px; box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.5); padding: 30px; border: 1px solid #334155; }
  28. h2 { text-align: center; color: #f1f5f9; margin-top: 0; margin-bottom: 6px; font-weight: 600; letter-spacing: -0.025em; }
  29. .subtitle { text-align: center; color: #94a3b8; font-size: 0.9em; margin-bottom: 30px; }
  30. table { width: 100%; border-collapse: collapse; }
  31. th, td { padding: 14px 16px; text-align: center; border-bottom: 1px solid #334155; }
  32. th { background-color: #0f172a; color: #cbd5e1; font-size: 0.8em; text-transform: uppercase; letter-spacing: 0.08em; font-weight: 700; }
  33. tr:hover { background-color: #334155; transition: background-color 0.15s ease; }
  34. .status-ok { background-color: rgba(16, 185, 129, 0.15); color: #34d399; border: 1px solid rgba(52, 211, 153, 0.3); padding: 4px 12px; border-radius: 20px; font-size: 0.85em; font-weight: 600; display: inline-block; }
  35. .status-fail { background-color: rgba(239, 68, 68, 0.15); color: #fca5a5; border: 1px solid rgba(252, 165, 165, 0.3); padding: 4px 12px; border-radius: 20px; font-size: 0.85em; font-weight: 600; display: inline-block; }
  36. </style>
  37. </head>
  38. <body>
  39. <div class="container">
  40. <h2>Disk overview on server [SITE]</h2>
  41. <div class="subtitle">Number of disks: <b style="color: #f8fafc;">[NUM]</b> | Last update: DATE</div>
  42. <table>
  43. <thead>
  44. <tr>
  45. <th>HDD-Model</th>
  46. <th>Serial</th>
  47. <th>Size</th>
  48. <th>Path</th>
  49. <th>Temp</th>
  50. <th>Fail</th>
  51. </tr>
  52. </thead>
  53. <tbody>
  54. EOF
  55. }
  56. #------------------------------ WEB-STOP -------------------------------#
  57. webend(){
  58. cat >> $WEB/hdd.html <<\EOF
  59. </tbody>
  60. </table>
  61. </div>
  62. </body>
  63. </html>
  64. EOF
  65. NUM=$(cat $REP | egrep -v "SERIAL|---" | wc -l)
  66. SITE=$(hostname -s | sed 's/-/ /g' | awk '{print $1}')
  67. sed -i "s/NUM/$NUM/g" $WEB/hdd.html
  68. sed -i "s/DATE/`date`/g" $WEB/hdd.html
  69. sed -i "s/SITE/$SITE/g" $WEB/hdd.html
  70. }
  71. #--------------------------- CHECK HDD INFO ----------------------------#
  72. checkhdd(){
  73. echo -e "- \e[1;32mExtracting\e[0m HDD info from PVE hypervisor"
  74. echo "--------------------------------------" > /tmp/hdd.rac
  75. echo -e "\e[1;37mHW-RAID-CONTROLER\e[0m" >> /tmp/hdd.rac
  76. echo "--------------------------------------" >> /tmp/hdd.rac
  77. CON=$(megacli -ShowSummary -aALL | grep ProductName | awk '{$1=$2="";print $0}' | sed 's/ //g')
  78. echo -e "\e[1;36m$CON\e[0m" >>/tmp/hdd.rac
  79. echo "------ ---------- --------" > /tmp/hdd.rai
  80. echo -e "\e[1;37mTYPE SIZE STATUS\e[0m" >> /tmp/hdd.rai
  81. echo "------ ---------- --------" >> /tmp/hdd.rai
  82. megacli -LDInfo -L0 -a0 > /tmp/hdd.r0
  83. RAI=$(cat /tmp/hdd.r0 | grep Name | sed 's/://g' | awk '{print $2}')
  84. SIZ=$(cat /tmp/hdd.r0 | grep "Size" | egrep -v "Sector|Strip" | awk '{print $3""$4}')
  85. STA=$(cat /tmp/hdd.r0 | grep State | awk '{print $3}')
  86. echo -e "\e[1;36m$RAI $SIZ $STA\e[0m" >> /tmp/hdd.rai
  87. megacli -LDInfo -L1 -a0 > /tmp/hdd.r1
  88. RAI=$(cat /tmp/hdd.r1 | grep Name | sed 's/://g' | awk '{print $2}')
  89. SIZ=$(cat /tmp/hdd.r1 | grep "Size" | egrep -v "Sector|Strip" | awk '{print $3""$4}')
  90. STA=$(cat /tmp/hdd.r1 | grep State | awk '{print $3}')
  91. echo -e "\e[1;36m$RAI $SIZ $STA\e[0m" >> /tmp/hdd.rai
  92. echo "------ ---------- --------" >> /tmp/hdd.rai
  93. megacli -PDList -a0 > /tmp/hdd.tmp
  94. echo "-------------------- ---------------- ---------- -------- --- -----" > $REP
  95. echo -e "\e[1;37mHDD-MODEL SERIAL SIZE PATH TEMP FAIL\e[0m" >> $REP
  96. echo "-------------------- ---------------- ---------- -------- --- -----" >> $REP
  97. SN=$(cat /tmp/hdd.tmp | grep "Inquiry Data" | awk '{print $NF}')
  98. for i in $SN;
  99. do
  100. MODL=$(cat /tmp/hdd.tmp | grep -B15 $i | grep "Inquiry Data" | awk '{print $3"-"$4}')
  101. SIZE=$(cat /tmp/hdd.tmp | grep -B15 $i | grep "Raw Size" | awk '{print $3"GB"}')
  102. PORT=$(cat /tmp/hdd.tmp | grep -B15 $i | grep "Connected Port Number" | awk '{print $4}')
  103. FAIL=$(cat /tmp/hdd.tmp | grep -B20 $i | grep "Predictive Failure Count" | awk '{print $NF}')
  104. TEMP=$(cat /tmp/hdd.tmp | grep -A12 $i | grep "Temperature" | sed 's/://g' | awk '{print $3}')
  105. if [[ "$FAIL" == "0" ]]; then
  106. FAIL_HTML="<span class=\"status-ok\">0</span>"
  107. else
  108. FAIL_HTML="<span class=\"status-fail\">$FAIL</span>"
  109. fi
  110. echo "<tr>" >> $WEB/hdd.html
  111. echo "<td>$MODL</td>" >> $WEB/hdd.html
  112. echo "<td>$i</td>" >> $WEB/hdd.html
  113. echo "<td>$SIZE</td>" >> $WEB/hdd.html
  114. echo "<td>$PORT</td>" >> $WEB/hdd.html
  115. echo "<td>$TEMP</td>" >> $WEB/hdd.html
  116. echo "<td>$FAIL_HTML</td>" >> $WEB/hdd.html
  117. echo "</tr>" >> $WEB/hdd.html
  118. echo "$MODL $i $SIZE $PORT $TEMP $FAIL" >> $REP
  119. done
  120. echo "-------------------- ---------------- ---------- -------- --- -----" >> $REP
  121. }
  122. #------------------------------- CORE ----------------------------------#
  123. webstart
  124. checkhdd
  125. webend
  126. echo -e "- Final HTML report (\e[1;35mhttp://$(ifconfig vmbr0 | grep -w inet | awk '{print $2}' | sed 's/ //g')/hdd/hdd.html\e[0m)"
  127. cat /tmp/hdd.rac
  128. cat /tmp/hdd.rai | column -t
  129. cat $REP | column -t