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