Skip to content

Commit

Permalink
feat(lvm): only run lvchange for LV that is seen on devices
Browse files Browse the repository at this point in the history
Change the command listing LVs from lvscan to lvs, and list
only the LV names that are being activated.  Before attempting
to activate an LV, check that that LV name appears in the
lvs command output.  This avoids wasting time running an
lvchange command that we know will fail.
  • Loading branch information
teigland authored and johannbg committed Feb 2, 2022
1 parent 7ffc5e3 commit 1af4674
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions modules.d/90lvm/lvm_scan.sh
Expand Up @@ -119,7 +119,7 @@ sub=${sub%%\(*}
# ignores locking failures (--ignorelockingfailure)
# disables hints (--nohints)
#
# For lvscan and vgscan:
# For lvs and vgscan:
# disable locking (--nolocking)
# disable hints (--nohints)

Expand All @@ -136,10 +136,20 @@ check_lvm_ver 2 3 14 "$maj" "$min" "$sub" \
if [ -n "$LVS" ]; then
info "Scanning devices $lvmdevs for LVM logical volumes $LVS"
# shellcheck disable=SC2086
lvm lvscan $scan_args 2>&1 | vinfo
LVSLIST=$(lvm lvs $scan_args --noheading -o lv_full_name,segtype $LVS)
info "$LVSLIST"

# Only attempt to activate an LV if it appears in the lvs output.
for LV in $LVS; do
# shellcheck disable=SC2086
lvm lvchange --yes -K -ay $activate_args "$LV" 2>&1 | vinfo
if strstr "$LVSLIST" "$LV"; then
# This lvchange is expected to fail if all PVs used by
# the LV are not yet present. Premature/failed lvchange
# could be avoided by reporting if an LV is complete
# from the lvs command above and skipping this lvchange
# if the LV is not lised as complete.
# shellcheck disable=SC2086
lvm lvchange --yes -K -ay $activate_args "$LV" 2>&1 | vinfo
fi
done
fi

Expand Down

0 comments on commit 1af4674

Please sign in to comment.