aboutsummaryrefslogtreecommitdiffstats
path: root/cmd
diff options
context:
space:
mode:
authorRich Ercolani <[email protected]>2022-05-10 13:14:07 -0400
committerGitHub <[email protected]>2022-05-10 10:14:07 -0700
commitecaccf764a8ccbece8bb411f56b81ef5858fe710 (patch)
tree0c22ec355058913a58b2a36885749ddba0bc73ed /cmd
parenta30927f763834d3b16b4945ff8d5638ede69d545 (diff)
Workaround broken VDEV_UPATH
Sometimes, for reasons I haven't looked into yet, VDEV_UPATH gets set to /dev/(null), breaking all these scripts. It'd be nice to have a fallback case to avoid total failure. Reviewed-by: Tony Hutter <[email protected]> Reviewed-by: Brian Behlendorf <[email protected]> Signed-off-by: Rich Ercolani <[email protected]> Closes #13436
Diffstat (limited to 'cmd')
-rwxr-xr-xcmd/zpool/zpool.d/iostat16
-rwxr-xr-xcmd/zpool/zpool.d/lsblk16
-rwxr-xr-xcmd/zpool/zpool.d/smart12
3 files changed, 34 insertions, 10 deletions
diff --git a/cmd/zpool/zpool.d/iostat b/cmd/zpool/zpool.d/iostat
index 95c459a3f..2f8d79af8 100755
--- a/cmd/zpool/zpool.d/iostat
+++ b/cmd/zpool/zpool.d/iostat
@@ -15,6 +15,15 @@ if [ "$1" = "-h" ] ; then
exit
fi
+# Sometimes, UPATH ends up /dev/(null).
+# That should be corrected, but for now...
+# shellcheck disable=SC2154
+if [ ! -b "$VDEV_UPATH" ]; then
+ somepath="${VDEV_PATH}"
+else
+ somepath="${VDEV_UPATH}"
+fi
+
if [ "$script" = "iostat-1s" ] ; then
# Do a single one-second sample
interval=1
@@ -27,8 +36,7 @@ elif [ "$script" = "iostat-10s" ] ; then
brief="yes"
fi
-# shellcheck disable=SC2154
-if [ -f "$VDEV_UPATH" ] ; then
+if [ -f "$somepath" ] ; then
# We're a file-based vdev, iostat doesn't work on us. Do nothing.
exit
fi
@@ -37,13 +45,13 @@ if [ "$(uname)" = "FreeBSD" ]; then
out=$(iostat -dKx \
${interval:+"-w $interval"} \
${interval:+"-c 1"} \
- "$VDEV_UPATH" | tail -n 2)
+ "$somepath" | tail -n 2)
else
out=$(iostat -kx \
${brief:+"-y"} \
${interval:+"$interval"} \
${interval:+"1"} \
- "$VDEV_UPATH" | grep -v '^$' | tail -n 2)
+ "$somepath" | grep -v '^$' | tail -n 2)
fi
diff --git a/cmd/zpool/zpool.d/lsblk b/cmd/zpool/zpool.d/lsblk
index 1ed146443..293effd48 100755
--- a/cmd/zpool/zpool.d/lsblk
+++ b/cmd/zpool/zpool.d/lsblk
@@ -61,21 +61,29 @@ else
list=$(echo "$script" | tr '[:upper:]' '[:lower:]')
fi
+# Sometimes, UPATH ends up /dev/(null).
+# That should be corrected, but for now...
+# shellcheck disable=SC2154
+if [ ! -b "$VDEV_UPATH" ]; then
+ somepath="${VDEV_PATH}"
+else
+ somepath="${VDEV_UPATH}"
+fi
+
# Older versions of lsblk don't support all these values (like SERIAL).
for i in $list ; do
# Special case: Looking up the size of a file-based vdev can't
# be done with lsblk.
- # shellcheck disable=SC2154
- if [ "$i" = "size" ] && [ -f "$VDEV_UPATH" ] ; then
- size=$(du -h --apparent-size "$VDEV_UPATH" | cut -f 1)
+ if [ "$i" = "size" ] && [ -f "$somepath" ] ; then
+ size=$(du -h --apparent-size "$somepath" | cut -f 1)
echo "size=$size"
continue
fi
val=""
- if val=$(eval "lsblk -dl -n -o $i $VDEV_UPATH 2>/dev/null") ; then
+ if val=$(eval "lsblk -dl -n -o $i $somepath 2>/dev/null") ; then
# Remove leading/trailing whitespace from value
val=$(echo "$val" | sed -e 's/^[[:space:]]*//' \
-e 's/[[:space:]]*$//')
diff --git a/cmd/zpool/zpool.d/smart b/cmd/zpool/zpool.d/smart
index 032491988..8ad3e107f 100755
--- a/cmd/zpool/zpool.d/smart
+++ b/cmd/zpool/zpool.d/smart
@@ -69,8 +69,16 @@ if [ "$1" = "-h" ] ; then
exit
fi
+# Sometimes, UPATH ends up /dev/(null).
+# That should be corrected, but for now...
# shellcheck disable=SC2154
-if [ -b "$VDEV_UPATH" ] && PATH="/usr/sbin:$PATH" command -v smartctl > /dev/null || [ -n "$samples" ] ; then
+if [ ! -b "$VDEV_UPATH" ]; then
+ somepath="${VDEV_PATH}"
+else
+ somepath="${VDEV_UPATH}"
+fi
+
+if [ -b "$somepath" ] && PATH="/usr/sbin:$PATH" command -v smartctl > /dev/null || [ -n "$samples" ] ; then
if [ -n "$samples" ] ; then
# cat a smartctl output text file instead of running smartctl
# on a vdev (only used for developer testing).
@@ -78,7 +86,7 @@ if [ -b "$VDEV_UPATH" ] && PATH="/usr/sbin:$PATH" command -v smartctl > /dev/nul
echo "file=$file"
raw_out=$(cat "$samples/$file")
else
- raw_out=$(sudo smartctl -a "$VDEV_UPATH")
+ raw_out=$(sudo smartctl -a "$somepath")
fi
# What kind of drive are we? Look for the right line in smartctl: