xref: /freebsd/sys/contrib/openzfs/cmd/fsck.zfs.in (revision 716fd348e01c5f2ba125f878a634a753436c2994)
1*716fd348SMartin Matuska#!/bin/sh
2*716fd348SMartin Matuska#
3*716fd348SMartin Matuska# fsck.zfs: A fsck helper to accommodate distributions that expect
4*716fd348SMartin Matuska# to be able to execute a fsck on all filesystem types.
5*716fd348SMartin Matuska#
6*716fd348SMartin Matuska# This script simply bubbles up some already-known-about errors,
7*716fd348SMartin Matuska# see fsck.zfs(8)
8*716fd348SMartin Matuska#
9*716fd348SMartin Matuska
10*716fd348SMartin Matuskaif [ $# -eq 0 ]; then
11*716fd348SMartin Matuska	echo "Usage: $0 [options] dataset…" >&2
12*716fd348SMartin Matuska	exit 16
13*716fd348SMartin Matuskafi
14*716fd348SMartin Matuska
15*716fd348SMartin Matuskaret=0
16*716fd348SMartin Matuskafor dataset; do
17*716fd348SMartin Matuska	case "$dataset" in
18*716fd348SMartin Matuska		-*)
19*716fd348SMartin Matuska			continue
20*716fd348SMartin Matuska			;;
21*716fd348SMartin Matuska		*)
22*716fd348SMartin Matuska			;;
23*716fd348SMartin Matuska	esac
24*716fd348SMartin Matuska
25*716fd348SMartin Matuska	pool="${dataset%%/*}"
26*716fd348SMartin Matuska
27*716fd348SMartin Matuska	case "$(@sbindir@/zpool list -Ho health "$pool")" in
28*716fd348SMartin Matuska		DEGRADED)
29*716fd348SMartin Matuska			ret=$(( ret | 4 ))
30*716fd348SMartin Matuska			;;
31*716fd348SMartin Matuska		FAULTED)
32*716fd348SMartin Matuska			awk '!/^([[:space:]]*#.*)?$/ && $1 == "'"$dataset"'" && $3 == "zfs" {exit 1}' /etc/fstab || \
33*716fd348SMartin Matuska				ret=$(( ret | 8 ))
34*716fd348SMartin Matuska			;;
35*716fd348SMartin Matuska		"")
36*716fd348SMartin Matuska			# Pool not found, error printed by zpool(8)
37*716fd348SMartin Matuska			ret=$(( ret | 8 ))
38*716fd348SMartin Matuska			;;
39*716fd348SMartin Matuska		*)
40*716fd348SMartin Matuska			;;
41*716fd348SMartin Matuska	esac
42*716fd348SMartin Matuskadone
43*716fd348SMartin Matuska
44*716fd348SMartin Matuskaexit "$ret"
45