1eda14cbcSMatt Macy#!/bin/sh 2eda14cbcSMatt Macy# 3eda14cbcSMatt Macy# Print some common lsblk values 4eda14cbcSMatt Macy# 5eda14cbcSMatt Macy# Any (lowercased) name symlinked to the lsblk script will be passed to lsblk 6eda14cbcSMatt Macy# as one of its --output names. Here's a partial list of --output names 7eda14cbcSMatt Macy# from the lsblk binary: 8eda14cbcSMatt Macy# 9eda14cbcSMatt Macy# Available columns (for --output): 10eda14cbcSMatt Macy# NAME device name 11eda14cbcSMatt Macy# KNAME internal kernel device name 12eda14cbcSMatt Macy# MAJ:MIN major:minor device number 13eda14cbcSMatt Macy# FSTYPE filesystem type 14eda14cbcSMatt Macy# MOUNTPOINT where the device is mounted 15eda14cbcSMatt Macy# LABEL filesystem LABEL 16eda14cbcSMatt Macy# UUID filesystem UUID 17eda14cbcSMatt Macy# RA read-ahead of the device 18eda14cbcSMatt Macy# RO read-only device 19eda14cbcSMatt Macy# RM removable device 20eda14cbcSMatt Macy# MODEL device identifier 21eda14cbcSMatt Macy# SIZE size of the device 22eda14cbcSMatt Macy# STATE state of the device 23eda14cbcSMatt Macy# OWNER user name 24eda14cbcSMatt Macy# GROUP group name 25eda14cbcSMatt Macy# MODE device node permissions 26eda14cbcSMatt Macy# ALIGNMENT alignment offset 27eda14cbcSMatt Macy# MIN-IO minimum I/O size 28eda14cbcSMatt Macy# OPT-IO optimal I/O size 29eda14cbcSMatt Macy# PHY-SEC physical sector size 30eda14cbcSMatt Macy# LOG-SEC logical sector size 31eda14cbcSMatt Macy# ROTA rotational device 32eda14cbcSMatt Macy# SCHED I/O scheduler name 33eda14cbcSMatt Macy# RQ-SIZE request queue size 34eda14cbcSMatt Macy# TYPE device type 35eda14cbcSMatt Macy# DISC-ALN discard alignment offset 36eda14cbcSMatt Macy# DISC-GRAN discard granularity 37eda14cbcSMatt Macy# DISC-MAX discard max bytes 38eda14cbcSMatt Macy# DISC-ZERO discard zeroes data 39eda14cbcSMatt Macy# 40eda14cbcSMatt Macy# If the script is run as just 'lsblk' then print out disk size, vendor, 41eda14cbcSMatt Macy# and model number. 42eda14cbcSMatt Macy 43eda14cbcSMatt Macy 44eda14cbcSMatt Macyhelpstr=" 45eda14cbcSMatt Macylabel: Show filesystem label. 46eda14cbcSMatt Macymodel: Show disk model number. 47eda14cbcSMatt Macysize: Show the disk capacity. 48eda14cbcSMatt Macyvendor: Show the disk vendor. 49eda14cbcSMatt Macylsblk: Show the disk size, vendor, and model number." 50eda14cbcSMatt Macy 51dae17134SMartin Matuskascript="${0##*/}" 52eda14cbcSMatt Macy 53eda14cbcSMatt Macyif [ "$1" = "-h" ] ; then 54eda14cbcSMatt Macy echo "$helpstr" | grep "$script:" | tr -s '\t' | cut -f 2- 55eda14cbcSMatt Macy exit 56eda14cbcSMatt Macyfi 57eda14cbcSMatt Macy 58eda14cbcSMatt Macyif [ "$script" = "lsblk" ] ; then 59eda14cbcSMatt Macy list="size vendor model" 60eda14cbcSMatt Macyelse 61eda14cbcSMatt Macy list=$(echo "$script" | tr '[:upper:]' '[:lower:]') 62eda14cbcSMatt Macyfi 63eda14cbcSMatt Macy 64*716fd348SMartin Matuska# Sometimes, UPATH ends up /dev/(null). 65*716fd348SMartin Matuska# That should be corrected, but for now... 66*716fd348SMartin Matuska# shellcheck disable=SC2154 67*716fd348SMartin Matuskaif [ ! -b "$VDEV_UPATH" ]; then 68*716fd348SMartin Matuska somepath="${VDEV_PATH}" 69*716fd348SMartin Matuskaelse 70*716fd348SMartin Matuska somepath="${VDEV_UPATH}" 71*716fd348SMartin Matuskafi 72*716fd348SMartin Matuska 73eda14cbcSMatt Macy# Older versions of lsblk don't support all these values (like SERIAL). 74eda14cbcSMatt Macyfor i in $list ; do 75eda14cbcSMatt Macy 76eda14cbcSMatt Macy # Special case: Looking up the size of a file-based vdev can't 77eda14cbcSMatt Macy # be done with lsblk. 78*716fd348SMartin Matuska if [ "$i" = "size" ] && [ -f "$somepath" ] ; then 79*716fd348SMartin Matuska size=$(du -h --apparent-size "$somepath" | cut -f 1) 80eda14cbcSMatt Macy echo "size=$size" 81eda14cbcSMatt Macy continue 82eda14cbcSMatt Macy fi 83eda14cbcSMatt Macy 84eda14cbcSMatt Macy 85eda14cbcSMatt Macy val="" 86*716fd348SMartin Matuska if val=$(eval "lsblk -dl -n -o $i $somepath 2>/dev/null") ; then 87eda14cbcSMatt Macy # Remove leading/trailing whitespace from value 88eda14cbcSMatt Macy val=$(echo "$val" | sed -e 's/^[[:space:]]*//' \ 89eda14cbcSMatt Macy -e 's/[[:space:]]*$//') 90eda14cbcSMatt Macy fi 91eda14cbcSMatt Macy echo "$i=$val" 92eda14cbcSMatt Macydone 93