mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-21 13:34:40 +03:00
lvconvert: disable lvmetad for repair
Repairing missing devices does not work reliably with lvmetad, so disable lvmetad before repair. A standard lvmetad refresh (pvscan --cache) will enable lvmetad again.
This commit is contained in:
parent
e5b6f2685a
commit
506d88a2ec
@ -25,6 +25,7 @@
|
||||
#define LVMETAD_DISABLE_REASON_LVM1 "LVM1"
|
||||
#define LVMETAD_DISABLE_REASON_DUPLICATES "DUPLICATES"
|
||||
#define LVMETAD_DISABLE_REASON_VGRESTORE "VGRESTORE"
|
||||
#define LVMETAD_DISABLE_REASON_REPAIR "REPAIR"
|
||||
|
||||
struct volume_group;
|
||||
|
||||
|
@ -203,8 +203,9 @@ struct vg_info {
|
||||
#define GLFL_DISABLE_REASON_LVM1 0x00000008
|
||||
#define GLFL_DISABLE_REASON_DUPLICATES 0x00000010
|
||||
#define GLFL_DISABLE_REASON_VGRESTORE 0x00000020
|
||||
#define GLFL_DISABLE_REASON_REPAIR 0x00000040
|
||||
|
||||
#define GLFL_DISABLE_REASON_ALL (GLFL_DISABLE_REASON_DIRECT | GLFL_DISABLE_REASON_LVM1 | GLFL_DISABLE_REASON_DUPLICATES | GLFL_DISABLE_REASON_VGRESTORE)
|
||||
#define GLFL_DISABLE_REASON_ALL (GLFL_DISABLE_REASON_DIRECT | GLFL_DISABLE_REASON_REPAIR | GLFL_DISABLE_REASON_LVM1 | GLFL_DISABLE_REASON_DUPLICATES | GLFL_DISABLE_REASON_VGRESTORE)
|
||||
|
||||
#define VGFL_INVALID 0x00000001
|
||||
|
||||
@ -2355,6 +2356,8 @@ static response set_global_info(lvmetad_state *s, request r)
|
||||
if ((reason = daemon_request_str(r, "disable_reason", NULL))) {
|
||||
if (strstr(reason, LVMETAD_DISABLE_REASON_DIRECT))
|
||||
reason_flags |= GLFL_DISABLE_REASON_DIRECT;
|
||||
if (strstr(reason, LVMETAD_DISABLE_REASON_REPAIR))
|
||||
reason_flags |= GLFL_DISABLE_REASON_REPAIR;
|
||||
if (strstr(reason, LVMETAD_DISABLE_REASON_LVM1))
|
||||
reason_flags |= GLFL_DISABLE_REASON_LVM1;
|
||||
if (strstr(reason, LVMETAD_DISABLE_REASON_DUPLICATES))
|
||||
@ -2420,6 +2423,7 @@ static response get_global_info(lvmetad_state *s, request r)
|
||||
if (s->flags & GLFL_DISABLE) {
|
||||
snprintf(reason, REASON_BUF_SIZE - 1, "%s%s%s%s",
|
||||
(s->flags & GLFL_DISABLE_REASON_DIRECT) ? LVMETAD_DISABLE_REASON_DIRECT "," : "",
|
||||
(s->flags & GLFL_DISABLE_REASON_REPAIR) ? LVMETAD_DISABLE_REASON_REPAIR "," : "",
|
||||
(s->flags & GLFL_DISABLE_REASON_LVM1) ? LVMETAD_DISABLE_REASON_LVM1 "," : "",
|
||||
(s->flags & GLFL_DISABLE_REASON_DUPLICATES) ? LVMETAD_DISABLE_REASON_DUPLICATES "," : "",
|
||||
(s->flags & GLFL_DISABLE_REASON_VGRESTORE) ? LVMETAD_DISABLE_REASON_VGRESTORE "," : "");
|
||||
|
3
lib/cache/lvmetad.c
vendored
3
lib/cache/lvmetad.c
vendored
@ -2874,6 +2874,9 @@ int lvmetad_is_disabled(struct cmd_context *cmd, const char **reason)
|
||||
} else if (strstr(reply_reason, LVMETAD_DISABLE_REASON_DIRECT)) {
|
||||
*reason = "the disable flag was set directly";
|
||||
|
||||
} else if (strstr(reply_reason, LVMETAD_DISABLE_REASON_REPAIR)) {
|
||||
*reason = "a repair command was run";
|
||||
|
||||
} else if (strstr(reply_reason, LVMETAD_DISABLE_REASON_LVM1)) {
|
||||
*reason = "LVM1 metadata was found";
|
||||
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include "label.h"
|
||||
#include "lvm-version.h"
|
||||
#include "lvmlockd.h"
|
||||
#include "lvmetad-client.h"
|
||||
|
||||
#include "stub.h"
|
||||
#include "last-path-component.h"
|
||||
@ -2777,11 +2778,18 @@ int lvm_run_command(struct cmd_context *cmd, int argc, char **argv)
|
||||
|
||||
if (!strcmp(cmd->fmt->name, FMT_LVM1_NAME) && lvmetad_used()) {
|
||||
log_warn("WARNING: Disabling lvmetad cache which does not support obsolete metadata.");
|
||||
lvmetad_set_disabled(cmd, "LVM1");
|
||||
lvmetad_set_disabled(cmd, LVMETAD_DISABLE_REASON_LVM1);
|
||||
log_warn("WARNING: Not using lvmetad because lvm1 format is used.");
|
||||
lvmetad_make_unused(cmd);
|
||||
}
|
||||
|
||||
if (cmd->command->command_enum == lvconvert_repair_pvs_or_thinpool_CMD) {
|
||||
log_warn("WARNING: Disabling lvmetad cache for repair command.");
|
||||
lvmetad_set_disabled(cmd, LVMETAD_DISABLE_REASON_REPAIR);
|
||||
log_warn("WARNING: Not using lvmetad because of repair.");
|
||||
lvmetad_make_unused(cmd);
|
||||
}
|
||||
|
||||
if (cmd->metadata_read_only &&
|
||||
!(cmd->cname->flags & PERMITTED_READ_ONLY)) {
|
||||
log_error("%s: Command not permitted while global/metadata_read_only "
|
||||
|
Loading…
Reference in New Issue
Block a user