← All guides

Free RAID Monitoring Tools for Linux: mdadm, smartd & More

Updated:

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 when node_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/mdstat automatically 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.

We use cookies to ensure the proper functioning of our website.