Add -c to zpool iostat & status to run command
commit8720e9e7482fa2dce4f34c56d3c7451833413d7d
authorTony Hutter <hutter2@llnl.gov>
Tue, 29 Nov 2016 21:45:38 +0000 (29 13:45 -0800)
committerBrian Behlendorf <behlendorf1@llnl.gov>
Tue, 29 Nov 2016 21:45:38 +0000 (29 14:45 -0700)
tree2475bb498ab7bc8e5fb016dbca1a337d10f257c5
parent2f71caf2d926249920d1b9162550c56715cc6461
Add -c to zpool iostat & status to run command

This patch adds a command (-c) option to zpool status and zpool iostat.  The
-c option allows you to run an arbitrary command on each vdev and display
the first line of output in zpool status/iostat.  The environment vars
VDEV_PATH and VDEV_UPATH are set to the vdev's path and "underlying path"
before running the command.  For device mapper, multipath, or partitioned
vdevs, VDEV_UPATH is the actual underlying /dev/sd* disk.  This can be useful
if the command you're running requires a /dev/sd* device.

The patch also uses /sys/block/<dev>/slaves/ to lookup the underlying device
instead of using libdevmapper.  This not only removes the libdevmapper
requirement at build time, but also allows you to resolve device mapper
devices without being root.  This means that UDEV_UPATH get set correctly
when running zpool status/iostat as an unprivileged user.

Example:

$ zpool status -c 'echo I am $VDEV_PATH, $VDEV_UPATH'

NAME        STATE     READ WRITE CKSUM
mypool      ONLINE       0     0     0
  mirror-0  ONLINE       0     0     0
    mpatha  ONLINE       0     0     0  I am /dev/mapper/mpatha, /dev/sdc
    sdb     ONLINE       0     0     0  I am /dev/sdb1, /dev/sdb

Reviewed-by: Giuseppe Di Natale <dinatale2@llnl.gov>
Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Tony Hutter <hutter2@llnl.gov>
Closes #5368
16 files changed:
cmd/zed/agents/zfs_mod.c
cmd/zed/zed.d/statechange-led.sh
cmd/zpool/zpool_iter.c
cmd/zpool/zpool_main.c
cmd/zpool/zpool_util.h
config/user-libdevmapper.m4 [deleted file]
config/user.m4
configure.ac
include/libzfs.h
lib/libzfs/Makefile.am
lib/libzfs/libzfs_pool.c
man/man8/zpool.8
rpm/generic/zfs.spec.in
tests/zfs-tests/tests/functional/cli_user/misc/zpool_status_001_neg.ksh
tests/zfs-tests/tests/functional/cli_user/zpool_iostat/Makefile.am
tests/zfs-tests/tests/functional/cli_user/zpool_iostat/zpool_iostat_005_pos.ksh [copied from tests/zfs-tests/tests/functional/cli_user/misc/zpool_status_001_neg.ksh with 53% similarity]