Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

zpool_id improvements for milestone 0.6.0-rc7 #479

Closed
wants to merge 4 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 22 additions & 14 deletions cmd/zpool_id/zpool_id
Original file line number Diff line number Diff line change
@@ -1,8 +1,16 @@
#!/bin/bash
#!/bin/sh

CONFIG=${CONFIG:-/etc/zfs/zdev.conf}
PATH_ID=${PATH_ID:-/lib/udev/path_id}
AWK=${AWK:-/usr/bin/awk}
CONFIG="${CONFIG:-/etc/zfs/zdev.conf}"
AWK="${AWK:-/usr/bin/awk}"

if [ -z "${PATH_ID}" ]; then
# The path_id helper became a builtin command in udev 174.
if [ -x '/lib/udev/path_id' ]; then
PATH_ID='/lib/udev/path_id'
else
PATH_ID='udevadm test-builtin path_id'
fi
fi

die() {
echo "Error: $*"
Expand All @@ -11,7 +19,7 @@ die() {

usage() {
cat << EOF
Usage: zpool_id [h] [-c configfile] <devpath>
Usage: zpool_id [-h] [-c configfile] <devpath>
-c Alternate config file [default /etc/zfs/zdev.conf]
-d Use path_id from device as the mapping key
-h Show this message
Expand All @@ -22,10 +30,10 @@ EOF
while getopts 'c:d:h' OPTION; do
case ${OPTION} in
c)
CONFIG=${OPTARG}
CONFIG="${OPTARG}"
;;
d)
DEVICE=${OPTARG}
DEVICE="${OPTARG}"
;;
h)
usage
Expand All @@ -34,21 +42,21 @@ while getopts 'c:d:h' OPTION; do
done

# Check that a device was requested
[ -z ${DEVICE} ] && usage
[ -z "${DEVICE}" ] && usage

# Check for the existence of a configuration file
[ ! -f ${CONFIG} ] && die "Missing config file: ${CONFIG}"
[ ! -f "${CONFIG}" ] && die "Missing config file: ${CONFIG}"

# If we are handling a multipath device then $DM_UUID will be
# exported and we'll use its value (prefixed with dm-uuid per
# multipathd's naming convention) as our unique persistent key.
# For traditional devices we'll obtain the key from udev's
# path_id.
if [ -n "${DM_UUID}" ] && echo ${DM_UUID} | egrep -q -e '^mpath' ; then
if [ -n "${DM_UUID}" ] && echo "${DM_UUID}" | grep -q -e '^mpath' ; then
ID_PATH="dm-uuid-${DM_UUID}"
else
eval `${PATH_ID} ${DEVICE}`
[ -z ${ID_PATH} ] && die "Missing ID_PATH for ${DEVICE}"
[ -z "${ID_PATH}" ] && die "Missing ID_PATH for ${DEVICE}"
fi

# Use the persistent key to lookup the zpool device id in the
Expand All @@ -57,10 +65,10 @@ fi
# Exact matches are required, wild cards are not supported,
# and only the first match is returned. Also note the following
# regex pattern only appears to work with gawk, not mawk or awk.
ID_ZPOOL=`${AWK} "/\<${ID_PATH}\>/ && !/^#/ { print \\$1; exit }" ${CONFIG}`
[ -z ${ID_ZPOOL} ] && die "Missing ID_ZPOOL for ID_PATH: ${ID_PATH}"
ID_ZPOOL=`${AWK} "/\<${ID_PATH}\>/ && !/^#/ { print \\$1; exit }" "${CONFIG}"`
[ -z "${ID_ZPOOL}" ] && die "Missing ID_ZPOOL for ID_PATH: ${ID_PATH}"

if [ ${ID_ZPOOL} ]; then
if [ -n "${ID_ZPOOL}" ]; then
echo "ID_PATH=${ID_PATH}"
echo "ID_ZPOOL=${ID_ZPOOL}"
echo "ID_ZPOOL_PATH=disk/zpool/${ID_ZPOOL}"
Expand Down