From owner-freebsd-bugs@FreeBSD.ORG Wed Aug 4 12:40:07 2010 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 117FF1065670 for ; Wed, 4 Aug 2010 12:40:07 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id C7AB48FC19 for ; Wed, 4 Aug 2010 12:40:06 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.4/8.14.4) with ESMTP id o74Ce6wJ018511 for ; Wed, 4 Aug 2010 12:40:06 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.4/8.14.4/Submit) id o74Ce6ot018510; Wed, 4 Aug 2010 12:40:06 GMT (envelope-from gnats) Resent-Date: Wed, 4 Aug 2010 12:40:06 GMT Resent-Message-Id: <201008041240.o74Ce6ot018510@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, "J. Hellenthal" Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E51AF1065672 for ; Wed, 4 Aug 2010 12:37:42 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id D314E8FC22 for ; Wed, 4 Aug 2010 12:37:42 +0000 (UTC) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.3/8.14.3) with ESMTP id o74Cbgo8014882 for ; Wed, 4 Aug 2010 12:37:42 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.3/8.14.3/Submit) id o74CbgOR014881; Wed, 4 Aug 2010 12:37:42 GMT (envelope-from nobody) Message-Id: <201008041237.o74CbgOR014881@www.freebsd.org> Date: Wed, 4 Aug 2010 12:37:42 GMT From: "J. Hellenthal" To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: conf/149271: Merge Request for commit r209195 800.scrub-zfs to stable/8 X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 04 Aug 2010 12:40:07 -0000 >Number: 149271 >Category: conf >Synopsis: Merge Request for commit r209195 800.scrub-zfs to stable/8 >Confidential: no >Severity: non-critical >Priority: high >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: change-request >Submitter-Id: current-users >Arrival-Date: Wed Aug 04 12:40:06 UTC 2010 >Closed-Date: >Last-Modified: >Originator: J. Hellenthal >Release: stable/8 >Organization: >Environment: N/A >Description: Please merge commit r209195 800.scrub-zfs to stable/8. ------------------------------------------------------------------------ r209195 | netchild | 2010-06-15 04:58:16 -0400 (Tue, 15 Jun 2010) | 17 lines Changed paths: A /head/etc/periodic/daily/800.scrub-zfs M /head/share/man/man5/periodic.conf.5 Add a periodic zfs scrub script. Features: - configurable amount of days between scrubs (default value or per pool) - do not scrub directly after pool creation (respects the configured number of days between scrubs) - do not scrub if a scrub is in progress - tells how to see the status of the scrub - tells how many days since the last scrub if it skips the scrubbing - warns if a non-existent pool is specified explicitely (default: no pools specified -> all currently imported pools are handled) - runs late in the periodic run to not slow down the other periodic daily scripts Discussed on: fs@ ------------------------------------------------------------------------ >How-To-Repeat: N/A >Fix: 800.scrub-zfs | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Makefile | 6 +++- 2 files changed, 91 insertions(+), 1 deletion(-) Patch attached with submission follows: Index: etc/periodic/daily/800.scrub-zfs =================================================================== --- etc/periodic/daily/800.scrub-zfs (revision 0) +++ etc/periodic/daily/800.scrub-zfs (revision 0) @@ -0,0 +1,86 @@ +#!/bin/sh +# +# $FreeBSD: stable/8/etc/periodic/daily/800.scrub-zfs 209195 2010-06-15 08:58:16Z netchild $ +# + +# If there is a global system configuration file, suck it in. +# +if [ -r /etc/defaults/periodic.conf ] +then + . /etc/defaults/periodic.conf + source_periodic_confs +fi + +: ${daily_scrub_zfs_default_threshold=30} + +case "$daily_scrub_zfs_enable" in + [Yy][Ee][Ss]) + echo + echo 'Scrubbing of zfs pools:' + + if [ -z "${daily_scrub_zfs_pools}" ]; then + daily_scrub_zfs_pools="$(zpool list -H -o name)" + fi + + for pool in ${daily_scrub_zfs_pools}; do + # sanity check + zpool list ${pool} >/dev/null 2>&1 + if [ $? -ne 0 ]; then + echo " WARNING: pool '${pool}' specified in" + echo " '/etc/periodic.conf:daily_scrub_zfs_pools'" + echo " does not exist" + continue + fi + + # successful only if there is at least one pool to scrub + rc=0 + + # determine how many days shall be between scrubs + eval _pool_threshold=\${daily_scrub_zfs_${pool}_threshold} + if [ -z "${_pool_threshold}" ];then + _pool_threshold=${daily_scrub_zfs_default_threshold} + fi + + _last_scrub=$(zpool history ${pool} | \ + egrep "^[0-9\.\:\-]{19} zpool scrub ${pool}\$" | tail -1 |\ + cut -d ' ' -f 1) + if [ -z "${_last_scrub}" ]; then + # creation time of the pool if no scrub was done + _last_scrub=$(zpool history ${pool} | \ + sed -ne '2s/ .*$//p') + fi + + # Now minus last scrub (both in seconds) converted to days. + _scrub_diff=$(expr -e \( $(date +%s) - \ + $(date -j -f %F.%T ${_last_scrub} +%s) \) / 60 / 60 / 24) + if [ ${_scrub_diff} -le ${_pool_threshold} ]; then + echo " skipping scrubbing of pool '${pool}':" + echo " last scrubbing is ${_scrub_diff} days ago, threshold is set to ${_pool_threshold} days" + continue + fi + + _status="$(zpool status ${pool} | grep scrub:)" + case "${_status}" in + *"scrub in progress"*) + echo " scrubbing of pool '${pool}' already in progress, skipping:" + ;; + *"none requested"*) + echo " starting first scrubbing (after reboot) of pool '${pool}':" + zpool scrub ${pool} + ;; + *) + echo " starting scrubbing of pool '${pool}':" + zpool scrub ${pool} + ;; + esac + + echo " consult 'zpool status ${pool}' for the result" + done + ;; + + *) + rc=0 + ;; +esac + +exit $rc Property changes on: etc/periodic/daily/800.scrub-zfs ___________________________________________________________________ Added: svn:executable + * Index: etc/periodic/daily/Makefile =================================================================== --- etc/periodic/daily/Makefile (revision 210841) +++ etc/periodic/daily/Makefile (working copy) @@ -8,7 +8,6 @@ 200.backup-passwd \ 330.news \ 400.status-disks \ - 404.status-zfs \ 405.status-ata-raid \ 406.status-gmirror \ 407.status-graid3 \ @@ -53,4 +52,9 @@ 500.queuerun .endif +.if ${MK_ZFS} != "no" +FILES+= 404.status-zfs \ + 800.scrub-zfs +.endif + .include >Release-Note: >Audit-Trail: >Unformatted: