Cara Monitoring Status Disk RAID di Server Dell Menggunakan Bash Script dan PercCLI

Dalam dunia sistem administrator dan DevOps, menjaga kesehatan storage server adalah hal yang sangat penting. RAID (Redundant Array of Independent Disks) sering digunakan untuk meningkatkan performa dan redundansi data, namun tetap rentan terhadap kegagalan hardware. Oleh karena itu, monitoring kondisi RAID secara otomatis merupakan langkah preventif yang sangat dianjurkan, terutama untuk server Dell yang menggunakan controller PERC (PowerEdge RAID Controller).
Pada artikel ini, kita akan membahas bagaimana melakukan monitoring otomatis kondisi disk RAID pada server Dell dengan menggunakan perccli
, Bash, dan mengirim notifikasi hasilnya ke email menggunakan msmtp
. ✅
🚀 Langkah-langkah Instalasi dan Konfigurasi
1. Unduh perccli dari Situs Dell
Karena Dell tidak mengizinkan wget
langsung dari URL publik, Anda perlu:
- Buka halaman perccli driver Dell.
- Unduh file
PERCCLI_7.3208.0_Linux_A01.tar.gz
ke komputer lokal. - Upload file tersebut ke server menggunakan FTP, SCP, atau metode transfer lainnya.
2. Ekstrak dan Instalasi perccli
tar -xzf PERCCLI_7.3208.0_Linux_A01.tar.gz
cd PERCCLI_7.3208.0_Linux_A01/Linux
Instal paket alien
jika belum ada:
sudo apt install alien -y
Lalu konversi RPM ke DEB dan instal:
sudo alien perccli-007.3208.0000.0000-1.noarch.rpm
sudo dpkg -i perccli_007.3208.0000.0000-2_all.deb
3. Buat Symlink untuk Akses Global
Cek lokasi biner perccli64:
sudo find / -name perccli64 2>/dev/null
Biasanya berada di:
/opt/MegaRAID/perccli/perccli64
Buat symlink agar bisa digunakan langsung:
sudo ln -s /opt/MegaRAID/perccli/perccli64 /usr/local/bin/perccli
4. Uji Coba perccli
perccli /c0 show
Jika informasi RAID muncul, maka perccli sudah siap digunakan. 💪
📜 Script Bash untuk Monitoring dan Email
Buat file /usr/local/bin/raid_monitor.sh
dengan isi sebagai berikut:
#!/bin/bash
PERC_CLI="/opt/MegaRAID/perccli/perccli64"
# Pastikan perccli64 tersedia
if ! command -v "$PERC_CLI" &>/dev/null; then
echo "Error: perccli64 not found." >&2
exit 1
fi
# Ambil output drive
PERC_OUTPUT=$("$PERC_CLI" /c0 /eall /sall show)
# Ambil bagian Drive Information
DRIVE_INFO=$(echo "$PERC_OUTPUT" | awk '
/Drive Information/ {found=1; next}
found && /^-{3,}/ {dashes++; next}
found && dashes == 2 && /^[0-9]+:[0-9]+/ {print}
found && /^EID=/ {exit}
')
if [[ -z "$DRIVE_INFO" ]]; then
echo "No drive info found. Check if perccli is working." >&2
exit 1
fi
DISK_ROWS=""
HAS_PROBLEM=0
while IFS= read -r line; do
[[ -z "$line" ]] && continue
STATUS=$(echo "$line" | awk '{print $3}')
EMOJI=""
case "$STATUS" in
Onln) EMOJI="🟢 Online" ;;
Offln) EMOJI="🔴 Failed (Offline)"; HAS_PROBLEM=1 ;;
Failed) EMOJI="🔴 Failed"; HAS_PROBLEM=1 ;;
Dgrd|Pdgd) EMOJI="⚠️ Degraded"; HAS_PROBLEM=1 ;;
Rbld) EMOJI="🔄 Rebuild"; HAS_PROBLEM=1 ;;
Missing) EMOJI="❌ Missing"; HAS_PROBLEM=1 ;;
UGd) EMOJI="🆕 Unconfigured Good" ;;
JBOD) EMOJI="📦 JBOD Mode" ;;
HSP) EMOJI="🛟 Hot Spare" ;;
GHS) EMOJI="🛟 Global Hot Spare" ;;
UC) EMOJI="🧩 Unconfigured Bad"; HAS_PROBLEM=1 ;;
*) EMOJI="❓ Unknown"; HAS_PROBLEM=1 ;;
esac
DISK_ROWS+="<tr><td>$(echo "$line" | cut -d ' ' -f1)</td><td>$line</td><td>$EMOJI</td></tr>"
done <<< "$DRIVE_INFO"
DISK_TABLE="<table><thead><tr><th>Drive</th><th>Details</th><th>Status</th></tr></thead><tbody>$DISK_ROWS</tbody></table>"
# Ambil rebuild progress
REBUILD_PROGRESS_RAW=$("$PERC_CLI" /c0 /eall /sall show rebuild | grep -i 'Progress')
REBUILD_ROWS=""
if [[ -n "$REBUILD_PROGRESS_RAW" ]]; then
while IFS= read -r line; do
REBUILD_ROWS+="<tr><td colspan=3><pre>$line</pre></td></tr>"
done <<< "$REBUILD_PROGRESS_RAW"
else
REBUILD_ROWS+="<tr><td colspan=3>(No rebuild in progress)</td></tr>"
fi
EMAIL_REBUILD_PROGRESS="<h2>🔄 Rebuild Progress</h2><table><thead><tr><th colspan=3>Progress Details</th></tr></thead><tbody>$REBUILD_ROWS</tbody></table>"
# Ambil virtual drive status + emoji
VD_RAW=$(echo "$($PERC_CLI /c0 show)" | awk '
/VD LIST/ {found=1}
found && /^DG\/VD/ {next}
found && NF && $1 ~ /^[0-9]+\/[0-9]+/ {print}
')
VD_ROWS=""
if [[ -z "$VD_RAW" ]]; then
EMAIL_VD="<h2>💽 Virtual Drive Status</h2><p>(No virtual drives found)</p>"
HAS_PROBLEM=1
else
while IFS= read -r line; do
STATUS=$(echo "$line" | awk '{print $3}')
case "$STATUS" in
Optl) EMOJI="🟢 Optimal" ;;
Dgrd) EMOJI="⚠️ Degraded"; HAS_PROBLEM=1 ;;
Rbld) EMOJI="🔄 Rebuild"; HAS_PROBLEM=1 ;;
Fltl|Fail*) EMOJI="🔴 Failed"; HAS_PROBLEM=1 ;;
*) EMOJI="❓ Unknown"; HAS_PROBLEM=1 ;;
esac
VD_ROWS+="<tr><td>$(echo "$line" | cut -d ' ' -f1)</td><td>$line</td><td>$EMOJI</td></tr>"
done <<< "$VD_RAW"
EMAIL_VD="<h2>💽 Virtual Drive Status</h2><table><thead><tr><th>VD</th><th>Details</th><th>Status</th></tr></thead><tbody>$VD_ROWS</tbody></table>"
fi
# Ambil event log terakhir
EMAIL_EVENTS="<h2>📝 RAID Event Log (Last 10 Critical Events)</h2>"
EVENT_LOG=$("$PERC_CLI" /c0 show events | grep -iE 'error|fail|critical|degrad|rebuild' | tail -n 10)
EVENT_ROWS=""
if [[ -n "$EVENT_LOG" ]]; then
while IFS= read -r line; do
EVENT_ROWS+="<tr><td colspan=3><pre>$line</pre></td></tr>"
done <<< "$EVENT_LOG"
else
EVENT_ROWS+="<tr><td colspan=3>(No critical events found)</td></tr>"
fi
EMAIL_EVENTS+="<table><thead><tr><th colspan=3>Event Details</th></tr></thead><tbody>$EVENT_ROWS</tbody></table>"
# Ringkasan
if [[ "$HAS_PROBLEM" -eq 1 ]]; then
SUMMARY="<strong style=\"color:#f39c12\">⚠️ WARNING: One or more issues detected on RAID system.</strong>"
else
SUMMARY="<strong style=\"color:#2ecc71\">✅ All RAID components are healthy.</strong>"
fi
# HTML template
date_now=$(date)
email_html=$(cat <<EOF
Subject: RAID Report - $(hostname)
To: andikaferdialvianto@gmail.com
From: RAID Monitor <masdika@gmail.com>
Content-Type: text/html
<!DOCTYPE html>
<html>
<head>
<meta charset=\"UTF-8\">
<style>
body {
background: linear-gradient(135deg, #0f1a2d, #1e2a44);
color: #f0f0f0;
font-family: 'Segoe UI', 'Helvetica Neue', Helvetica, Arial, sans-serif;
padding: 20px;
line-height: 1.6;
}
header {
padding: 10px 0 20px;
border-bottom: 1px solid #2c3e50;
}
h1 {
color: #00d9ff;
margin: 0 0 5px;
font-size: 28px;
}
h2 {
color: #00d9ff;
margin-top: 30px;
}
pre {
background-color: #1e1e2f;
padding: 12px;
border-radius: 6px;
overflow-x: auto;
font-family: 'Consolas', 'Courier New', Courier, monospace;
font-size: 14px;
color: #e0e0e0;
}
table {
width: 100%;
border-collapse: collapse;
margin-bottom: 20px;
}
th, td {
padding: 8px 12px;
border: 1px solid #444;
text-align: left;
}
th {
background-color: #2d3a50;
color: #00d9ff;
}
td {
background-color: #1e2538;
}
footer {
margin-top: 40px;
padding-top: 15px;
text-align: center;
font-size: 13px;
color: #888;
border-top: 1px solid #2c3e50;
}
</style>
</head>
<body>
<header>
<h1>🖥️ RAID Report - $(hostname)</h1>
<p><strong>🕒 Date:</strong> $date_now</p>
</header>
<main>
<h2>📦 Physical Disk Status</h2>
$DISK_TABLE
$EMAIL_VD
$EMAIL_REBUILD_PROGRESS
$EMAIL_EVENTS
<h2>🔎 Summary</h2>
<p>$SUMMARY</p>
</main>
<footer>
🔧 Powered by <a href=\"https://www.masdika.biz.id\" style=\"color:#00d9ff; text-decoration:none;\">Masdika.BIZ.ID</a>
</footer>
</body>
</html>
EOF
)
# Kirim email
echo -e "$email_html" | msmtp masdika@gmail.com
# Simpan log lokal
echo -e "$email_html" >> /var/log/raid_monitor_$(date +%F).log
Beri hak akses eksekusi:
sudo chmod +x /usr/local/bin/raid_monitor.sh
Pastikan konfigurasi .msmtprc
sudah benar dan bisa kirim email. 📧
📧 Contoh Output Email

⏰ Cronjob: Monitoring Otomatis Setiap Hari
Buka crontab dengan:
crontab -e
Tambahkan baris berikut:
0 0 * * * /usr/local/bin/raid_monitor.sh
Script akan berjalan otomatis setiap hari jam 12 malam dan mengirimkan hasil monitoring RAID ke email Anda. ⏰
🔒 Kompatibilitas
✅ Kompatibel dengan berbagai seri server Dell seperti:
- Dell PERC H710, H730, H740, H745, H810, H330, H345, dsb.
Pastikan Anda menggunakan versi perccli
yang sesuai dengan seri PERC controller Anda.
✨ Kesimpulan
Dengan menggunakan perccli
, Bash script, dan msmtp
, kita bisa membuat sistem monitoring otomatis RAID pada server Dell. Solusi ini ringan, efisien, dan cepat diimplementasikan. Notifikasi setiap malam akan membantu Anda mendeteksi lebih awal jika ada disk yang gagal, degraded, atau offline.
Jaga data Anda, pantau RAID Anda. 🚨
Untuk perusahaan dengan infrastruktur Dell, langkah ini sangat disarankan sebagai bagian dari kebijakan pemeliharaan preventif.
Mantap mas.
kalo boleh tau ini di server DELL nya perlu install OS dulu kah?
Iya, perlu install OS dulu di server Dell nya, karena script ini dijalankan di sistem operasi (misalnya Ubuntu, Debian, CentOS, dsb)