GIF89a=( �' 7IAXKgNgYvYx\%wh&h}t�h%�s%x�}9�R��&�0%� (�.��5�SD��&�a)�x5��;ͣ*ȡ&ղ)ׯ7׵<ѻ4�3�H֧KͯT��Y�aq��q��F� !� ' !� NETSCAPE2.0 , =( ��pH,�Ȥr�l:xШtJ�Z�جv��z��xL.:��z�n���|N�����~�������& !�0`9R�}��"�"a:S�~x��������g���E�������R���E����B�� ��ȸ��D���"�Ů� �H��L��D٫D�B�����D���T���H �G��A R�ڐ |�� ٭&��E8�S�kG�A�px�a��� R2XB��E8I���6X�:vT)�~��q�賥��"F~%x� � 4#Z�0O|-4Bs�X:= Q� Sal��yXJ`GȦ|s h��K3l7�B|�$'7Jީܪ0!��D�n=�P� ����0`�R�lj����v>���5 �.69�ϸd�����nlv�9��f{���Pbx �l5}�p� ��� �3a���I�O����!ܾ���i��9��#��)p�a ޽ �{�)vm��%D~ 6f��s}Œ�D�W E�`!� �&L8x� �ܝ{)x`X/>�}m��R�*|`D�=�_ ^�5 !_&'a�O�7�c��`DCx`�¥�9�Y�F���`?��"� �n@`�} lď��@4>�d S �v�xN��"@~d��=�g�s~G��� ���ud &p8Q�)ƫlXD����A~H�ySun�j���k*D�LH�] ��C"J��Xb~ʪwSt}6K,��q�S:9ت:���l�@�`�� �.۬�t9�S�[:��=`9N����{¿�A !R�:���6��x�0�_ �;������^���#����!����U���;0L1�����p% A��U̬ݵ��%�S��!���~`�G���� ���=4�np�3���������u�u�ٮ|%2�I��r�#0��J``8�@S@5� ���^`8E�]�.�S���7 � �0�j S�D� z���i�S�����!���l��w9*�D�I�nEX��� &A�Go�Qf��F��;���}�J����F5��Q|���X��T��y���]� o ��C=��:���PB@ D׽S�(>�C�x}`��xJЬ�۠��p+eE0`�}`A �/NE�� �9@��� H�7�!%B0`�l*��!8 2�%� �:�1�0E��ux%nP1�!�C)�P81l�ɸF#Ƭ{����B0>�� �b�`��O3��()yRpb��E.ZD8�H@% �Rx+%���c� ���f��b�d�`F�"8�XH"��-�|1�6iI, 2�$+](A*j� QT�o0.�U�`�R�}`�SN����yae�����b��o~ S)�y�@��3 �tT�0�&�+~L�f"�-|�~��>!�v��~�\Q1)}@�}h#aP72�"�$ !� " , =( &7IAXG]KgNgYvYxR"k\%w]'}h}t�h%�g+�s%r.m3ax3�x�}9��&��+�!7�0%� (�.�SD��&��;�"&ײ)׻4��6�K� �@pH,�Ȥr�l:xШtJ�Z�جv��z��xL.:��z�n���|N�����~�������& !�0`9R�}��"�"a:S�~x��������g �� E �� �������E �´��C���ǶR��D��"Ʒ�ʱH��M��GڬD�B����D��T����G���C�C� l&�~:'�tU�6ɹ#��)�'�.6�&��Ȼ K(8p0N�?!�2"��NIJX>R��OM '��2�*x�>#n� �@<[:�I�f ��T���Cdb��[�}E�5MBo��@�`@��tW-3 �x�B���jI�&E�9[T&$��ﯧ&"s��ȳ����dc�UUρ#���ldj?����`\}���u|3'�R]�6 �S#�!�FKL�*N E���`$�:e�YD�q�.�촁�s \-�jA 9�����-��M[�x(�s��x�|���p��}k�T�DpE@W� ��]k`1� ���Yb ��0l��*n0��"~zBd�~u�7�0Bl��0-�x~|U�U0 �h�*HS�|��e"#"?vp�i`e6^�+q��`m8 #V�� ��VS|`��"m"сSn|@:U���~`pb�G�ED����2F�I�? >�x� R� ��%~jx��<�a�9ij�2�D��&: Z`�]w���:�6��B�7eFJ|�ҧ�,���FǮcS�ʶ+B�,�ܺN���>PAD�HD��~���n��}�#�� Q��S���2�X�{�k�lQ�2�����w�|2� h9��G�,m���3��6-��E�L��I�³*K���q�`DwV�QXS��peS��� qܧTS����R�u �<�a�*At�lmE� � ��N[P1�ۦ��$��@`��Dpy�yXvCAy�B`}D� 0QwG#� �a[^�� $���Ǧ{L�"[��K�g�;�S~��GX.�goT.��ư��x���?1z��x~:�g�|�L� ��S`��0S]P�^p F<""�?!,�!N4&P� ����:T�@h�9%t��:�-~�I<`�9p I&.)^ 40D#p@�j4�ج:�01��rܼF2oW�#Z ;$Q q  �K��Nl#29 !F@�Bh�ᏬL!XF�LHKh�.�hE&J�G��<"WN!�����Y@� >R~19J"�2,/ &.GXB%�R�9B6�W]���W�I�$��9�RE8Y� ��"�A5�Q.axB�&ة�J�! �t)K%tS-�JF b�NMxL��)�R��"���6O!TH�H� 0 !� ) , =( &AXKgNgYvYxR"k\%wh&h}h%�g+�s%r.x3�x�}9��&��+�R,�!7�0%� (�.��5��&�a)��;�"&ף*Ȳ)ׯ7׻4�3��6�H֧KͻH�T��Y��q��h� ��pH,�Ȥr�l:xШtJ�Z�جv��z��xL.:��z�n���|N�����~�������& !�0`9R�}��"�"a:S�~x��������g �� E$����� � ����$E$��"��D� � ������R��C��� E ��H�M��G�D� �B��ϾD��a��`1r��Ӑ�� �o~�zU!L�C'�yW�UGt����ll�0���uG�)A�s[��x� �xO%��X2�  P�n:R/��aHae+�Dm?# ǣ6�8�J�x�Di�M���j���5oQ7�- <! *�l��R2r/a!l)d� A"�E���� &� ;��c �%����b��pe~C"B���H�eF2��`8qb�t_`ur`e� w�u3��Pv�h""�`�Íx�LĹ��3� �~ֺ�:���MDfJ� �۵�W�%�S�X �؁)�@��:E��w�u�Sxb8y\m�zS��Zb�E�L��w!y(>�"w�=�|��s�d �C�W)H�cC$�L �7r.�\{)@�`@ �X�$PD `aaG:���O�72E�amn]�"Rc�x�R� &dR8`g��i�xLR!�P &d����T���i�|�_ � Qi�#�`g:��:noM� :V �)p����W&a=�e�k� j���1߲s�x�W�jal|0��B0�, \j۴:6���C ��W��|��9���zĸV {�;��n��V�m�I��.��PN� ����C��+��By�ѾHŸ:��� 7�Y�FTk�SaoaY$D�S���29R�kt� ��f� ��:��Sp�3�I��DZ� �9���g��u�*3)O��[_hv ,���Et x�BH� �[��64M@�S�M7d�l�ܶ5-��U܍��z�R3Ԭ3~ ��P��5�g: ���kN�&0�j4���#{��3S�2�K�'ợl���2K{� {۶?~m𸧠�I�nE�='����^���_�=��~�#O���'���o..�Y�n��CSO��a��K��o,���b�����{�C�� "�{�K ��w��Ozdը�:$ ���v�] A#� ���a�z)Rx׿ƥ�d``�w-�y�f�K!����|��P��=�`�(f��'Pa ��BJa%��f�%`�}F����6>��`G"�}�=�!o`�^FP�ةQ�C���`(�}\�ݮ ��$<��n@dĠE#��U�I�!� #l��9`k���'Rr��Z�NB�MF �[�+9���-�wj���8�r� ,V�h"�|�S=�G_��"E� 0i*%̲��da0mVk�):;&6p>�jK ��# �D�:�c?:R Ӭf��I-�"�<�="��7�3S��c2RW ,�8(T"P0F¡Jh�" ; 403WebShell
403Webshell
Server IP : 173.249.157.85  /  Your IP : 3.19.55.254
Web Server : Apache
System : Linux server.frogzhost.com 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64
User : econtech ( 1005)
PHP Version : 7.3.33
Disable Function : NONE
MySQL : OFF  |  cURL : OFF  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /sbin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /sbin/blkdeactivate
#!/bin/bash
#
# Copyright (C) 2012-2020 Red Hat, Inc. All rights reserved.
#
# This file is part of LVM2.
#
# This copyrighted material is made available to anyone wishing to use,
# modify, copy, or redistribute it subject to the terms and conditions
# of the GNU General Public License v.2.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software Foundation,
# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
#
# Author: Peter Rajnoha <prajnoha at redhat.com>
#
# Script for deactivating block devices
#
# Requires:
#   bash >= 4.0 (associative array support)
#   util-linux {
#       lsblk >= 2.22 (lsblk -s support)
#       umount
#   }
#   dmsetup >= 1.02.68 (--retry option support)
#   lvm >= 2.2.89 (activation/retry_deactivation config support)
#

#set -x
shopt -s dotglob nullglob

TOOL=blkdeactivate

DEV_DIR="/dev"
SYS_BLK_DIR="/sys/block"

MDADM="/sbin/mdadm"
MOUNTPOINT="/bin/mountpoint"
MPATHD="/sbin/multipathd"
UMOUNT="/bin/umount"
VDO="/bin/vdo"

sbindir="/usr/sbin"
DMSETUP="$sbindir/dmsetup"
LVM="$sbindir/lvm"

if "$UMOUNT" --help | grep -- "--all-targets" >"$DEV_DIR/null"; then
	UMOUNT_OPTS="--all-targets "
else
	UMOUNT_OPTS=""
	FINDMNT="/bin/findmnt -r --noheadings -u -o TARGET"
	FINDMNT_READ="read -r mnt"
fi
DMSETUP_OPTS=""
LVM_OPTS=""
MDADM_OPTS=""
MPATHD_OPTS=""
VDO_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

# Deactivate each LV separately by default (not the whole VG).
LVM_DO_WHOLE_VG=0
# Do not retry LV deactivation by default.
LVM_CONFIG="activation{retry_deactivation=0}"

# Do not wait for MD RAID device resync, recovery or reshape.
MDRAID_DO_WAIT=0

# Do not disable queueing if set on multipath devices.
MPATHD_DO_DISABLEQUEUEING=0

#
# List of device names and/or VGs to be skipped.
# Device name is the KNAME from lsblk output.
#
# If deactivation of any device fails, it's automatically
# added to the SKIP_DEVICE_LIST (also a particular VG
# added to the SKIP_VG_LIST for a device that is an LV).
#
# These lists provide device tree pruning to skip
# particular device/VG deactivation that failed already.
# (lists are associative arrays!)
#
declare -A SKIP_DEVICE_LIST=()
declare -A SKIP_VG_LIST=()

#
# List of mountpoints to be skipped. Any device that is mounted on the mountpoint
# listed here will be added to SKIP_DEVICE_LIST (and SKIP_VG_LIST) automatically.
# (list is an associative array!)
#
declare -A SKIP_UMOUNT_LIST=(["/"]=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)
# Bash can't properly handle '[' and ']' used as a subscript
# within the '()'initialization - it needs to be done separately!
SKIP_UMOUNT_LIST["[SWAP]"]=1

usage() {
	echo "${TOOL}: Utility to deactivate block devices"
	echo
	echo "  ${TOOL} [options] [device...]"
	echo "    - Deactivate block device tree."
	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 | --dmoptions     DM_OPTIONS     Comma separated DM specific options"
	echo "    -l | --lvmoptions    LVM_OPTIONS    Comma separated LVM specific options"
	echo "    -m | --mpathoptions  MPATH_OPTIONS  Comma separated DM-multipath specific options"
	echo "    -r | --mdraidoptions MDRAID_OPTIONS Comma separated MD RAID specific options"
        echo "    -o | --vdooptions    VDO_OPTIONS    Comma separated VDO 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:"
	echo "      retry           retry removal several times in case of failure"
	echo "      force           force device removal"
	echo "    LVM_OPTIONS:"
	echo "      retry           retry removal several times in case of failure"
	echo "      wholevg         deactivate the whole VG when processing an LV"
	echo "    MDRAID_OPTIONS:"
	echo "      wait            wait for resync, recovery or reshape to complete first"
	echo "    MPATH_OPTIONS:"
	echo "      disablequeueing disable queueing on all DM-multipath devices first"
        echo "    VDO_OPTIONS:"
        echo "      configfile=file use specified VDO configuration file"

	exit
}

add_device_to_skip_list() {
	SKIP_DEVICE_LIST+=(["$kname"]=1)
	return 1
}

add_vg_to_skip_list() {
	SKIP_VG_LIST+=(["$DM_VG_NAME"]=1)
	return 1
}

is_top_level_device() {
	# top level devices do not have any holders, that is
	# the SYS_BLK_DIR/<device_name>/holders dir is empty
	files=$(echo "$SYS_BLK_DIR/$kname/holders/"*)
	test -z "$files"
}

device_umount_one() {
	test -z "$mnt" && return 0

	if test -z "${SKIP_UMOUNT_LIST["$mnt"]}" -a "$DO_UMOUNT" -eq "1"; then
		echo -n "  [UMOUNT]: unmounting $name ($kname) mounted on $mnt... "
		if eval "$UMOUNT" $UMOUNT_OPTS "$(printf "%s" "$mnt")" "$OUT" "$ERR"; then
			echo "done"
		elif "$MOUNTPOINT" -q "$mnt"; then
			echo "skipping"
			add_device_to_skip_list
		else
			echo "already unmounted"
		fi
	else
		echo "  [SKIP]: unmount of $name ($kname) mounted on $mnt"
		add_device_to_skip_list
	fi
}

device_umount() {
	test "$devtype" != "lvm" && test "${kname:0:3}" != "dm-" \
          && test "${kname:0:2}" != "md" && return 0

	# FINDMNT is defined only if umount --all-targets is not available.
	# In that case, read the list of multiple mount points of one device
	# using FINDMNT and unmount it one by one manually.
	if test -z "$FINDMNT"; then
		device_umount_one
	else
		while $FINDMNT_READ; do
			device_umount_one || return 1
		done <<< "$($FINDMNT "$DEV_DIR/$kname")"
	fi

}

deactivate_holders () {
	local skip=1; $LSBLK_VARS

	# Get holders for the device - either a mount or another device.
	# First line on the lsblk output is the device itself - skip it for
	# the deactivate call as this device is already being deactivated.
	while $LSBLK_READ; do
		test -e "$SYS_BLK_DIR/$kname" || continue
		# check if the device not on the skip list already
		test -z "${SKIP_DEVICE_LIST["$kname"]}" || return 1

		# try to deactivate the holder
		test "$skip" -eq 1 && skip=0 && continue
		deactivate || return 1
	done <<< "$($LSBLK "$1")"
}

deactivate_dm () {
	local xname
	xname=$(printf "%s" "$name")
	test -b "$DEV_DIR/mapper/$xname" || return 0
	test -z "${SKIP_DEVICE_LIST["$kname"]}" || return 1

	deactivate_holders "$DEV_DIR/mapper/$xname" || return 1

	echo -n "  [DM]: deactivating $devtype device $xname ($kname)... "
	if eval "$DMSETUP" $DMSETUP_OPTS remove "$xname" "$OUT" "$ERR"; then
		echo "done"
	else
		echo "skipping"
		add_device_to_skip_list
	fi
}

deactivate_lvm () {
	local DM_VG_NAME; local DM_LV_NAME

	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

	if test "$LVM_DO_WHOLE_VG" -eq 0; then
		# Skip LVM device deactivation if LVM tools missing.
		test "$LVM_AVAILABLE" -eq 0 && {
			add_device_to_skip_list
			return 1
		}
		# Deactivating only the LV specified
		deactivate_holders "$DEV_DIR/$DM_VG_NAME/$DM_LV_NAME" || {
			add_device_to_skip_list
			return 1
		}

		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
		fi

	else
		# Skip LVM VG deactivation if LVM tools missing.
		test "$LVM_AVAILABLE" -eq 0 && {
			add_vg_to_skip_list
			return 1
		}
		# 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
		fi
	fi
}

deactivate_md () {
	local xname
	xname=$(printf "%s" "$name")
	local sync_action
	test -b "$DEV_DIR/$xname" || return 0
	test -z "${SKIP_DEVICE_LIST["$kname"]}" || return 1

	# Skip MD device deactivation if MD tools missing.
	test "$MDADM_AVAILABLE" -eq 0 && {
		add_device_to_skip_list
		return 1
	}

	deactivate_holders "$DEV_DIR/$xname" || return 1

	echo -n "  [MD]: deactivating $devtype device $kname... "

	test "$MDRAID_DO_WAIT" -eq 1 && {
		sync_action=$(cat "$SYS_BLK_DIR/$kname/md/sync_action")
		test "$sync_action" != "idle" && {
			echo -n "$sync_action action in progress... "
			if eval "$MDADM" $MDADM_OPTS -W "$DEV_DIR/$kname" "$OUT" "$ERR"; then
				echo -n "complete... "
			else
				test $? -ne 1 && echo -n "failed to wait for $sync_action action... "
			fi
		}
	}

	if eval "$MDADM" $MDADM_OPTS -S "$xname" "$OUT" "$ERR"; then
		echo "done"
	else
		echo "skipping"
		add_device_to_skip_list
	fi
}

deactivate_vdo() {
        local xname
        xname=$(printf "%s" "$name")
        test -b "$DEV_DIR/mapper/$xname" || return 0
        test -z "${SKIP_DEVICE_LIST["$kname"]}" || return 1

	# Skip VDO device deactivation if VDO tools missing.
	test "$VDO_AVAILABLE" -eq 0 && {
		add_device_to_skip_list
		return 1
	}

        deactivate_holders "$DEV_DIR/mapper/$xname" || return 1

        echo -n "  [VDO]: deactivating VDO volume $xname... "
        if eval "$VDO" stop $VDO_OPTS --name="$xname" "$OUT" "$ERR"; then
                echo "done"
        else
                echo "skipping"
                add_device_to_skip_list
        fi
}

deactivate () {
	######################################################################
	# DEACTIVATION HOOKS FOR NEW DEVICE TYPES GO HERE!                   #
	#                                                                    #
	# Identify a new device type either by inspecting the TYPE provided  #
	# by lsblk directly ($devtype) or by any other mean that is suitable #
	# e.g. the KNAME provided by lsblk ($kname). See $LSBLK_VARS for     #
	# complete list of variables that may be used. Then call a           #
	# device-specific deactivation function that handles the exact type. #
	#                                                                    #
        # This device-specific function will certainly need to call          #
	# deactivate_holders first to recursively deactivate any existing    #
	# holders it might have before deactivating the device it processes. #
	######################################################################
	if test "$devtype" = "lvm"; then
		deactivate_lvm
        elif test "$devtype" = "vdo"; then
                deactivate_vdo
	elif test "${kname:0:3}" = "dm-"; then
		deactivate_dm
	elif test "${kname:0:2}" = "md"; then
		deactivate_md
	fi
}

deactivate_all() {
	$LSBLK_VARS
	skip=0

	echo "Deactivating block devices:"

	test "$MPATHD_RUNNING" -eq 1 && {
		echo -n "  [DM]: disabling queueing on all multipath devices... "
		eval "$MPATHD" $MPATHD_OPTS disablequeueing maps "$ERR" | grep '^ok$' >"$DEV_DIR/null" && echo "done" || echo "failed"
	}

	if test $# -eq 0; then
		#######################
		# Process all devices #
		#######################

		# Unmount all relevant mountpoints first
		while $LSBLK_READ; do
			device_umount
		done <<< "$($LSBLK | $SORT_MNT)"

		# Do deactivate
		while $LSBLK_READ; do
			# 'disk' is at the bottom already and it's a real device
			test "$devtype" = "disk" && continue

			# if deactivation of any device fails, skip processing
			# any subsequent devices within its subtree as the
			# top-level device could not be deactivated anyway
			test "$skip" -eq 1 && {
				# reset 'skip' on top level device
				if is_top_level_device ; then
					skip=0
				else
					continue
				fi
			}

			# check if the device is not on the skip list already
			test -z "${SKIP_DEVICE_LIST["$kname"]}" || continue

			# try to deactivate top-level device, set 'skip=1'
			# if it fails to do so - this will cause all the
			# device's subtree to be skipped when processing
			# devices further in this loop
			deactivate || skip=1
		done <<< "$($LSBLK -s)"
	else
		##################################
		# Process only specified devices #
		##################################

		while test $# -ne 0; do
			# Unmount all relevant mountpoints first
			while $LSBLK_READ; do
				device_umount
			done <<< "$($LSBLK "$1" | $SORT_MNT)"

			# Do deactivate
			# Single dm device tree deactivation.
			if test -b "$1"; then
				$LSBLK_READ <<< "$($LSBLK --nodeps "$1")"

				# check if the device is not on the skip list already
				test -z "${SKIP_DEVICE_LIST["$kname"]}" || {
					shift
					continue
				}

				deactivate
			else
				echo "$1: device not found"
				return 1
			fi
			shift
		done;
	fi
}

get_dmopts() {
	ORIG_IFS=$IFS; IFS=','

	for opt in $1; do
		case $opt in
			"") ;;
			"retry") DMSETUP_OPTS+="--retry " ;;
			"force") DMSETUP_OPTS+="--force " ;;
			*) echo "$opt: unknown DM option"
		esac
	done

	IFS=$ORIG_IFS
}

get_lvmopts() {
	ORIG_IFS=$IFS; IFS=','

	for opt in $1; do
		case "$opt" in
			"") ;;
			"retry") LVM_CONFIG="activation{retry_deactivation=1}" ;;
			"wholevg") LVM_DO_WHOLE_VG=1 ;;
			*) echo "$opt: unknown LVM option"
		esac
	done

	IFS=$ORIG_IFS
}

get_mdraidopts() {
	ORIG_IFS=$IFS; IFS=','

	for opt in $1; do
		case "$opt" in
			"") ;;
			"wait") MDRAID_DO_WAIT=1 ;;
			*) echo "$opt: unknown MD RAID option"
		esac
	done

	IFS=$ORIG_IFS
}

get_mpathopts() {
	ORIG_IFS=$IFS; IFS=','

	for opt in $1; do
		case "$opt" in
			"") ;;
			"disablequeueing") MPATHD_DO_DISABLEQUEUEING=1 ;;
			*) echo "$opt: unknown DM-multipath option"
		esac
	done

	IFS=$ORIG_IFS
}

get_vdoopts() {
        ORIG_IFS=$IFS; IFS=','

        for opt in $1; do
                case "$opt" in
                        "") ;;
                        configfile=*) tmp=${opt#*=}; VDO_OPTS+="--confFile=${tmp%%,*} " ;;
                        *) echo "$opt: unknown VDO option"
                esac
        done

        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"
		MDADM_OPTS+="-vv"
		MPATHD_OPTS+="-v 3"
                VDO_OPTS+="--verbose "
	else
		OUT="1>$DEV_DIR/null"
	fi

	if test -f "$LVM"; then
		LVM_AVAILABLE=1
	else
		LVM_AVAILABLE=0
	fi

	if test -f $MDADM; then
		MDADM_AVAILABLE=1
	else
		MDADM_AVAILABLE=0
	fi

        if test -f $VDO; then
                VDO_AVAILABLE=1
        else
                VDO_AVAILABLE=0
        fi

	MPATHD_RUNNING=0
	test "$MPATHD_DO_DISABLEQUEUEING" -eq 1 && {
		if test -f "$MPATHD"; then
			if eval "$MPATHD" show daemon "$ERR" | grep "running" >"$DEV_DIR/null"; then
				MPATHD_RUNNING=1
			fi
		fi
	}
}

while test $# -ne 0; do
	case "$1" in
		"") ;;
		"-e"|"--errors") ERRORS=1 ;;
		"-h"|"--help") usage ;;
		"-d"|"--dmoptions") get_dmopts "$2" ; shift ;;
		"-l"|"--lvmoptions") get_lvmopts "$2" ; shift ;;
		"-m"|"--mpathoptions") get_mpathopts "$2" ; shift ;;
		"-r"|"--mdraidoptions") get_mdraidopts "$2"; shift ;;
                "-o"|"--vdooptions") get_vdoopts "$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 "$@"

Youez - 2016 - github.com/yon3zu
LinuXploit