mirror of
git://sourceware.org/git/lvm2.git
synced 2025-09-14 09:44:18 +03:00
lvconvert: reusing old cache pool metadata needs -Zn
When cache pool is reused for a new cached volume, there is normally no need to 'keep' old cache-pool metadata as this could cause major data lose. Unlike with 'lvcreate -H -LX --cachepool' conversion, this lvconvert path left the metadata unzeroed - partly for making easier some debugging, but this was rather a bug. So to keep possible reattach of 'unzeroed' metadata, user now has to use 'lvconvert -Zn' for such conversion. In this case the prompt will appear about possibe data loss and to proceed, user has to confirm such operation. Without -Zn metadata are wiped.
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
Version 2.02.162 -
|
Version 2.02.162 -
|
||||||
=================================
|
=================================
|
||||||
|
lvconvert reuse cachepool metadade now ONLY with -Zn and clear otherwise.
|
||||||
Enabled lvconvert --uncache to work with partial VG.
|
Enabled lvconvert --uncache to work with partial VG.
|
||||||
|
|
||||||
Version 2.02.161 - 15th July 2016
|
Version 2.02.161 - 15th July 2016
|
||||||
|
@@ -372,7 +372,7 @@ static int _read_pool_params(struct cmd_context *cmd, int *pargc, char ***pargv,
|
|||||||
} else {
|
} else {
|
||||||
if (arg_from_list_is_set(cmd, "is valid only with thin pools",
|
if (arg_from_list_is_set(cmd, "is valid only with thin pools",
|
||||||
discards_ARG, originname_ARG, thinpool_ARG,
|
discards_ARG, originname_ARG, thinpool_ARG,
|
||||||
zero_ARG, -1))
|
-1))
|
||||||
return_0;
|
return_0;
|
||||||
if (lp->thin) {
|
if (lp->thin) {
|
||||||
log_error("--thin requires --thinpool.");
|
log_error("--thin requires --thinpool.");
|
||||||
@@ -420,6 +420,7 @@ static int _read_pool_params(struct cmd_context *cmd, int *pargc, char ***pargv,
|
|||||||
|
|
||||||
} else if (arg_from_list_is_set(cmd, "is valid only with pools",
|
} else if (arg_from_list_is_set(cmd, "is valid only with pools",
|
||||||
poolmetadatasize_ARG, poolmetadataspare_ARG,
|
poolmetadatasize_ARG, poolmetadataspare_ARG,
|
||||||
|
zero_ARG,
|
||||||
-1))
|
-1))
|
||||||
return_0;
|
return_0;
|
||||||
|
|
||||||
@@ -2970,9 +2971,35 @@ static int _lvconvert_pool(struct cmd_context *cmd,
|
|||||||
if (!metadata_lv) {
|
if (!metadata_lv) {
|
||||||
if (arg_from_list_is_set(cmd, "is invalid with existing pool",
|
if (arg_from_list_is_set(cmd, "is invalid with existing pool",
|
||||||
chunksize_ARG, discards_ARG,
|
chunksize_ARG, discards_ARG,
|
||||||
zero_ARG, poolmetadatasize_ARG, -1))
|
poolmetadatasize_ARG, -1))
|
||||||
return_0;
|
return_0;
|
||||||
|
|
||||||
|
if (lp->thin &&
|
||||||
|
arg_from_list_is_set(cmd, "is invalid with existing thin pool",
|
||||||
|
zero_ARG, -1))
|
||||||
|
return_0;
|
||||||
|
|
||||||
|
if (lp->cache) {
|
||||||
|
/* Check is user has not requested -Zn */
|
||||||
|
if (!arg_int_value(cmd, zero_ARG, 1)) {
|
||||||
|
/* Note: requires rather deep know-how to skip zeroing
|
||||||
|
* so show major warnings */
|
||||||
|
log_warn("WARNING: Reusing old cache pool metadata %s to "
|
||||||
|
"for volume caching.",
|
||||||
|
display_lvname(pool_lv));
|
||||||
|
log_warn("THIS MAY DESTROY YOUR DATA (filesystem etc.)");
|
||||||
|
|
||||||
|
if (!lp->yes &&
|
||||||
|
yes_no_prompt("Do you really want to keep old metadata for "
|
||||||
|
"cache pool volume %s? [y/n]: ",
|
||||||
|
display_lvname(pool_lv)) == 'n') {
|
||||||
|
log_error("Conversion aborted.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
} else if (!wipe_cache_pool(pool_lv))
|
||||||
|
return_0;
|
||||||
|
}
|
||||||
|
|
||||||
if (lp->thin || lp->cache)
|
if (lp->thin || lp->cache)
|
||||||
/* already pool, can continue converting volume */
|
/* already pool, can continue converting volume */
|
||||||
return 1;
|
return 1;
|
||||||
|
Reference in New Issue
Block a user