Skip to content

Commit

Permalink
Add script to send mail in case btrfs issues were detected
Browse files Browse the repository at this point in the history
This can be very useful for smaller setups where the admin still would
like to receive an email in case a disk in a btrfs RAID array fails.

Partially resolves #88
  • Loading branch information
ximion committed Mar 19, 2022
1 parent be42cb6 commit 9419ac2
Show file tree
Hide file tree
Showing 4 changed files with 80 additions and 0 deletions.
7 changes: 7 additions & 0 deletions btrfs-errmail.service
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
[Unit]
Description=Check for btrfs issues and send an email if any were found
Documentation=man:btrfs

[Service]
Type=simple
ExecStart=/usr/share/btrfsmaintenance/btrfs-errmail.sh
53 changes: 53 additions & 0 deletions btrfs-errmail.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#!/bin/bash
#
# Copyright (c) 2022 Matthias Klumpp <matthias@tenstral.net>

umask 022
PATH=/sbin:/bin:/usr/sbin:/usr/bin
export PATH

if [ -f /etc/sysconfig/btrfsmaintenance ] ; then
. /etc/sysconfig/btrfsmaintenance
fi

if [ -f /etc/default/btrfsmaintenance ] ; then
. /etc/default/btrfsmaintenance
fi

. $(dirname $(realpath "$0"))/btrfsmaintenance-functions

if [ -z "$BTRFS_MAILADDR" ]
then
# no email set, nothing to do for us
exit 0
fi

BTRFS_STATS_MOUNTPOINTS=$(expand_auto_mountpoint "auto")
OIFS="$IFS"
IFS=:
for MM in $BTRFS_STATS_MOUNTPOINTS; do
if ! is_btrfs "$MM"; then
echo "Path $MM is not btrfs, skipping"
continue
fi
devstats=$(btrfs device stats --check $MM 2>&1)
if [ $? -ne 0 ]; then
mail_body="$(sendmail -t <<EOF
To: $BTRFS_MAILADDR
Subject: Btrfs device issue on $MM @ $HOSTNAME
This is an automatically generated mail message from btrfs-errmail
running on $HOSTNAME
An issue has been detected on the btrfs device mounted as $MM.
Faithfully yours, etc.
P.S. The 'btrfs device stats' output is:
$devstats
EOF
)"
fi
done

exit 0
10 changes: 10 additions & 0 deletions btrfs-errmail.timer
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
[Unit]
Description=Check for btrfs issues and send mail if any were found
Documentation=man:btrfs

[Timer]
OnCalendar=hourly
Persistent=true

[Install]
WantedBy=timers.target
10 changes: 10 additions & 0 deletions sysconfig.btrfsmaintenance
Original file line number Diff line number Diff line change
Expand Up @@ -152,3 +152,13 @@ BTRFS_TRIM_MOUNTPOINTS="/"
# the timer for these tasks(s) elapsed while the system was suspended
# or powered off.
BTRFS_ALLOW_CONCURRENCY="false"

## Path: System/File systems/btrfs
## Description: Mail address to send issue reports to
## Type: string
## Default: ""
#
# If this is set to an email address or an username like "root", btrfs device stats
# data will be checked every hour and an email will be sent to the given address
# if any issues(like data corruption or read issues) were found.
BTRFS_MAILADDR=""

0 comments on commit 9419ac2

Please sign in to comment.