mirror_zfs/cmd/zpool/zpool.d/lsblk
Giuseppe Di Natale 099700d9df zpool iostat/status -c improvements
Users can now provide their own scripts to be run
with 'zpool iostat/status -c'. User scripts should be
placed in ~/.zpool.d to be included in zpool's
default search path.

Provide a script which can be used with
'zpool iostat|status -c' that will return the type of
device (hdd, sdd, file).

Provide a script to get various values from smartctl
when using 'zpool iostat/status -c'.

Allow users to define the ZPOOL_SCRIPTS_PATH
environment variable which can be used to override
the default 'zpool iostat/status -c' search path.

Allow the ZPOOL_SCRIPTS_ENABLED environment
variable to enable or disable 'zpool status/iostat -c'
functionality.

Use the new smart script to provide the serial command.

Install /etc/sudoers.d/zfs file which contains the sudoer
rule for smartctl as a sample.

Allow 'zpool iostat/status -c' tests to run in tree.

Reviewed-by: Tony Hutter <hutter2@llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Giuseppe Di Natale <dinatale2@llnl.gov>
Closes #6121 
Closes #6153
2017-06-05 10:52:15 -07:00

84 lines
2.3 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=$(basename "$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
# 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 "$VDEV_UPATH" ] ; then
size=$(du -h --apparent-size "$VDEV_UPATH" | cut -f 1)
echo "size=$size"
continue
fi
val=""
if val=$(eval "lsblk -dl -n -o $i $VDEV_UPATH 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