How to Configure smartd for Email Alerts on Debian and Test with Simulated Drive Failures


24 views

Your current configuration appears mostly correct for basic email alert functionality, but let's verify all required components:

# Verify smartd service status
sudo systemctl status smartmontools

# Check if smartd is running with your parameters
ps aux | grep smartd

The following must be properly configured for email alerts to work:

  1. Functional mail transfer agent (MTA) installed (Postfix/Exim/Sendmail)
  2. Correct permissions on mail queue directory
  3. Valid DEVICESCAN line in smartd.conf

Here are three methods to test email alert functionality:

# Method 1: Force immediate check with test email
sudo smartd -q onecheck -m test@example.com

# Method 2: Simulate failing attribute (run as root)
smartctl -d ata -T permissive -v 194,raw48:60 /dev/sda

# Method 3: Trigger scheduled test email
sudo smartctl -t short /dev/sda
sudo smartctl -H /dev/sda

For more granular control, consider these smartd.conf directives:

DEVICESCAN -H -m admin@example.com -M exec /usr/local/bin/smartd-alert.sh \
-s (S/../.././02|L/../../6/03) -d removable -n standby -W 4,40,45

If alerts aren't arriving, check these systems:

# View mail queue
sudo mailq

# Check system mail logs
sudo tail -f /var/log/mail.log

# Test mail delivery manually
echo "Test message" | mail -s "SMART Alert Test" user@domain.com

Here's a sample script to enhance smartd monitoring:

#!/bin/bash
# smartd-alert.sh - Custom alert handler
RECIPIENT="admin@example.com"
SUBJECT="[SMART Alert] $SMARTD_FAILTYPE on $SMARTD_DEVICE"
MESSAGE="$SMARTD_MESSAGE\n\nFull report:\n$(smartctl -a $SMARTD_DEVICE)"

echo -e "$MESSAGE" | mail -s "$SUBJECT" "$RECIPIENT"
logger -t smartd "$SUBJECT"

The configuration you've implemented is technically correct for basic email alert functionality, but let's verify the complete setup and explore testing methods:

# Current configuration check
sudo systemctl status smartd
sudo smartctl -a /dev/sda | grep -i "SMART support"

Your /etc/smartd.conf line contains all necessary parameters, but these system components must also be functional:

  • Mail Transfer Agent (MTA) like Postfix or Exim installed and configured
  • Proper DNS resolution for email delivery
  • Correct permissions on mail queue directory

Use these methods to simulate failure conditions:

# Method 1: Force attribute change (non-destructive)
sudo smartctl -v 1,raw -s v 1,raw /dev/sda

# Method 2: Trigger self-test failure (non-destructive)
sudo smartctl -t select,10-20 /dev/sda
sudo smartctl -l selftest /dev/sda

For production systems, consider enhancing your configuration:

# /etc/smartd.conf example with multiple recipients and detailed reporting
DEVICESCAN -H -m admin@domain.com,backup@domain.com \
-M exec /usr/local/bin/smartd-alert.sh \
-s (S/../.././02|L/../../7/03) \
-a -o on -S on -W 4,40,45 -n standby,15 -R 5

If alerts aren't arriving, check these logs:

# System logs for SMARTD activity
journalctl -u smartd -f

# Mail server logs
tail -f /var/log/mail.log
grep smartd /var/log/syslog

For more flexible notifications, implement a custom script:

#!/bin/bash
# /usr/local/bin/smartd-alert.sh
SUBJECT="SMART Alert on $(hostname)"
BODY="SMART error detected:
$(cat /dev/stdin)
Device: $SMARTD_DEVICE
Failure: $SMARTD_FAILTYPE
"

echo "$BODY" | mailx -s "$SUBJECT" admin@domain.com
curl -X POST -H "Content-Type: application/json" \
-d '{"text":"SMART Alert: '"$SUBJECT"'","channel":"#alerts"}' \
https://hooks.slack.com/services/YOUR/WEBHOOK/PATH