From a35d7faf75fe93adda685a678aa21a2d9d39cb1f Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Sep 09 2021 06:19:15 +0000 Subject: import lvm2-2.03.12-8.el8 --- diff --git a/SOURCES/lvm2-2_03_14-vdo-Rename-vdoimport-to-lvm_import_vdo.patch b/SOURCES/lvm2-2_03_14-vdo-Rename-vdoimport-to-lvm_import_vdo.patch new file mode 100644 index 0000000..2250e1c --- /dev/null +++ b/SOURCES/lvm2-2_03_14-vdo-Rename-vdoimport-to-lvm_import_vdo.patch @@ -0,0 +1,1137 @@ + WHATS_NEW | 4 + + configure | 6 +- + configure.ac | 8 +- + include/configure.h.in | 2 +- + man/Makefile.in | 2 +- + man/lvm_import_vdo.8_main | 92 ++++++++++++ + man/vdoimport.8_main | 92 ------------ + scripts/Makefile.in | 2 +- + scripts/lvm_import_vdo.sh | 376 ++++++++++++++++++++++++++++++++++++++++++++++ + scripts/vdoimport.sh | 376 ---------------------------------------------- + test/Makefile.in | 2 +- + test/shell/vdo-convert.sh | 12 +- + 12 files changed, 489 insertions(+), 485 deletions(-) + create mode 100644 man/lvm_import_vdo.8_main + delete mode 100644 man/vdoimport.8_main + create mode 100755 scripts/lvm_import_vdo.sh + delete mode 100755 scripts/vdoimport.sh + +diff --git a/WHATS_NEW b/WHATS_NEW +index 5556789..3637e31 100644 +--- a/WHATS_NEW ++++ b/WHATS_NEW +@@ -1,3 +1,7 @@ ++Version 2.03.14 - ++================================== ++ Rename vdoimport to lvm_import_vdo. ++ + Version 2.03.13 - + =============================== + Support --poolmetadataspare with vgsplit and vgmerge. +diff --git a/configure b/configure +index 661702d..897a810 100755 +--- a/configure ++++ b/configure +@@ -12379,8 +12379,8 @@ $as_echo "$FSADM" >&6; } + + + ################################################################################ +-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to install vdoimport" >&5 +-$as_echo_n "checking whether to install vdoimport... " >&6; } ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to install lvm_import_vdo" >&5 ++$as_echo_n "checking whether to install lvm_import_vdo... " >&6; } + # Check whether --enable-vdoimport was given. + if test "${enable_vdoimport+set}" = set; then : + enableval=$enable_vdoimport; VDOIMPORT=$enableval +@@ -13875,7 +13875,7 @@ cat >>confdefs.h <<_ACEOF + _ACEOF + + +-VDOIMPORT_PATH="$SBINDIR/vdoimport" ++VDOIMPORT_PATH="$SBINDIR/lvm_import_vdo" + + cat >>confdefs.h <<_ACEOF + #define VDOIMPORT_PATH "$VDOIMPORT_PATH" +diff --git a/configure.ac b/configure.ac +index 5a8b486..f769a63 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1295,8 +1295,8 @@ AC_MSG_RESULT($FSADM) + + + ################################################################################ +-dnl -- Enable vdoimport +-AC_MSG_CHECKING(whether to install vdoimport) ++dnl -- Enable lvm_import_vdo ++AC_MSG_CHECKING(whether to install lvm_import_vdo) + AC_ARG_ENABLE(vdoimport, AC_HELP_STRING([--disable-vdoimport], [disable vdoimport]), + VDOIMPORT=$enableval) + AC_MSG_RESULT($VDOIMPORT) +@@ -1656,8 +1656,8 @@ USRSBINDIR="$(eval echo $(eval echo $usrsbindir))" + FSADM_PATH="$SBINDIR/fsadm" + AC_DEFINE_UNQUOTED(FSADM_PATH, ["$FSADM_PATH"], [Path to fsadm binary.]) + +-VDOIMPORT_PATH="$SBINDIR/vdoimport" +-AC_DEFINE_UNQUOTED(VDOIMPORT_PATH, ["$VDOIMPORT_PATH"], [Path to vdoimport binary.]) ++VDOIMPORT_PATH="$SBINDIR/lvm_import_vdo" ++AC_DEFINE_UNQUOTED(VDOIMPORT_PATH, ["$VDOIMPORT_PATH"], [Path to lvm_import_vdo binary.]) + + ################################################################################ + dnl -- dmeventd pidfile and executable path +diff --git a/include/configure.h.in b/include/configure.h.in +index 6df8d89..028ae48 100644 +--- a/include/configure.h.in ++++ b/include/configure.h.in +@@ -684,7 +684,7 @@ + /* Enable a valgrind aware build of pool */ + #undef VALGRIND_POOL + +-/* Path to vdoimport binary. */ ++/* Path to lvm_import_vdo binary. */ + #undef VDOIMPORT_PATH + + /* The path to 'vdoformat', if available. */ +diff --git a/man/Makefile.in b/man/Makefile.in +index d60a92c..45ebf54 100644 +--- a/man/Makefile.in ++++ b/man/Makefile.in +@@ -23,7 +23,7 @@ else + endif + + FSADMMAN = fsadm.8 +-VDOIMPORTMAN = vdoimport.8 ++VDOIMPORTMAN = lvm_import_vdo.8 + BLKDEACTIVATEMAN = blkdeactivate.8 + DMEVENTDMAN = dmeventd.8 + DMFILEMAPDMAN = dmfilemapd.8 +diff --git a/man/lvm_import_vdo.8_main b/man/lvm_import_vdo.8_main +new file mode 100644 +index 0000000..ee817a0 +--- /dev/null ++++ b/man/lvm_import_vdo.8_main +@@ -0,0 +1,92 @@ ++.TH "FSADM" "8" "LVM TOOLS #VERSION#" "Red Hat, Inc" "\"" ++. ++.SH "NAME" ++. ++lvm_import_vdo \(em utility to import VDO volumes into a new volume group. ++. ++.SH SYNOPSIS ++. ++.PD 0 ++.ad l ++.TP 10 ++.B lvm_import_vdo ++.RI [ options ] ++.IR device ++. ++.PD ++. ++.SH DESCRIPTION ++. ++lvm_import_vdo utility imports VDO volumes created and managed by ++.BR vdo (8) ++manager into ++.BR lvm2 (8) ++managed VDO LV. This is realized by moving VDO superblock by 2MiB ++and creating lvm2 metadata at the front of this device. The operation is not reversible, ++thus after conversion to lvm2 the access to VDO data is only possible with ++.BR lvm2 (8) ++commands, ++.BR vdo (8) ++manager no longer control such volume. ++. ++.SH OPTIONS ++. ++.TP ++.BR -f | --force ++Bypass some sanity checks. ++. ++.TP ++.BR -h | --help ++Display the help text. ++. ++.TP ++.BR -n | --name ++Specifies the name of converted VDO LV. When the name is not specified, ++some automatic name is selected. In case the converted VDO volume is ++already using LV a backend device, the name of this LV is used for VDO LV. ++In this case also the of volume group must stay same. ++. ++.TP ++.BR -v | --verbose ++Be more verbose. ++. ++.TP ++.BR -y | --yes ++Answer "yes" at any prompts. ++. ++.TP ++.BR --dry-run ++Print commands without running them. ++. ++. ++.SH DIAGNOSTICS ++. ++On successful completion, the status code is 0. ++A status code of 1 is used for failure. ++. ++.SH EXAMPLES ++. ++Convert VDO volume created by vdo manager into logical volume LV1 with within volume group VG1. ++.P ++# ++.B lvm_import_vdo --name VG1/LV1 /dev/mapper/vdo-volume ++. ++.SH ENVIRONMENT VARIABLES ++. ++.TP ++.B TMPDIR ++The temporary directory name for mount points. Defaults to "\fI/tmp\fP". ++.TP ++.B DM_DEV_DIR ++The device directory name. ++Defaults to "\fI/dev\fP" and must be an absolute path. ++. ++.SH SEE ALSO ++. ++.nh ++.ad l ++.BR lvm (8), ++.BR lvm.conf (5), ++.P ++.BR vdo (8), ++.BR vdo2lvm (8), +diff --git a/man/vdoimport.8_main b/man/vdoimport.8_main +deleted file mode 100644 +index 1f32909..0000000 +--- a/man/vdoimport.8_main ++++ /dev/null +@@ -1,92 +0,0 @@ +-.TH "FSADM" "8" "LVM TOOLS #VERSION#" "Red Hat, Inc" "\"" +-. +-.SH "NAME" +-. +-vdoimport \(em utility to import VDO volumes into a new volume group. +-. +-.SH SYNOPSIS +-. +-.PD 0 +-.ad l +-.TP 10 +-.B vdoimport +-.RI [ options ] +-.IR device +-. +-.PD +-. +-.SH DESCRIPTION +-. +-vdoimport utility imports VDO volumes created and managed by +-.BR vdo (8) +-manager into +-.BR lvm2 (8) +-managed VDO LV. This is realized by moving VDO superblock by 2MiB +-and creating lvm2 metadata at the front of this device. The operation is not reversible, +-thus after conversion to lvm2 the access to VDO data is only possible with +-.BR lvm2 (8) +-commands, +-.BR vdo (8) +-manager no longer control such volume. +-. +-.SH OPTIONS +-. +-.TP +-.BR -f | --force +-Bypass some sanity checks. +-. +-.TP +-.BR -h | --help +-Display the help text. +-. +-.TP +-.BR -n | --name +-Specifies the name of converted VDO LV. When the name is not specified, +-some automatic name is selected. In case the converted VDO volume is +-already using LV a backend device, the name of this LV is used for VDO LV. +-In this case also the of volume group must stay same. +-. +-.TP +-.BR -v | --verbose +-Be more verbose. +-. +-.TP +-.BR -y | --yes +-Answer "yes" at any prompts. +-. +-.TP +-.BR --dry-run +-Print commands without running them. +-. +-. +-.SH DIAGNOSTICS +-. +-On successful completion, the status code is 0. +-A status code of 1 is used for failure. +-. +-.SH EXAMPLES +-. +-Convert VDO volume created by vdo manager into logical volume LV1 with within volume group VG1. +-.P +-# +-.B vdoimport --name VG1/LV1 /dev/mapper/vdo-volume +-. +-.SH ENVIRONMENT VARIABLES +-. +-.TP +-.B TMPDIR +-The temporary directory name for mount points. Defaults to "\fI/tmp\fP". +-.TP +-.B DM_DEV_DIR +-The device directory name. +-Defaults to "\fI/dev\fP" and must be an absolute path. +-. +-.SH SEE ALSO +-. +-.nh +-.ad l +-.BR lvm (8), +-.BR lvm.conf (5), +-.P +-.BR vdo (8), +-.BR vdo2lvm (8), +diff --git a/scripts/Makefile.in b/scripts/Makefile.in +index 1fe88ca..f16c37d 100644 +--- a/scripts/Makefile.in ++++ b/scripts/Makefile.in +@@ -32,7 +32,7 @@ ifeq ("@FSADM@", "yes") + endif + + ifeq ("@VDOIMPORT@", "yes") +- LVM_SCRIPTS += vdoimport.sh ++ LVM_SCRIPTS += lvm_import_vdo.sh + endif + + ifeq ("@BLKDEACTIVATE@", "yes") +diff --git a/scripts/lvm_import_vdo.sh b/scripts/lvm_import_vdo.sh +new file mode 100755 +index 0000000..35140a0 +--- /dev/null ++++ b/scripts/lvm_import_vdo.sh +@@ -0,0 +1,376 @@ ++#!/bin/bash ++# ++# Copyright (C) 2021 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: Zdenek Kabelac ++# ++# Script for converting VDO volumes to lvm2 VDO LVs ++# ++# Needed utilities: ++# lvm, dmsetup, ++# vdo, vdo2lvm, ++# grep, awk, sed, blockdev, readlink, mkdir ++# ++# Conversion is using 'vdo convert' support from VDO manager to move ++# existing VDO header by 2M which makes space to place in PV header ++# and VG metadata area, and then create VDOPOOL LV and VDO LV in such VG. ++# ++ ++set -euE -o pipefail ++ ++TOOL=lvm_import_vdo ++ ++_SAVEPATH=$PATH ++PATH="/sbin:/usr/sbin:/bin:/usr/sbin:$PATH" ++ ++# user may override lvm location by setting LVM_BINARY ++LVM=${LVM_BINARY:-lvm} ++VDO=${VDO_BINARY:-vdo} ++VDOCONF=${VDOCONF:-} ++BLOCKDEV="blockdev" ++READLINK="readlink" ++READLINK_E="-e" ++MKDIR="mkdir" ++ ++TEMPDIR="${TMPDIR:-/tmp}/${TOOL}_${RANDOM}$$" ++DM_DEV_DIR="${DM_DEV_DIR:-/dev}" ++ ++DRY=0 ++VERB="" ++FORCE="" ++YES="" ++ ++# default name for converted VG and its VDO LV ++NAME="vdovg/vdolvol" ++ ++# help message ++tool_usage() { ++ echo "${TOOL}: Utility to convert VDO volume to VDO LV." ++ echo ++ echo " ${TOOL} [options] " ++ echo ++ echo " Options:" ++ echo " -f | --force Bypass sanity checks" ++ echo " -h | --help Show this help message" ++ echo " -n | --name Specifies VG/LV name for converted VDO volume" ++ echo " -v | --verbose Be verbose" ++ echo " -y | --yes Answer \"yes\" at any prompts" ++ echo " --dry-run Print commands without running them" ++ ++ exit ++} ++ ++verbose() { ++ test -z "$VERB" || echo "$TOOL:" "$@" ++} ++ ++# Support multi-line error messages ++error() { ++ for i in "$@" ; do ++ echo "$TOOL: $i" >&2 ++ done ++ cleanup 1 ++} ++ ++dry() { ++ if [ "$DRY" -ne 0 ]; then ++ verbose "Dry execution" "$@" ++ return 0 ++ fi ++ verbose "Executing" "$@" ++ "$@" ++} ++ ++cleanup() { ++ trap '' 2 ++ ++ rm -rf "$TEMPDIR" ++ # error exit status for break ++ exit "${1:-1}" ++} ++ ++get_enabled_value_() { ++ case "$1" in ++ enabled) echo "1" ;; ++ *) echo "0" ;; ++ esac ++} ++ ++get_kb_size_with_unit_() { ++ case "$1" in ++ *[kK]) echo $(( ${1%[kK]} )) ;; ++ *[mM]) echo $(( ${1%[mM]} * 1024 )) ;; ++ *[gG]) echo $(( ${1%[gG]} * 1024 * 1024 )) ;; ++ *[tT]) echo $(( ${1%[tT]} * 1024 * 1024 * 1024 )) ;; ++ *[pP]) echo $(( ${1%[pP]} * 1024 * 1024 * 1024 * 1024 )) ;; ++ esac ++} ++ ++get_mb_size_with_unit_() { ++ case "$1" in ++ *[mM]) echo $(( ${1%[mM]} )) ;; ++ *[gG]) echo $(( ${1%[gG]} * 1024 )) ;; ++ *[tT]) echo $(( ${1%[tT]} * 1024 * 1024 )) ;; ++ *[pP]) echo $(( ${1%[pP]} * 1024 * 1024 * 1024 )) ;; ++ esac ++} ++ ++# Figure out largest possible extent size usable for VG ++# $1 physical size ++# $2 logical size ++get_largest_extent_size_() { ++ local max=4 ++ local i ++ local d ++ ++ for i in 8 16 32 64 128 256 512 1024 2048 4096 ; do ++ d=$(( $1 / i )) ++ test $(( d * i )) -eq "$1" || break ++ d=$(( $2 / i )) ++ test $(( d * i )) -eq "$2" || break ++ max=$i ++ done ++ echo "$max" ++} ++ ++# detect LV on the given device ++# dereference device name if it is symbolic link ++detect_lv_() { ++ local DEVICE=$1 ++ local MAJOR ++ local MINOR ++ local SYSVOLUME ++ local MAJORMINOR ++ ++ DEVICE=${1/#"${DM_DEV_DIR}/"/} ++ DEVICE=$("$READLINK" $READLINK_E "$DM_DEV_DIR/$DEVICE") ++ test -n "$DEVICE" || error "Cannot get readlink \"$1\"." ++ RDEVICE=$DEVICE ++ case "$RDEVICE" in ++ # hardcoded /dev since udev does not create these entries elsewhere ++ /dev/dm-[0-9]*) ++ read -r <"/sys/block/${RDEVICE#/dev/}/dm/name" SYSVOLUME 2>&1 && DEVICE="$DM_DEV_DIR/mapper/$SYSVOLUME" ++ read -r <"/sys/block/${RDEVICE#/dev/}/dev" MAJORMINOR 2>&1 || error "Cannot get major:minor for \"$DEVICE\"." ++ MAJOR=${MAJORMINOR%%:*} ++ MINOR=${MAJORMINOR##*:} ++ ;; ++ *) ++ STAT=$(stat --format "MAJOR=\$((0x%t)) MINOR=\$((0x%T))" "$RDEVICE") ++ test -n "$STAT" || error "Cannot get major:minor for \"$DEVICE\"." ++ eval "$STAT" ++ ;; ++ esac ++ ++ eval "$(dmsetup info -c -j "$MAJOR" -m "$MINOR" -o uuid,name --noheadings --nameprefixes --separator ' ')" ++} ++ ++# parse yaml config files into 'prefix_yaml_part_names=("value")' strings ++parse_yaml_() { ++ local yaml_file=$1 ++ local prefix=$2 ++ local s ++ local w ++ local fs ++ ++ s='[[:space:]]*' ++ w='[a-zA-Z0-9_.-]*' ++ fs="$(echo @|tr @ '\034')" ++ ++ ( ++ sed -ne '/^--/s|--||g; s|\"|\\\"|g; s/[[:space:]]*$//g;' \ ++ -e 's/\$/\\\$/g' \ ++ -e "/#.*[\"\']/!s| #.*||g; /^#/s|#.*||g;" \ ++ -e "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \ ++ -e "s|^\($s\)\($w\)${s}[:-]$s\(.*\)$s\$|\1$fs\2$fs\3|p" | ++ ++ awk -F"$fs" '{ ++ indent = length($1)/2; ++ if (length($2) == 0) { conj[indent]="+";} else {conj[indent]="";} ++ vname[indent] = $2; ++ for (i in vname) {if (i > indent) {delete vname[i]}} ++ if (length($3) > 0) { ++ vn=""; for (i=0; i"$TEMPDIR/vdoconf.yml" ++ ++ VDONAME=$(awk -v DNAME="$DEVICE" '/.*VDOService$/ {VNAME=substr($1, 0, length($1) - 1)} /[[:space:]]*device:/ { if ($2 ~ DNAME) {print VNAME}}' "$TEMPDIR/vdoconf.yml") ++ TRVDONAME=$(echo "$VDONAME" | tr '-' '_') ++ ++ # When VDO volume is 'active', check it's not mounted/being used ++ eval "$(dmsetup info -c -o open "$VDONAME" --noheadings --nameprefixes || true)" ++ test "${DM_OPEN:-0}" -eq 0 || error "Cannot converted VDO volume \"$VDONAME\" which is in use!" ++ ++ #parse_yaml_ "$TEMPDIR/vdoconf.yml" _ ++ eval "$(parse_yaml_ "$TEMPDIR/vdoconf.yml" _ | grep "$TRVDONAME" | sed -e "s/_config_vdos_$TRVDONAME/vdo/g")" ++ ++ vdo_logicalSize=$(get_kb_size_with_unit_ "$vdo_logicalSize") ++ vdo_physicalSize=$(get_kb_size_with_unit_ "$vdo_physicalSize") ++ ++ verbose "Going to convert physical sized VDO device $vdo_physicalSize KiB." ++ verbose "With logical volume of size $vdo_logicalSize KiB." ++ ++ PARAMS=$(cat < +-# +-# Script for converting VDO volumes to lvm2 VDO LVs +-# +-# Needed utilities: +-# lvm, dmsetup, +-# vdo, vdo2lvm, +-# grep, awk, sed, blockdev, readlink, mkdir +-# +-# Conversion is using 'vdo convert' support from VDO manager to move +-# existing VDO header by 2M which makes space to place in PV header +-# and VG metadata area, and then create VDOPOOL LV and VDO LV in such VG. +-# +- +-set -euE -o pipefail +- +-TOOL=vdoimport +- +-_SAVEPATH=$PATH +-PATH="/sbin:/usr/sbin:/bin:/usr/sbin:$PATH" +- +-# user may override lvm location by setting LVM_BINARY +-LVM=${LVM_BINARY:-lvm} +-VDO=${VDO_BINARY:-vdo} +-VDOCONF=${VDOCONF:-} +-BLOCKDEV="blockdev" +-READLINK="readlink" +-READLINK_E="-e" +-MKDIR="mkdir" +- +-TEMPDIR="${TMPDIR:-/tmp}/${TOOL}_${RANDOM}$$" +-DM_DEV_DIR="${DM_DEV_DIR:-/dev}" +- +-DRY=0 +-VERB="" +-FORCE="" +-YES="" +- +-# default name for converted VG and its VDO LV +-NAME="vdovg/vdolvol" +- +-# help message +-tool_usage() { +- echo "${TOOL}: Utility to convert VDO volume to VDO LV." +- echo +- echo " ${TOOL} [options] " +- echo +- echo " Options:" +- echo " -f | --force Bypass sanity checks" +- echo " -h | --help Show this help message" +- echo " -n | --name Specifies VG/LV name for converted VDO volume" +- echo " -v | --verbose Be verbose" +- echo " -y | --yes Answer \"yes\" at any prompts" +- echo " --dry-run Print commands without running them" +- +- exit +-} +- +-verbose() { +- test -z "$VERB" || echo "$TOOL:" "$@" +-} +- +-# Support multi-line error messages +-error() { +- for i in "$@" ; do +- echo "$TOOL: $i" >&2 +- done +- cleanup 1 +-} +- +-dry() { +- if [ "$DRY" -ne 0 ]; then +- verbose "Dry execution" "$@" +- return 0 +- fi +- verbose "Executing" "$@" +- "$@" +-} +- +-cleanup() { +- trap '' 2 +- +- rm -rf "$TEMPDIR" +- # error exit status for break +- exit "${1:-1}" +-} +- +-get_enabled_value_() { +- case "$1" in +- enabled) echo "1" ;; +- *) echo "0" ;; +- esac +-} +- +-get_kb_size_with_unit_() { +- case "$1" in +- *[kK]) echo $(( ${1%[kK]} )) ;; +- *[mM]) echo $(( ${1%[mM]} * 1024 )) ;; +- *[gG]) echo $(( ${1%[gG]} * 1024 * 1024 )) ;; +- *[tT]) echo $(( ${1%[tT]} * 1024 * 1024 * 1024 )) ;; +- *[pP]) echo $(( ${1%[pP]} * 1024 * 1024 * 1024 * 1024 )) ;; +- esac +-} +- +-get_mb_size_with_unit_() { +- case "$1" in +- *[mM]) echo $(( ${1%[mM]} )) ;; +- *[gG]) echo $(( ${1%[gG]} * 1024 )) ;; +- *[tT]) echo $(( ${1%[tT]} * 1024 * 1024 )) ;; +- *[pP]) echo $(( ${1%[pP]} * 1024 * 1024 * 1024 )) ;; +- esac +-} +- +-# Figure out largest possible extent size usable for VG +-# $1 physical size +-# $2 logical size +-get_largest_extent_size_() { +- local max=4 +- local i +- local d +- +- for i in 8 16 32 64 128 256 512 1024 2048 4096 ; do +- d=$(( $1 / i )) +- test $(( d * i )) -eq "$1" || break +- d=$(( $2 / i )) +- test $(( d * i )) -eq "$2" || break +- max=$i +- done +- echo "$max" +-} +- +-# detect LV on the given device +-# dereference device name if it is symbolic link +-detect_lv_() { +- local DEVICE=$1 +- local MAJOR +- local MINOR +- local SYSVOLUME +- local MAJORMINOR +- +- DEVICE=${1/#"${DM_DEV_DIR}/"/} +- DEVICE=$("$READLINK" $READLINK_E "$DM_DEV_DIR/$DEVICE") +- test -n "$DEVICE" || error "Cannot get readlink \"$1\"." +- RDEVICE=$DEVICE +- case "$RDEVICE" in +- # hardcoded /dev since udev does not create these entries elsewhere +- /dev/dm-[0-9]*) +- read -r <"/sys/block/${RDEVICE#/dev/}/dm/name" SYSVOLUME 2>&1 && DEVICE="$DM_DEV_DIR/mapper/$SYSVOLUME" +- read -r <"/sys/block/${RDEVICE#/dev/}/dev" MAJORMINOR 2>&1 || error "Cannot get major:minor for \"$DEVICE\"." +- MAJOR=${MAJORMINOR%%:*} +- MINOR=${MAJORMINOR##*:} +- ;; +- *) +- STAT=$(stat --format "MAJOR=\$((0x%t)) MINOR=\$((0x%T))" "$RDEVICE") +- test -n "$STAT" || error "Cannot get major:minor for \"$DEVICE\"." +- eval "$STAT" +- ;; +- esac +- +- eval "$(dmsetup info -c -j "$MAJOR" -m "$MINOR" -o uuid,name --noheadings --nameprefixes --separator ' ')" +-} +- +-# parse yaml config files into 'prefix_yaml_part_names=("value")' strings +-parse_yaml_() { +- local yaml_file=$1 +- local prefix=$2 +- local s +- local w +- local fs +- +- s='[[:space:]]*' +- w='[a-zA-Z0-9_.-]*' +- fs="$(echo @|tr @ '\034')" +- +- ( +- sed -ne '/^--/s|--||g; s|\"|\\\"|g; s/[[:space:]]*$//g;' \ +- -e 's/\$/\\\$/g' \ +- -e "/#.*[\"\']/!s| #.*||g; /^#/s|#.*||g;" \ +- -e "s|^\($s\)\($w\)$s:$s\"\(.*\)\"$s\$|\1$fs\2$fs\3|p" \ +- -e "s|^\($s\)\($w\)${s}[:-]$s\(.*\)$s\$|\1$fs\2$fs\3|p" | +- +- awk -F"$fs" '{ +- indent = length($1)/2; +- if (length($2) == 0) { conj[indent]="+";} else {conj[indent]="";} +- vname[indent] = $2; +- for (i in vname) {if (i > indent) {delete vname[i]}} +- if (length($3) > 0) { +- vn=""; for (i=0; i"$TEMPDIR/vdoconf.yml" +- +- VDONAME=$(awk -v DNAME="$DEVICE" '/.*VDOService$/ {VNAME=substr($1, 0, length($1) - 1)} /[[:space:]]*device:/ { if ($2 ~ DNAME) {print VNAME}}' "$TEMPDIR/vdoconf.yml") +- TRVDONAME=$(echo "$VDONAME" | tr '-' '_') +- +- # When VDO volume is 'active', check it's not mounted/being used +- eval "$(dmsetup info -c -o open "$VDONAME" --noheadings --nameprefixes || true)" +- test "${DM_OPEN:-0}" -eq 0 || error "Cannot converted VDO volume \"$VDONAME\" which is in use!" +- +- #parse_yaml_ "$TEMPDIR/vdoconf.yml" _ +- eval "$(parse_yaml_ "$TEMPDIR/vdoconf.yml" _ | grep "$TRVDONAME" | sed -e "s/_config_vdos_$TRVDONAME/vdo/g")" +- +- vdo_logicalSize=$(get_kb_size_with_unit_ "$vdo_logicalSize") +- vdo_physicalSize=$(get_kb_size_with_unit_ "$vdo_physicalSize") +- +- verbose "Going to convert physical sized VDO device $vdo_physicalSize KiB." +- verbose "With logical volume of size $vdo_logicalSize KiB." +- +- PARAMS=$(cat </dev/null 2>&1 || : %if %{enable_lvmpolld} %{_sbindir}/lvmpolld %endif +%{_sbindir}/lvm_import_vdo # Other files %defattr(444,root,root,-) @@ -340,7 +344,6 @@ systemctl start lvm2-lvmpolld.socket >/dev/null 2>&1 || : %{_sbindir}/pvresize %{_sbindir}/pvs %{_sbindir}/pvscan -%{_sbindir}/vdoimport %{_sbindir}/vgcfgbackup %{_sbindir}/vgcfgrestore %{_sbindir}/vgchange @@ -409,7 +412,7 @@ systemctl start lvm2-lvmpolld.socket >/dev/null 2>&1 || : %{_mandir}/man8/vgdisplay.8.gz %{_mandir}/man8/vgexport.8.gz %{_mandir}/man8/vgextend.8.gz -%{_mandir}/man8/vdoimport.8.gz +%{_mandir}/man8/lvm_import_vdo.8.gz %{_mandir}/man8/vgimport.8.gz %{_mandir}/man8/vgimportclone.8.gz %{_mandir}/man8/vgimportdevices.8.gz @@ -804,6 +807,12 @@ An extensive functional testsuite for LVM2. %endif %changelog +* Thu Aug 26 2021 Marian Csontos - 2.03.12-8 +- Rename vdoimport to lvm_import_vdo. + +* Wed Aug 11 2021 Marian Csontos - 2.03.12-7 +- Fix missing executable flag on vdoimport. + * Tue Aug 03 2021 Marian Csontos - 2.03.12-6 - Fix handling of pmspare by vgsplit, vgmerge and vgremove. - Fix detection of active components of external origin volume.