Date: Wed, 17 Dec 2008 16:23:58 -0500 (EST) From: Garrett Wollman <wollman@FreeBSD.org> To: FreeBSD-gnats-submit@FreeBSD.org Subject: ports/129722: [PATCH] smartmontools ought to have a periodic script Message-ID: <200812172123.mBHLNwLg016985@hergotha.csail.mit.edu> Resent-Message-ID: <200812172200.mBHM01hK092479@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 129722 >Category: ports >Synopsis: [PATCH] smartmontools ought to have a periodic script >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Wed Dec 17 22:00:00 UTC 2008 >Closed-Date: >Last-Modified: >Originator: Garrett Wollman >Release: FreeBSD 6.3-RELEASE-p2 i386 >Organization: none apparent >Environment: System: FreeBSD hergotha.csail.mit.edu 6.3-RELEASE-p2 FreeBSD 6.3-RELEASE-p2 #6: Sat Oct 4 15:38:18 EDT 2008 root@:/usr/obj/usr/src/sys/HERGOTHA i386 smartmontools 5.38 >Description: It would be very helpful if smartmontools came with a set of periodic scripts. One to show the current status, and perhaps another (weekly? monthly?) to run background diagnostics. I've implemented a daily script that does something reasonable. By default, it runs "smartctl -H" against a user-specified list of devices; if the status returned indicates an unhealthy disk, it will run "smartctl -a" to provide more information. >How-To-Repeat: >Fix: Index: Makefile =================================================================== RCS file: /home/ncvs/ports/sysutils/smartmontools/Makefile,v retrieving revision 1.33 diff -u -r1.33 Makefile --- Makefile 21 Aug 2008 06:18:27 -0000 1.33 +++ Makefile 17 Dec 2008 20:31:52 -0000 @@ -18,7 +18,7 @@ GNU_CONFIGURE= yes CONFIGURE_ARGS= --with-docdir=${DOCSDIR} --enable-sample -SUB_FILES= pkg-message +SUB_FILES= pkg-message smart USE_RC_SUBR= smartd MAN5= smartd.conf.5 @@ -28,6 +28,7 @@ @${REINPLACE_CMD} -e 's| install-initdDATA | |' ${WRKSRC}/Makefile.in post-install: + ${INSTALL_SCRIPT} ${WRKDIR}/smart ${PREFIX}/etc/periodic/daily/smart @${CAT} ${PKGMESSAGE} .include <bsd.port.mk> Index: pkg-plist =================================================================== RCS file: /home/ncvs/ports/sysutils/smartmontools/pkg-plist,v retrieving revision 1.4 diff -u -r1.4 pkg-plist --- pkg-plist 6 Jan 2007 20:13:10 -0000 1.4 +++ pkg-plist 17 Dec 2008 20:58:37 -0000 @@ -1,6 +1,7 @@ @comment $FreeBSD: ports/sysutils/smartmontools/pkg-plist,v 1.4 2007/01/06 20:13:10 pav Exp $ @unexec /bin/echo "===>" Stopping smartd ... @unexec /usr/bin/killall smartd 2>/dev/null || true +etc/periodic/daily/smart etc/smartd.conf.sample sbin/smartctl sbin/smartd Index: files/pkg-message.in =================================================================== RCS file: /home/ncvs/ports/sysutils/smartmontools/files/pkg-message.in,v retrieving revision 1.1 diff -u -r1.1 pkg-message.in --- files/pkg-message.in 11 May 2006 17:02:59 -0000 1.1 +++ files/pkg-message.in 17 Dec 2008 21:01:39 -0000 @@ -5,7 +5,12 @@ %%PREFIX%%/sbin/smartctl -a /dev/ad0 for first ATA drive %%PREFIX%%/sbin/smartctl -a /dev/da0 for first SCSI drive -To enable monitor of drives, you can use %%PREFIX%%/sbin/smartd +To include drive health information in your daily status reports, +add a line like the following to /etc/periodic.conf: + daily_status_smart_devices="/dev/ad0 /dev/da0" +substituting the appropriate device names for your SMART-capable disks. + +To enable drive monitoring, you can use %%PREFIX%%/sbin/smartd. A sample configuration file has been installed as %%PREFIX%%/etc/smartd.conf.sample Copy this file to %%PREFIX%%/etc/smartd.conf and edit appropriately Index: files/smart.in =================================================================== RCS file: files/smart.in diff -N files/smart.in --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ files/smart.in 17 Dec 2008 20:51:22 -0000 @@ -0,0 +1,52 @@ +#!/bin/sh +# This script is in the public domain. Original author: Garrett Wollman +# +# $FreeBSD$ +# + +if [ -r /etc/defaults/periodic.conf ]; then + . /etc/defaults/periodic.conf + source_periodic_confs +fi + +smartctl=%%PREFIX%%/sbin/smartctl +: ${daily_status_smartctl_flags="-H"} +: ${daily_status_smartctl_extra_status_flags="-a"} +# no default for ${daily_status_smart_devices} +if [ -z "${daily_status_smart_devices}" ]; then + : ${daily_status_smart_enabled="NO"} +else + : ${daily_status_smart_enabled="YES"} +fi +trim_junk="tail -n +4" + +tmpfile="$(mktemp /var/run/daily.XXXXXXXX)" +trap "rm -f ${tmpfile}" 0 1 3 15 + +rc=0 +case "${daily_status_smart_enable}" in + [Nn][Oo]) + ;; + *) + for device in ${daily_status_smart_devices}; do + if [ -e ${device} ]; then + echo + echo "Checking health of ${device}:" + echo + ${smartctl} ${daily_status_smartctl_flags} ${device} > "${tmpfile}" + status=$? + if [ $((status & 3)) -ne 0 ]; then + rc=2 + ${trim_junk} "${tmpfile}" + elif [ $status -ne 0 ]; then + rc=1 + ${smartctl} ${daily_status_smartctl_extra_status_flags} ${device} | ${trim_junk} + else + ${trim_junk} "${tmpfile}" + fi + fi + done + ;; +esac + +exit "$rc" >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812172123.mBHLNwLg016985>