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