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

Modify lvremove to prompt for removal if LV active on other cluster nodes.

Add '-f' to vgremove to force removal of VG even if LVs exist.
Update vgremove man page for '-f'.
This commit is contained in:
Dave Wysochanski 2007-08-28 16:14:49 +00:00
parent e4e02000ba
commit f603fe64bd
5 changed files with 79 additions and 30 deletions

View File

@ -1,6 +1,8 @@
Version 2.02.29 -
==================================
Modify lvremove to prompt for removal if LV active on other cluster nodes.
Add '-f' to vgremove to force removal of VG even if LVs exist.
Version 2.02.28 - 24th August 2007
==================================
Fix clvmd logging so you can get lvm-level debugging out of it.

View File

@ -1839,37 +1839,49 @@ int lv_remove_single(struct cmd_context *cmd, struct logical_volume *lv,
/* FIXME Ensure not referred to by another existing LVs */
if (lv_info(cmd, lv, &info, 1)) {
if (info.open_count) {
log_error("Can't remove open logical volume \"%s\"",
/*
* If we can't get information about the LV from the kernel, or
* someone has the LV device open, fail.
*/
if (!lv_info(cmd, lv, &info, 1)) {
log_error("Unable to obtain status for logical volume \"%s\"",
lv->name);
return 0;
}
if (info.open_count) {
log_error("Can't remove open logical volume \"%s\"",
lv->name);
return 0;
}
/*
* Check for confirmation prompts in the following cases:
* 1) Clustered VG, and some remote nodes have the LV active
* 2) Non-clustered VG, but LV active locally
*/
if ((vg_status(vg) & CLUSTERED) && !activate_lv_excl(cmd, lv) &&
(force == PROMPT)) {
if (yes_no_prompt("Logical volume \"%s\" is active on other "
"cluster nodes. Really remove? [y/n]: ",
lv->name) == 'n') {
log_print("Logical volume \"%s\" not removed",
lv->name);
return 0;
}
if (info.exists && (force == PROMPT)) {
if (yes_no_prompt("Do you really want to remove active "
"logical volume \"%s\"? [y/n]: ",
lv->name) == 'n') {
log_print("Logical volume \"%s\" not removed",
lv->name);
return 0;
}
}
} else if (info.exists && (force == PROMPT)) {
if (yes_no_prompt("Do you really want to remove active "
"logical volume \"%s\"? [y/n]: ",
lv->name) == 'n') {
log_print("Logical volume \"%s\" not removed",
lv->name);
return 0;
}
}
if (!archive(vg))
return 0;
/* If the VG is clustered then make sure no-one else is using the LV
we are about to remove */
if (vg_status(vg) & CLUSTERED) {
if (!activate_lv_excl(cmd, lv)) {
log_error("Can't get exclusive access to volume \"%s\"",
lv->name);
return 0;
}
}
/* FIXME Snapshot commit out of sequence if it fails after here? */
if (!deactivate_lv(cmd, lv)) {
log_error("Unable to deactivate logical volume \"%s\"",

View File

@ -249,6 +249,20 @@ int vg_rename(struct cmd_context *cmd, struct volume_group *vg,
return 1;
}
static int remove_lvs_in_vg(struct cmd_context *cmd,
struct volume_group *vg,
force_t force)
{
struct lv_list *lvl;
list_iterate_items(lvl, &vg->lvs)
if (!lv_remove_single(cmd, lvl->lv, force))
return 0;
return 1;
}
/* FIXME: remove redundant vg_name */
int vg_remove_single(struct cmd_context *cmd, const char *vg_name,
struct volume_group *vg, int consistent,
force_t force __attribute((unused)))
@ -268,6 +282,19 @@ int vg_remove_single(struct cmd_context *cmd, const char *vg_name,
if (!vg_check_status(vg, EXPORTED_VG))
return 0;
if (vg->lv_count) {
if ((force == PROMPT) &&
(yes_no_prompt("Do you really want to remove volume "
"group \"%s\" containing %d "
"logical volumes? [y/n]: ",
vg_name, vg->lv_count) == 'n')) {
log_print("Volume group \"%s\" not removed", vg_name);
return 0;
}
if (!remove_lvs_in_vg(cmd, vg, force))
return 0;
}
if (vg->lv_count) {
log_error("Volume group \"%s\" still contains %d "
"logical volume(s)", vg_name, vg->lv_count);

View File

@ -3,17 +3,24 @@
vgremove \- remove a volume group
.SH SYNOPSIS
.B vgremove
[\-d/\-\-debug] [\-h/\-?/\-\-help] [\-t/\-\-test] [\-v/\-\-verbose]
[\-d/\-\-debug] [\-f/\-\-force] [\-h/\-?/\-\-help]
[\-t/\-\-test] [\-v/\-\-verbose]
VolumeGroupName [VolumeGroupName...]
.SH DESCRIPTION
vgremove allows you to remove one or more volume groups.
The volume group(s) must not have any logical volumes allocated:
Remove them first with \fBlvremove\fP. If one or more physical
volumes in the volume group are lost, consider
\fBvgreduce --removemissing\fP to make the volume group
If one or more physical volumes in the volume group are lost,
consider \fBvgreduce --removemissing\fP to make the volume group
metadata consistent again.
.sp
If there are logical volumes that exist in the volume group,
a prompt will be given to confirm removal. You can override
the prompt with \fB-f\fP.
.SH OPTIONS
See \fBlvm\fP for common options.
.TP
.BR \-f ", " \-\-force
Force the removal of any logical volumes on the volume group
without confirmation.
.SH SEE ALSO
.BR lvm (8),
.BR lvremove (8),

View File

@ -807,13 +807,14 @@ xx(vgremove,
"Remove volume group(s)",
"vgremove\n"
"\t[-d|--debug]\n"
"\t[-f|--force]\n"
"\t[-h|--help]\n"
"\t[-t|--test]\n"
"\t[-v|--verbose]\n"
"\t[--version]" "\n"
"\tVolumeGroupName [VolumeGroupName...]\n",
test_ARG)
force_ARG, test_ARG)
xx(vgrename,
"Rename a volume group",