xref: /freebsd/usr.sbin/periodic/etc/daily/801.trim-zfs (revision 493908c4b45c7b75e4a6b4aea3b5b63ea5c268d5)
1*493908c4SLexi Winter#!/bin/sh
2*493908c4SLexi Winter#
3*493908c4SLexi Winter#
4*493908c4SLexi Winter
5*493908c4SLexi Winter# If there is a global system configuration file, suck it in.
6*493908c4SLexi Winter#
7*493908c4SLexi Winter
8*493908c4SLexi Winterif [ -r /etc/defaults/periodic.conf ]
9*493908c4SLexi Winterthen
10*493908c4SLexi Winter    . /etc/defaults/periodic.conf
11*493908c4SLexi Winter    source_periodic_confs
12*493908c4SLexi Winterfi
13*493908c4SLexi Winter
14*493908c4SLexi Wintercase "$daily_trim_zfs_enable" in
15*493908c4SLexi Winter    [Yy][Ee][Ss])
16*493908c4SLexi Winter	echo
17*493908c4SLexi Winter	echo 'Trimming of zfs pools:'
18*493908c4SLexi Winter
19*493908c4SLexi Winter	if [ -z "${daily_trim_zfs_pools}" ]; then
20*493908c4SLexi Winter		daily_trim_zfs_pools="$(zpool list -H -o name)"
21*493908c4SLexi Winter	fi
22*493908c4SLexi Winter
23*493908c4SLexi Winter	rc=0
24*493908c4SLexi Winter	for pool in ${daily_trim_zfs_pools}; do
25*493908c4SLexi Winter		# sanity check
26*493908c4SLexi Winter		_status=$(zpool list -Hohealth "${pool}" 2> /dev/null)
27*493908c4SLexi Winter		if [ $? -ne 0 ]; then
28*493908c4SLexi Winter			rc=2
29*493908c4SLexi Winter			echo "   WARNING: pool '${pool}' specified in"
30*493908c4SLexi Winter			echo "            '/etc/periodic.conf:daily_trim_zfs_pools'"
31*493908c4SLexi Winter			echo "            does not exist"
32*493908c4SLexi Winter			continue
33*493908c4SLexi Winter		fi
34*493908c4SLexi Winter		case ${_status} in
35*493908c4SLexi Winter		FAULTED)
36*493908c4SLexi Winter			rc=3
37*493908c4SLexi Winter			echo "Skipping faulted pool: ${pool}"
38*493908c4SLexi Winter			continue ;;
39*493908c4SLexi Winter		UNAVAIL)
40*493908c4SLexi Winter			rc=4
41*493908c4SLexi Winter			echo "Skipping unavailable pool: ${pool}"
42*493908c4SLexi Winter			continue ;;
43*493908c4SLexi Winter		esac
44*493908c4SLexi Winter
45*493908c4SLexi Winter		if ! zpool status "${pool}" | grep -q '(trimming)'; then
46*493908c4SLexi Winter			echo "    starting trim of pool '${pool}'"
47*493908c4SLexi Winter			zpool trim ${daily_zfs_trim_flags} "${pool}"
48*493908c4SLexi Winter		else
49*493908c4SLexi Winter			echo "    trim of pool '${pool}' already in progress, skipping"
50*493908c4SLexi Winter		fi
51*493908c4SLexi Winter	done
52*493908c4SLexi Winter	;;
53*493908c4SLexi Winter
54*493908c4SLexi Winter    *)
55*493908c4SLexi Winter	rc=0
56*493908c4SLexi Winter	;;
57*493908c4SLexi Winteresac
58*493908c4SLexi Winter
59*493908c4SLexi Winterexit $rc
60