Free RAID Monitoring Tools for Linux: mdadm, smartd & More
The right RAID monitoring tool depends on what kind of RAID you have, not on which dashboard looks nicest. A degraded array keeps serving data silently - until the second disk fails - so the only job of a RAID monitor is to tell you, reliably, that the array lost redundancy.
| Your RAID | Free tool that reads its state | Alerts built in? |
|---|---|---|
Linux software RAID (/proc/mdstat) |
mdadm --monitor |
Yes - email or a program |
| Broadcom/LSI MegaRAID | storcli / storcli64 |
No - needs a check script |
| Dell PERC | perccli (or OpenManage) |
No - needs a check script |
| HPE Smart Array | ssacli |
No - needs a check script |
| Microchip/Adaptec | arcconf |
No - needs a check script |
| ZFS mirrors / RAID-Z | zpool status, zed |
Yes - zed email/scripts |
| Btrfs RAID1/10 | btrfs device stats |
No - needs a check script |
| Any of the above, disk level | smartd (smartmontools) |
Yes - email or a program |
To check the current state by hand first, see how to check RAID health on Linux.
Not Sure Which RAID You Have?
cat /proc/mdstat # lines like "md0 : active raid1" = software RAID
lspci | grep -iE "raid|megaraid|smart array|perc|adaptec" # hardware controller
zpool status 2>/dev/null # ZFS pools
btrfs filesystem show 2>/dev/null # Btrfs
lsblk -o NAME,TYPE,SIZE,MODEL # "raid1"/"raid5" types = md arrays
Software RAID: mdadm --monitor
mdadm ships with every distribution that supports md RAID and already contains a monitoring daemon. It watches all arrays and reports events such as Fail, DegradedArray, SparesMissing and RebuildFinished.
# 1. Tell mdadm where to send mail (Debian/Ubuntu: /etc/mdadm/mdadm.conf, RHEL: /etc/mdadm.conf)
echo "MAILADDR [email protected]" | sudo tee -a /etc/mdadm/mdadm.conf
# 2. Make sure the monitor service runs
sudo systemctl enable --now mdmonitor # RHEL family
systemctl status mdmonitor # Debian/Ubuntu run it via the mdadm package
# 3. Send a test alert for every array
sudo mdadm --monitor --scan --test --oneshot
Instead of email you can run your own script on every event with PROGRAM /usr/local/bin/raid-event.sh in mdadm.conf; it receives the event name, the array and the component device as arguments.
Also enable the periodic consistency check (checkarray on Debian/Ubuntu, raid-check on RHEL) - it reads every block and finds bad sectors on the other disk before a rebuild needs them.
Hardware RAID Controllers: Vendor CLIs
Hardware controllers hide the disks from Linux, so /proc/mdstat and often smartctl see nothing useful. The vendor CLI is the only reliable source of truth. They are free to download from the vendor's support site.
# Broadcom/LSI MegaRAID (storcli)
storcli64 /c0/vall show # virtual drives: look for "Optl" (optimal) vs "Dgrd"/"Pdgd"
storcli64 /c0/eall/sall show # physical drives: "Onln", "Rbld", "Failed"
# Dell PERC (perccli uses the same syntax)
perccli64 /c0/vall show
# HPE Smart Array
ssacli ctrl all show config # "OK" vs "Failed"/"Interim Recovery Mode"
# Microchip/Adaptec
arcconf getconfig 1 ld # "Optimal" vs "Degraded"
These tools do not alert on their own. Wrap the status line in a small check that exits non-zero when it is not optimal:
#!/usr/bin/env bash
# raid-hw-check.sh - MegaRAID/PERC: fail if any virtual drive is not Optimal
vds=$(storcli64 /c0/vall show 2>&1 | grep -E "^[0-9]+/[0-9]+ ")
[ -n "$vds" ] || { echo "no virtual drives found - is storcli installed and run as root?"; exit 3; }
echo "$vds"
echo "$vds" | grep -vq " Optl " && exit 2 # at least one VD is not Optimal
exit 0
ZFS: zpool status and zed
zpool status -x # prints "all pools are healthy" or only the problem pools
zpool status -v tank # details, including files with errors
The ZFS Event Daemon (zed) sends email on pool faults and finished scrubs. Set ZED_EMAIL_ADDR in /etc/zfs/zed.d/zed.rc, make sure zfs-zed is running, and schedule a monthly zpool scrub.
Disks Under Any RAID: smartd
RAID tells you a disk has failed; SMART often tells you one is about to. smartd from smartmontools watches reallocated and pending sectors and self-test results:
# /etc/smartd.conf - monitor all disks, short test daily at 2am, long test Saturdays at 3am, mail on problems
DEVICESCAN -a -o on -S on -s (S/../.././02|L/../../6/03) -m [email protected]
Behind a MegaRAID controller, address disks through it: smartctl -a -d megaraid,0 /dev/sda (use -d cciss,N for older HPE controllers).
Full Monitoring Stacks (Free, Self-Hosted)
If you already run one of these, use its RAID support rather than adding another tool:
- Prometheus node_exporter exposes md RAID state (
node_md_disks,node_md_state) out of the box; alert whennode_md_disks{state="failed"} > 0. - Zabbix and Icinga/Nagios have community templates and
check_raid-style plugins that wrap mdadm and the vendor CLIs above. - Netdata collects
/proc/mdstatautomatically and ships a default alarm for degraded md arrays.
They are free, but you host and maintain them - worth it for dozens of servers, heavy for three.
Run RAID Checks With Zuzia
For a handful of servers, the simplest route is to run the check command itself on a schedule. With the Zuzia agent installed, add a scheduled task that runs cat /proc/mdstat, zpool status -x or the raid-hw-check.sh script above every few minutes. Zuzia keeps the output of every run with an AI summary, next to the host's disk, CPU and RAM metrics - so a [U_] in mdstat shows up in the same panel where you watch everything else on that server.
FAQ
What is the best free RAID monitoring tool for Linux?
For software RAID, mdadm --monitor - it is already installed and alerts by email. For hardware RAID, the controller vendor's CLI (storcli, perccli, ssacli, arcconf) wrapped in a check script. Add smartd in both cases to catch failing disks early.
How do I get an email when a RAID disk fails?
Software RAID: set MAILADDR in mdadm.conf and run the mdmonitor service; test it with mdadm --monitor --scan --test --oneshot. ZFS: set ZED_EMAIL_ADDR in zed.rc. Hardware RAID: schedule a vendor-CLI check and alert on its exit code.
Can smartctl see disks behind a hardware RAID controller?
Often yes, with a device type flag: smartctl -a -d megaraid,N /dev/sdX for MegaRAID/PERC or -d cciss,N for older HPE Smart Array controllers.
How often should RAID status be checked?
Every 1-5 minutes for the array state (it is a cheap read), a daily short SMART test, and a monthly full consistency check or scrub.