fsck.zfs: implement 4/8 exit codes as suggested in manpage
Update the fsck.zfs helper to bubble up some already-known-about errors if they are detected in the pool. health=degraded => 4/"Filesystem errors left uncorrected" health=faulted && dataset in /etc/fstab => 8/"Operational error" pool not found => 8/"Operational error" everything else => 0 Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Ahelenia Ziemiańska <nabijaczleweli@nabijaczleweli.xyz> Closes #11806
This commit is contained in:
parent
bfdd001679
commit
dc52c0d725
|
@ -0,0 +1 @@
|
||||||
|
/fsck.zfs
|
|
@ -1 +1,5 @@
|
||||||
|
include $(top_srcdir)/config/Substfiles.am
|
||||||
|
|
||||||
dist_sbin_SCRIPTS = fsck.zfs
|
dist_sbin_SCRIPTS = fsck.zfs
|
||||||
|
|
||||||
|
SUBSTFILES += $(dist_sbin_SCRIPTS)
|
||||||
|
|
|
@ -1,9 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
#
|
|
||||||
# fsck.zfs: A fsck helper to accommodate distributions that expect
|
|
||||||
# to be able to execute a fsck on all filesystem types. Currently
|
|
||||||
# this script does nothing but it could be extended to act as a
|
|
||||||
# compatibility wrapper for 'zpool scrub'.
|
|
||||||
#
|
|
||||||
|
|
||||||
exit 0
|
|
|
@ -0,0 +1,44 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# fsck.zfs: A fsck helper to accommodate distributions that expect
|
||||||
|
# to be able to execute a fsck on all filesystem types.
|
||||||
|
#
|
||||||
|
# This script simply bubbles up some already-known-about errors,
|
||||||
|
# see fsck.zfs(8)
|
||||||
|
#
|
||||||
|
|
||||||
|
if [ "$#" = "0" ]; then
|
||||||
|
echo "Usage: $0 [options] dataset…" >&2
|
||||||
|
exit 16
|
||||||
|
fi
|
||||||
|
|
||||||
|
ret=0
|
||||||
|
for dataset in "$@"; do
|
||||||
|
case "$dataset" in
|
||||||
|
-*)
|
||||||
|
continue
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
pool="${dataset%%/*}"
|
||||||
|
|
||||||
|
case "$(@sbindir@/zpool list -Ho health "$pool")" in
|
||||||
|
DEGRADED)
|
||||||
|
ret=$(( $ret | 4 ))
|
||||||
|
;;
|
||||||
|
FAULTED)
|
||||||
|
awk '!/^([[:space:]]*#.*)?$/ && $1 == "'"$dataset"'" && $3 == "zfs" {exit 1}' /etc/fstab || \
|
||||||
|
ret=$(( $ret | 8 ))
|
||||||
|
;;
|
||||||
|
"")
|
||||||
|
# Pool not found, error printed by zpool(8)
|
||||||
|
ret=$(( $ret | 8 ))
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
exit "$ret"
|
|
@ -22,24 +22,27 @@
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright 2013 Darik Horn <dajhorn@vanadac.com>. All rights reserved.
|
.\" Copyright 2013 Darik Horn <dajhorn@vanadac.com>. All rights reserved.
|
||||||
.\"
|
.\"
|
||||||
.TH FSCK.ZFS 8 "Aug 24, 2020" OpenZFS
|
.TH FSCK.ZFS 8 "Mar 27, 2021" OpenZFS
|
||||||
|
|
||||||
.SH NAME
|
.SH NAME
|
||||||
fsck.zfs \- Dummy ZFS filesystem checker.
|
fsck.zfs \- Dummy ZFS filesystem checker.
|
||||||
|
|
||||||
.SH SYNOPSIS
|
.SH SYNOPSIS
|
||||||
.LP
|
.LP
|
||||||
.BI "fsck.zfs [" "options" "] <" "dataset" ">"
|
.BI "fsck.zfs [" "options" "] <" "dataset" ">…"
|
||||||
|
|
||||||
.SH DESCRIPTION
|
.SH DESCRIPTION
|
||||||
.LP
|
.LP
|
||||||
\fBfsck.zfs\fR is a shell stub that does nothing and always returns
|
\fBfsck.zfs\fR is a thin shell wrapper that at most checks the status of a
|
||||||
true. It is installed by ZoL because some Linux distributions expect
|
dataset's container pool. It is installed by OpenZFS because some Linux
|
||||||
a fsck helper for all filesystems.
|
distributions expect a fsck helper for all filesystems.
|
||||||
|
.LP
|
||||||
|
If more than one \fIdataset\fR is specified, each is checked in turn
|
||||||
|
and results binary ored.
|
||||||
|
|
||||||
.SH OPTIONS
|
.SH OPTIONS
|
||||||
.HP
|
.HP
|
||||||
All \fIoptions\fR and the \fIdataset\fR are ignored.
|
All \fIoptions\fR are ignored.
|
||||||
|
|
||||||
.SH "NOTES"
|
.SH "NOTES"
|
||||||
.LP
|
.LP
|
||||||
|
@ -47,14 +50,15 @@ ZFS datasets are checked by running \fBzpool scrub\fR on the
|
||||||
containing pool. An individual ZFS dataset is never checked
|
containing pool. An individual ZFS dataset is never checked
|
||||||
independently of its pool, which is unlike a regular filesystem.
|
independently of its pool, which is unlike a regular filesystem.
|
||||||
|
|
||||||
.SH "BUGS"
|
|
||||||
.LP
|
.LP
|
||||||
On some systems, if the \fIdataset\fR is in a degraded pool, then it
|
However, the
|
||||||
might be appropriate for \fBfsck.zfs\fR to return exit code 4 to
|
.BR fsck (8)
|
||||||
indicate an uncorrected filesystem error.
|
interface still allows it to communicate some errors:
|
||||||
|
if the \fIdataset\fR is in a degraded pool, then \fBfsck.zfs\fR will
|
||||||
|
return exit code 4 to indicate an uncorrected filesystem error.
|
||||||
.LP
|
.LP
|
||||||
Similarly, if the \fIdataset\fR is in a faulted pool and has a legacy
|
Similarly, if the \fIdataset\fR is in a faulted pool and has a legacy
|
||||||
/etc/fstab record, then \fBfsck.zfs\fR should return exit code 8 to
|
/etc/fstab record, then \fBfsck.zfs\fR will return exit code 8 to
|
||||||
indicate a fatal operational error.
|
indicate a fatal operational error.
|
||||||
|
|
||||||
.SH "AUTHORS"
|
.SH "AUTHORS"
|
||||||
|
|
Loading…
Reference in New Issue