mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-11-18 10:21:01 +03:00
099700d9df
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
84 lines
2.3 KiB
Bash
Executable File
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
|