Gitweb:
http://git.fedorahosted.org/git/?p=lvm2.git;a=commitdiff;h=56c5ad7b194f5b...
Commit: 56c5ad7b194f5b991ae3835abca1c951450f34df
Parent: 64828d877edbf1907557d76e44eb86d00f7a1f3a
Author: Zdenek Kabelac <zkabelac(a)redhat.com>
AuthorDate: Mon Jul 7 22:33:31 2014 +0200
Committer: Zdenek Kabelac <zkabelac(a)redhat.com>
CommitterDate: Fri Jul 11 12:49:55 2014 +0200
lvconvert: snapshot prompts to confirm conversion
Since the type passed LV is changed and content of data detroyed,
query user with prompt to confirm this operation.
Also add a proper wiping of header.
Using '--yes' will skip this prompt:
lvconvert -s --yes vg/lv vg/lvcow
---
WHATS_NEW | 1 +
test/shell/lvconvert-snapshot.sh | 4 +++-
tools/lvconvert.c | 30 +++++++++++++++++++++++++-----
3 files changed, 29 insertions(+), 6 deletions(-)
diff --git a/WHATS_NEW b/WHATS_NEW
index dcaaf23..7891d76 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,6 @@
Version 2.02.108 -
=================================
+ Prompt for confirmation before change LV into a snapshot exception store.
Return proper error codes for some failing lvconvert funtions.
Add initial code to use cache tools (cache_check|dump|repair|restore).
Add "degraded" activation mode and make it the default.
diff --git a/test/shell/lvconvert-snapshot.sh b/test/shell/lvconvert-snapshot.sh
index f59bb7b..3d81573 100644
--- a/test/shell/lvconvert-snapshot.sh
+++ b/test/shell/lvconvert-snapshot.sh
@@ -25,6 +25,7 @@ lvcreate -L1 -s -n $lv3 $vg/$lv2
lvcreate -l1 -n $lv4 $vg
lvcreate -L1 -n $lv5 $vg
+lvcreate -L1 -n $lv6 $vg
not lvconvert -s $vg/$lv1 $vg/not_exist
@@ -52,6 +53,7 @@ not lvconvert -s $vg/$lv2 $vg/$lv4 2>&1 | tee err
grep "smaller" err
# This should pass
-lvconvert -s $vg/$lv2 $vg/$lv5
+lvconvert --yes -s $vg/$lv2 $vg/$lv5
+lvconvert --yes --type snapshot $vg/$lv2 $vg/$lv6
vgremove -f $vg
diff --git a/tools/lvconvert.c b/tools/lvconvert.c
index 62a9d4e..264b86c 100644
--- a/tools/lvconvert.c
+++ b/tools/lvconvert.c
@@ -2063,11 +2063,14 @@ static int _lvconvert_snapshot(struct cmd_context *cmd,
return 0;
}
- if (!lp->zero || !(lv->status & LVM_WRITE))
- log_warn("WARNING: \"%s\" not zeroed", lv->name);
- else if (!wipe_lv(lv, (struct wipe_params) { .do_zero = 1 })) {
- log_error("Aborting. Failed to wipe snapshot "
- "exception store.");
+ log_warn("WARNING: Converting logical volume %s to snapshot exception
store.",
+ display_lvname(lv));
+ log_warn("THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)");
+
+ if (!lp->yes &&
+ yes_no_prompt("Do you really want to convert %s? [y/n]: ",
+ display_lvname(lv)) == 'n') {
+ log_error("Conversion aborted.");
return 0;
}
@@ -2076,6 +2079,23 @@ static int _lvconvert_snapshot(struct cmd_context *cmd,
return 0;
}
+ if (!lp->zero || !(lv->status & LVM_WRITE))
+ log_warn("WARNING: \"%s\" not zeroed", lv->name);
+ else {
+ lv->status |= LV_TEMPORARY;
+ if (!activate_lv_local(cmd, lv) ||
+ !wipe_lv(lv, (struct wipe_params) { .do_zero = 1 })) {
+ log_error("Aborting. Failed to wipe snapshot exception store.");
+ return 0;
+ }
+ lv->status &= ~LV_TEMPORARY;
+ /* Deactivates cleared metadata LV */
+ if (!deactivate_lv_local(lv->vg->cmd, lv)) {
+ log_error("Failed to deactivate zeroed snapshot exception store.");
+ return 0;
+ }
+ }
+
if (!archive(lv->vg))
return_0;