1
0
mirror of git://sourceware.org/git/lvm2.git synced 2024-12-21 13:34:40 +03:00

thin: add thin_repair and thin_dump options

Add new configure lvm.conf options for binaries thin_repair
and thin_dump.

Those are part of device-mapper-persistent-data package
and will be used for recovery of thin_pool.
This commit is contained in:
Zdenek Kabelac 2013-07-31 14:38:10 +02:00
parent ea605d1ec7
commit 22fc80982a
7 changed files with 186 additions and 4 deletions

View File

@ -1,5 +1,7 @@
Version 2.02.100 -
================================
Add --with-thin-repair and --with-thin-dump configure options.
Add lvm.conf thin_repair/dump_executable and thin_repair_options.
Require 1.9 thin pool target version for online thin pool metadata resize.
Ignore previous LV seg with alloc contiguous & cling when num stripes varies.
Fix segfault if devices/global_filter is not specified correctly.

View File

@ -561,11 +561,29 @@ global {
# The thin tools are available as part of the device-mapper-persistent-data
# package from https://github.com/jthornber/thin-provisioning-tools.
#
thin_check_executable = "@THIN_CHECK_CMD@"
# thin_check_executable = "@THIN_CHECK_CMD@"
# String with options passed with thin_check command. By default,
# option '-q' is for quiet output.
thin_check_options = [ "-q" ]
# Array of string options passed with thin_check command. By default,
# option "-q" is for quiet output.
# With thin_check version 2.1 or newer you can add "--ignore-non-fatal-errors"
# to let it pass through ignoreable errors and fix them later.
#
# thin_check_options = [ "-q" ]
# Full path of the utility called to repair a thin metadata device
# is in a state that allows it to be used.
# Each time a thin pool needs repair this utility is executed.
# See thin_check_executable how to obtain binaries.
#
# thin_repair_executable = "@THIN_REPAIR_CMD@"
# Array of extra string options passed with thin_repair command.
# thin_repair_options = [ "" ]
# Full path of the utility called to dump thin metadata content.
# See thin_check_executable how to obtain binaries.
#
# thin_dump_executable = "@THIN_DUMP_CMD@"
# If set, given features are not used by thin driver.
# This can be helpful not just for testing, but i.e. allows to avoid
@ -574,6 +592,8 @@ global {
# block_size
# discards
# discards_non_power_2
# external_origin
# metadata_resize
#
# thin_disabled_features = [ "discards", "block_size" ]
}

124
configure vendored
View File

@ -730,6 +730,8 @@ PKGCONFIGINIT_CFLAGS
PKG_CONFIG_LIBDIR
PKG_CONFIG_PATH
PKG_CONFIG
THIN_REPAIR_CMD
THIN_DUMP_CMD
THIN_CHECK_CMD
POW_LIB
LIBOBJS
@ -826,6 +828,8 @@ with_raid
with_replicators
with_thin
with_thin_check
with_thin_dump
with_thin_repair
enable_readline
enable_realtime
enable_ocf
@ -1598,6 +1602,8 @@ Optional Packages:
--with-thin=TYPE thin provisioning support: internal/shared/none
[[TYPE=none]]
--with-thin-check=PATH thin_check tool: [[autodetect]]
--with-thin-dump=PATH thin_dump tool: [[autodetect]]
--with-thin-repair=PATH thin_repair tool: [[autodetect]]
--with-ocfdir=DIR install OCF files in DIR
[[PREFIX/lib/ocf/resource.d/lvm2]]
--with-default-pid-dir=PID_DIR
@ -7108,6 +7114,110 @@ fi
test -z "$THIN_CHECK_CMD" && as_fn_error $? "thin_check not found in path $PATH" "$LINENO" 5
fi
# Check whether --with-thin-dump was given.
if test "${with_thin_dump+set}" = set; then :
withval=$with_thin_dump; THIN_DUMP_CMD=$withval
else
THIN_DUMP_CMD="autodetect"
fi
# Empty means a config way to ignore thin checking
if test "$THIN_DUMP_CMD" = "autodetect"; then
# Extract the first word of "thin_dump", so it can be a program name with args.
set dummy thin_dump; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_THIN_DUMP_CMD+:} false; then :
$as_echo_n "(cached) " >&6
else
case $THIN_DUMP_CMD in
[\\/]* | ?:[\\/]*)
ac_cv_path_THIN_DUMP_CMD="$THIN_DUMP_CMD" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_THIN_DUMP_CMD="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
THIN_DUMP_CMD=$ac_cv_path_THIN_DUMP_CMD
if test -n "$THIN_DUMP_CMD"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $THIN_DUMP_CMD" >&5
$as_echo "$THIN_DUMP_CMD" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
test -z "$THIN_DUMP_CMD" && as_fn_error $? "thin_dump not found in path $PATH" "$LINENO" 5
fi
# Check whether --with-thin-repair was given.
if test "${with_thin_repair+set}" = set; then :
withval=$with_thin_repair; THIN_REPAIR_CMD=$withval
else
THIN_REPAIR_CMD="autodetect"
fi
# Empty means a config way to ignore thin checking
if test "$THIN_REPAIR_CMD" = "autodetect"; then
# Extract the first word of "thin_repair", so it can be a program name with args.
set dummy thin_repair; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if ${ac_cv_path_THIN_REPAIR_CMD+:} false; then :
$as_echo_n "(cached) " >&6
else
case $THIN_REPAIR_CMD in
[\\/]* | ?:[\\/]*)
ac_cv_path_THIN_REPAIR_CMD="$THIN_REPAIR_CMD" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
ac_cv_path_THIN_REPAIR_CMD="$as_dir/$ac_word$ac_exec_ext"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
THIN_REPAIR_CMD=$ac_cv_path_THIN_REPAIR_CMD
if test -n "$THIN_REPAIR_CMD"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $THIN_REPAIR_CMD" >&5
$as_echo "$THIN_REPAIR_CMD" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
test -z "$THIN_REPAIR_CMD" && as_fn_error $? "thin_repair not found in path $PATH" "$LINENO" 5
fi
;;
esac
@ -7118,6 +7228,18 @@ _ACEOF
cat >>confdefs.h <<_ACEOF
#define THIN_DUMP_CMD "$THIN_DUMP_CMD"
_ACEOF
cat >>confdefs.h <<_ACEOF
#define THIN_REPAIR_CMD "$THIN_REPAIR_CMD"
_ACEOF
################################################################################
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable readline" >&5
$as_echo_n "checking whether to enable readline... " >&6; }
@ -10806,6 +10928,8 @@ LVM_LIBAPI=`echo "$VER" | $AWK -F '[()]' '{print $2}'`

View File

@ -424,12 +424,36 @@ case "$THIN" in
AC_PATH_PROG(THIN_CHECK_CMD, thin_check)
test -z "$THIN_CHECK_CMD" && AC_MSG_ERROR(thin_check not found in path $PATH)
fi
AC_ARG_WITH(thin-dump,
AC_HELP_STRING([--with-thin-dump=PATH],
[thin_dump tool: [[autodetect]]]),
THIN_DUMP_CMD=$withval, THIN_DUMP_CMD="autodetect")
# Empty means a config way to ignore thin checking
if test "$THIN_DUMP_CMD" = "autodetect"; then
AC_PATH_PROG(THIN_DUMP_CMD, thin_dump)
test -z "$THIN_DUMP_CMD" && AC_MSG_ERROR(thin_dump not found in path $PATH)
fi
AC_ARG_WITH(thin-repair,
AC_HELP_STRING([--with-thin-repair=PATH],
[thin_repair tool: [[autodetect]]]),
THIN_REPAIR_CMD=$withval, THIN_REPAIR_CMD="autodetect")
# Empty means a config way to ignore thin checking
if test "$THIN_REPAIR_CMD" = "autodetect"; then
AC_PATH_PROG(THIN_REPAIR_CMD, thin_repair)
test -z "$THIN_REPAIR_CMD" && AC_MSG_ERROR(thin_repair not found in path $PATH)
fi
;;
esac
AC_DEFINE_UNQUOTED([THIN_CHECK_CMD], ["$THIN_CHECK_CMD"],
[The path to 'thin_check', if available.])
AC_DEFINE_UNQUOTED([THIN_DUMP_CMD], ["$THIN_DUMP_CMD"],
[The path to 'thin_dump', if available.])
AC_DEFINE_UNQUOTED([THIN_REPAIR_CMD], ["$THIN_REPAIR_CMD"],
[The path to 'thin_repair', if available.])
################################################################################
dnl -- Disable readline
@ -1598,6 +1622,8 @@ AC_SUBST(STATIC_LINK)
AC_SUBST(TESTING)
AC_SUBST(THIN)
AC_SUBST(THIN_CHECK_CMD)
AC_SUBST(THIN_DUMP_CMD)
AC_SUBST(THIN_REPAIR_CMD)
AC_SUBST(UDEV_LIBS)
AC_SUBST(UDEV_PC)
AC_SUBST(UDEV_RULES)

View File

@ -160,6 +160,9 @@ cfg(global_use_lvmetad_CFG, "use_lvmetad", global_CFG_SECTION, 0, CFG_TYPE_BOOL,
cfg(global_thin_check_executable_CFG, "thin_check_executable", global_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, THIN_CHECK_CMD, vsn(2, 2, 94), NULL)
cfg_array(global_thin_check_options_CFG, "thin_check_options", global_CFG_SECTION, 0, CFG_TYPE_STRING, "#S" DEFAULT_THIN_CHECK_OPTIONS, vsn(2, 2, 96), NULL)
cfg_array(global_thin_disabled_features_CFG, "thin_disabled_features", global_CFG_SECTION, 0, CFG_TYPE_STRING, "#S", vsn(2, 2, 99), NULL)
cfg(global_thin_dump_executable_CFG, "thin_dump_executable", global_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, THIN_DUMP_CMD, vsn(2, 2, 100), NULL)
cfg(global_thin_repair_executable_CFG, "thin_repair_executable", global_CFG_SECTION, CFG_ALLOW_EMPTY, CFG_TYPE_STRING, THIN_REPAIR_CMD, vsn(2, 2, 100), NULL)
cfg_array(global_thin_repair_options_CFG, "thin_repair_options", global_CFG_SECTION, 0, CFG_TYPE_STRING, "#S" DEFAULT_THIN_REPAIR_OPTIONS, vsn(2, 2, 100), NULL)
cfg(activation_checks_CFG, "checks", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_ACTIVATION_CHECKS, vsn(2, 2, 86), NULL)
cfg(activation_udev_sync_CFG, "udev_sync", activation_CFG_SECTION, 0, CFG_TYPE_BOOL, DEFAULT_UDEV_SYNC, vsn(2, 2, 51), NULL)

View File

@ -66,6 +66,7 @@
#define DEFAULT_BACKGROUND_POLLING 1
#define DEFAULT_THIN_CHECK_OPTIONS "-q"
#define DEFAULT_THIN_REPAIR_OPTIONS ""
#define DEFAULT_THIN_POOL_METADATA_REQUIRE_SEPARATE_PVS 0
#define DEFAULT_THIN_POOL_MAX_METADATA_SIZE (16 * 1024 * 1024) /* KB */
#define DEFAULT_THIN_POOL_MIN_METADATA_SIZE 2048 /* KB */

View File

@ -546,9 +546,15 @@
/* The path to 'thin_check', if available. */
#undef THIN_CHECK_CMD
/* The path to 'thin_dump', if available. */
#undef THIN_DUMP_CMD
/* Define to 1 to include built-in support for thin provisioning. */
#undef THIN_INTERNAL
/* The path to 'thin_repair', if available. */
#undef THIN_REPAIR_CMD
/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
#undef TIME_WITH_SYS_TIME