xref: /freebsd/sys/contrib/openzfs/cmd/zpool/zpool.d/lsblk (revision 716fd348e01c5f2ba125f878a634a753436c2994)
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