mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
blkdeactivate: change the way blkdeactivate reports status
The blkdeactivate now suppresses error messages from external tools that are called. Instead, only a summary message "done" or "skipped" is issued by blkdeactivate as any error in calling the external tool (e.g. unmounting or deactivating a device) causes the device to be skipped and the blkdeactivate continues with the next device in the tree. Add new -e/--errors switch to display any error messages from external tools. Also, suppress any output given by the external tools and add new -v/--verbose switch to display it including the verbose output of the tools called (this will enable error reporting as well). Also add blkdeactivate -vv for even more debug (the script's debug).
This commit is contained in:
parent
32148369d1
commit
a854398764
@ -1,5 +1,8 @@
|
||||
Version 2.02.101 -
|
||||
===================================
|
||||
Add blkdeactivate -v/--verbose for debug output from external tools used.
|
||||
Add blkdeactivate -e/--errors for error messages from external tools used.
|
||||
Suppress messages from external tools called in blkdeactivate by default.
|
||||
|
||||
Version 2.02.100 - 13th August 2013
|
||||
===================================
|
||||
|
@ -15,11 +15,18 @@ LVM volumes are handled directly using the \fIlvm\fP command.
|
||||
Other device-mapper based devices are handled using the
|
||||
\fIdmsetup\fP command.
|
||||
.SH OPTIONS
|
||||
.IP "\fB\-e, \-\-errors\fP"
|
||||
Show errors reported from tools called by blkdeactivate.
|
||||
Without this option, any error messages from these external tools
|
||||
are suppressed and the blkdeactivate itself provides only a summary
|
||||
message about device being skipped or not.
|
||||
.IP "\fB\-h, \-\-help\fP"
|
||||
Display the help text.
|
||||
.IP "\fB\-u, \-\-umount\fP"
|
||||
Unmount a mounted device before trying to deactivate it.
|
||||
Without this option used, a device that is mounted is not deactivated.
|
||||
.IP "\fB\-v, \-\-verbose\fP"
|
||||
Run in verbose mode.
|
||||
.IP "\fB\-d, \-\-dmoption\fP \fIdm_options\fP"
|
||||
Comma separated list of device-mapper specific options.
|
||||
.IP "\fB\-l, \-\-lvmoption\fP \fIlvm_options\fP"
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# Copyright (C) 2012 Red Hat, Inc. All rights reserved.
|
||||
# Copyright (C) 2012-2013 Red Hat, Inc. All rights reserved.
|
||||
#
|
||||
# This file is part of LVM2.
|
||||
#
|
||||
@ -36,11 +36,20 @@ UMOUNT="/bin/umount"
|
||||
DMSETUP="@sbindir@/dmsetup"
|
||||
LVM="@sbindir@/lvm"
|
||||
|
||||
UMOUNT_OPTS=""
|
||||
DMSETUP_OPTS=""
|
||||
LVM_OPTS=""
|
||||
|
||||
LSBLK="/bin/lsblk -r --noheadings -o TYPE,KNAME,NAME,MOUNTPOINT"
|
||||
LSBLK_VARS="local devtype local kname local name local mnt"
|
||||
LSBLK_READ="read -r devtype kname name mnt"
|
||||
SORT_MNT="/bin/sort -r -u -k 4"
|
||||
|
||||
# Do not show tool errors by default (only done/skipping summary
|
||||
# message provided by this script) and no verbose mode by default.
|
||||
ERRORS=0
|
||||
VERBOSE=0
|
||||
|
||||
# Do not unmount mounted devices by default.
|
||||
DO_UMOUNT=0
|
||||
|
||||
@ -72,6 +81,7 @@ declare -A SKIP_VG_LIST=()
|
||||
declare -A SKIP_UMOUNT_LIST=(["/"]=1 ["/boot"]=1 \
|
||||
["/lib"]=1 ["/lib64"]=1 \
|
||||
["/bin"]=1 ["/sbin"]=1 \
|
||||
["/var"]=1 ["/var/log"]=1 \
|
||||
["/usr"]=1 \
|
||||
["/usr/lib"]=1 ["/usr/lib64"]=1 \
|
||||
["/usr/sbin"]=1 ["/usr/bin"]=1)
|
||||
@ -87,10 +97,12 @@ usage() {
|
||||
echo " If devices are specified, deactivate only supplied devices and their holders."
|
||||
echo
|
||||
echo " Options:"
|
||||
echo " -e | --errors Show errors reported from tools"
|
||||
echo " -h | --help Show this help message"
|
||||
echo " -d | --dmoption DM_OPTIONS Comma separated DM specific options"
|
||||
echo " -l | --lvmoption LVM_OPTIONS Comma separated LVM specific options"
|
||||
echo " -u | --umount Unmount the device if mounted"
|
||||
echo " -v | --verbose Verbose mode (also implies -e)"
|
||||
echo
|
||||
echo " Device specific options:"
|
||||
echo " DM_OPTIONS:"
|
||||
@ -126,8 +138,13 @@ device_umount () {
|
||||
test "$devtype" != "lvm" && test "${kname:0:3}" != "dm-" && return 0
|
||||
|
||||
if test -z "${SKIP_UMOUNT_LIST["$mnt"]}" -a "$DO_UMOUNT" -eq "1"; then
|
||||
echo " UMOUNT: unmounting $name ($kname) mounted on $mnt"
|
||||
$UMOUNT "$(printf $mnt)" || add_device_to_skip_list
|
||||
echo -n " [UMOUNT]: unmounting $name ($kname) mounted on $mnt... "
|
||||
if eval $UMOUNT $UMOUNT_OPTS "$(printf $mnt)" $OUT $ERR; then
|
||||
echo "done"
|
||||
else
|
||||
echo "skipping"
|
||||
add_device_to_skip_list
|
||||
fi
|
||||
else
|
||||
echo " [SKIP]: unmount of $name ($kname) mounted on $mnt"
|
||||
add_device_to_skip_list
|
||||
@ -158,44 +175,56 @@ deactivate_dm () {
|
||||
|
||||
deactivate_holders "$DEV_DIR/mapper/$name" || return 1
|
||||
|
||||
echo " DM: deactivating $devtype device $name ($kname)"
|
||||
$DMSETUP $DMSETUP_OPTS remove "$name" || add_device_to_skip_list
|
||||
echo -n " [DM]: deactivating $devtype device $name ($kname)... "
|
||||
if eval $DMSETUP $DMSETUP_OPTS remove "$name" $OUT $ERR; then
|
||||
echo "done"
|
||||
else
|
||||
echo "skipping"
|
||||
add_device_to_skip_list
|
||||
fi
|
||||
}
|
||||
|
||||
deactivate_lvm () {
|
||||
local DM_VG_NAME; local DM_LV_NAME; local DM_LV_LAYER
|
||||
|
||||
eval $($DMSETUP splitname --nameprefixes --noheadings --rows "$name" LVM)
|
||||
eval $(eval $DMSETUP splitname --nameprefixes --noheadings --rows "$name" LVM $ERR)
|
||||
test -b "$DEV_DIR/$DM_VG_NAME/$DM_LV_NAME" || return 0
|
||||
test -z ${SKIP_VG_LIST["$DM_VG_NAME"]} || return 1
|
||||
|
||||
# Deactivating only the LV specified
|
||||
test $LVM_DO_WHOLE_VG -eq 0 && {
|
||||
if test $LVM_DO_WHOLE_VG -eq 0; then
|
||||
# Deactivating only the LV specified
|
||||
deactivate_holders "$DEV_DIR/$DM_VG_NAME/$DM_LV_NAME" || {
|
||||
add_device_to_skip_list
|
||||
return 1
|
||||
}
|
||||
|
||||
echo " LVM: deactivating Logical Volume $DM_VG_NAME/$DM_LV_NAME"
|
||||
$LVM lvchange --config "log{prefix=\"\"} $LVM_CONFIG" -aln $DM_VG_NAME/$DM_LV_NAME || {
|
||||
echo -n " [LVM]: deactivating Logical Volume $DM_VG_NAME/$DM_LV_NAME... "
|
||||
if eval $LVM lvchange $LVM_OPTS --config \'log{prefix=\"\"} $LVM_CONFIG\' -aln $DM_VG_NAME/$DM_LV_NAME $OUT $ERR; then
|
||||
echo "done"
|
||||
else
|
||||
echo "skipping"
|
||||
add_device_to_skip_list
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
}
|
||||
fi
|
||||
|
||||
# Deactivating the whole VG the LV is part of
|
||||
lv_list=$($LVM vgs --config "$LVM_CONFIG" --noheadings --rows -o lv_name $DM_VG_NAME)
|
||||
for lv in $lv_list; do
|
||||
test -b "$DEV_DIR/$DM_VG_NAME/$lv" || continue
|
||||
deactivate_holders "$DEV_DIR/$DM_VG_NAME/$lv" || {
|
||||
else
|
||||
# Deactivating the whole VG the LV is part of
|
||||
lv_list=$(eval $LVM vgs --config "$LVM_CONFIG" --noheadings --rows -o lv_name $DM_VG_NAME $ERR)
|
||||
for lv in $lv_list; do
|
||||
test -b "$DEV_DIR/$DM_VG_NAME/$lv" || continue
|
||||
deactivate_holders "$DEV_DIR/$DM_VG_NAME/$lv" || {
|
||||
add_vg_to_skip_list
|
||||
return 1
|
||||
}
|
||||
done
|
||||
|
||||
echo -n " [LVM]: deactivating Volume Group $DM_VG_NAME... "
|
||||
if eval $LVM vgchange $LVM_OPTS --config \'log{prefix=\" \"} $LVM_CONFIG\' -aln $DM_VG_NAME $OUT $ERR; then
|
||||
echo "done"
|
||||
else
|
||||
echo "skipping"
|
||||
add_vg_to_skip_list
|
||||
return 1
|
||||
}
|
||||
done
|
||||
|
||||
echo " LVM: deactivating Volume Group $DM_VG_NAME"
|
||||
$LVM vgchange --config "log{prefix=\" \"} $LVM_CONFIG" -aln $DM_VG_NAME || add_vg_to_skip_list
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
deactivate () {
|
||||
@ -316,16 +345,37 @@ get_lvmopts() {
|
||||
IFS=$ORIG_IFS
|
||||
}
|
||||
|
||||
set_env() {
|
||||
if test "$ERRORS" -eq "1"; then
|
||||
unset ERR
|
||||
else
|
||||
ERR="2>$DEV_DIR/null"
|
||||
fi
|
||||
|
||||
if test "$VERBOSE" -eq "1"; then
|
||||
unset OUT
|
||||
UMOUNT_OPTS+="-v"
|
||||
DMSETUP_OPTS+="-vvvv"
|
||||
LVM_OPTS+="-vvvv"
|
||||
else
|
||||
OUT="1>$DEV_DIR/null"
|
||||
fi
|
||||
}
|
||||
|
||||
while test $# -ne 0; do
|
||||
case "$1" in
|
||||
"") ;;
|
||||
"-e"|"--errors") ERRORS=1 ;;
|
||||
"-h"|"--help") usage ;;
|
||||
"-d"|"--dmoption ") get_dmopts "$2" ; shift ;;
|
||||
"-l"|"--lvmoption ") get_lvmopts "$2" ; shift ;;
|
||||
"-u"|"--umount") DO_UMOUNT=1 ;;
|
||||
"-v"|"--verbose") VERBOSE=1 ; ERRORS=1 ;;
|
||||
"-vv") VERBOSE=1 ; ERRORS=1 ; set -x ;;
|
||||
*) break ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
set_env
|
||||
deactivate_all "$@"
|
||||
|
Loading…
Reference in New Issue
Block a user