mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 11:19:32 +03:00
ecaccf764a
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 <hutter2@llnl.gov> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Signed-off-by: Rich Ercolani <rincebrain@gmail.com> Closes #13436
93 lines
2.5 KiB
Bash
Executable File
93 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Print some common lsblk values
|
|
#
|
|
# Any (lowercased) name symlinked to the lsblk script will be passed to lsblk
|
|
# as one of its --output names. Here's a partial list of --output names
|
|
# from the lsblk binary:
|
|
#
|
|
# Available columns (for --output):
|
|
# NAME device name
|
|
# KNAME internal kernel device name
|
|
# MAJ:MIN major:minor device number
|
|
# FSTYPE filesystem type
|
|
# MOUNTPOINT where the device is mounted
|
|
# LABEL filesystem LABEL
|
|
# UUID filesystem UUID
|
|
# RA read-ahead of the device
|
|
# RO read-only device
|
|
# RM removable device
|
|
# MODEL device identifier
|
|
# SIZE size of the device
|
|
# STATE state of the device
|
|
# OWNER user name
|
|
# GROUP group name
|
|
# MODE device node permissions
|
|
# ALIGNMENT alignment offset
|
|
# MIN-IO minimum I/O size
|
|
# OPT-IO optimal I/O size
|
|
# PHY-SEC physical sector size
|
|
# LOG-SEC logical sector size
|
|
# ROTA rotational device
|
|
# SCHED I/O scheduler name
|
|
# RQ-SIZE request queue size
|
|
# TYPE device type
|
|
# DISC-ALN discard alignment offset
|
|
# DISC-GRAN discard granularity
|
|
# DISC-MAX discard max bytes
|
|
# DISC-ZERO discard zeroes data
|
|
#
|
|
# If the script is run as just 'lsblk' then print out disk size, vendor,
|
|
# and model number.
|
|
|
|
|
|
helpstr="
|
|
label: Show filesystem label.
|
|
model: Show disk model number.
|
|
size: Show the disk capacity.
|
|
vendor: Show the disk vendor.
|
|
lsblk: Show the disk size, vendor, and model number."
|
|
|
|
script="${0##*/}"
|
|
|
|
if [ "$1" = "-h" ] ; then
|
|
echo "$helpstr" | grep "$script:" | tr -s '\t' | cut -f 2-
|
|
exit
|
|
fi
|
|
|
|
if [ "$script" = "lsblk" ] ; then
|
|
list="size vendor model"
|
|
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.
|
|
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 $somepath 2>/dev/null") ; then
|
|
# Remove leading/trailing whitespace from value
|
|
val=$(echo "$val" | sed -e 's/^[[:space:]]*//' \
|
|
-e 's/[[:space:]]*$//')
|
|
fi
|
|
echo "$i=$val"
|
|
done
|