diff --git a/cmd/zpool/zpool.d/iostat b/cmd/zpool/zpool.d/iostat index 95c459a3f0..2f8d79af89 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 1ed1464431..293effd48a 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 032491988c..8ad3e107f0 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: