mirror of
git://sourceware.org/git/lvm2.git
synced 2024-12-22 17:35:59 +03:00
o sync tool changes for backup stuff.
This commit is contained in:
parent
0083f30af5
commit
5f7cfa3fa9
@ -21,52 +21,52 @@ static void _not_written(const char *cmd)
|
||||
log_err("The text format is lacking an implementation for '%s'", cmd);
|
||||
}
|
||||
|
||||
struct list *_get_vgs(struct format_instance *fi)
|
||||
static struct list *_get_vgs(struct format_instance *fi)
|
||||
{
|
||||
_not_written("_get_vgs");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct list *_get_pvs(struct format_instance *fi)
|
||||
static struct list *_get_pvs(struct format_instance *fi)
|
||||
{
|
||||
_not_written("_get_vgs");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct physical_volume *_pv_read(struct format_instance *fi,
|
||||
const char *pv_name)
|
||||
static struct physical_volume *_pv_read(struct format_instance *fi,
|
||||
const char *pv_name)
|
||||
{
|
||||
_not_written("_get_vgs");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int _pv_setup(struct format_instance *fi, struct physical_volume *pv,
|
||||
struct volume_group *vg)
|
||||
static int _pv_setup(struct format_instance *fi, struct physical_volume *pv,
|
||||
struct volume_group *vg)
|
||||
{
|
||||
_not_written("_get_vgs");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _pv_write(struct format_instance *fi, struct physical_volume *pv)
|
||||
static int _pv_write(struct format_instance *fi, struct physical_volume *pv)
|
||||
{
|
||||
_not_written("_get_vgs");
|
||||
return 0;
|
||||
}
|
||||
|
||||
int _vg_setup(struct format_instance *fi, struct volume_group *vg)
|
||||
static int _vg_setup(struct format_instance *fi, struct volume_group *vg)
|
||||
{
|
||||
_not_written("_get_vgs");
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct volume_group *_vg_read(struct format_instance *fi,
|
||||
const char *vg_name)
|
||||
static struct volume_group *_vg_read(struct format_instance *fi,
|
||||
const char *vg_name)
|
||||
{
|
||||
_not_written("_get_vgs");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int _vg_write(struct format_instance *fi, struct volume_group *vg)
|
||||
static int _vg_write(struct format_instance *fi, struct volume_group *vg)
|
||||
{
|
||||
FILE *fp;
|
||||
char *file = (char *) fi->private;
|
||||
@ -85,7 +85,7 @@ int _vg_write(struct format_instance *fi, struct volume_group *vg)
|
||||
return 1;
|
||||
}
|
||||
|
||||
void _destroy(struct format_instance *fi)
|
||||
static void _destroy(struct format_instance *fi)
|
||||
{
|
||||
pool_free(fi->cmd->mem, fi);
|
||||
}
|
||||
|
@ -21,6 +21,7 @@ top_srcdir = @top_srcdir@
|
||||
VPATH = @srcdir@
|
||||
|
||||
SOURCES=\
|
||||
archive.c \
|
||||
lvchange.c \
|
||||
lvcreate.c \
|
||||
lvdisplay.c \
|
||||
|
@ -4,8 +4,13 @@
|
||||
* This file is released under the GPL.
|
||||
*/
|
||||
|
||||
#include "log.h"
|
||||
#include "archive.h"
|
||||
#include "dbg_malloc.h"
|
||||
#include "format-text.h"
|
||||
#include "lvm-string.h"
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
static struct {
|
||||
int enabled;
|
||||
@ -24,7 +29,7 @@ int archive_init(const char *dir,
|
||||
}
|
||||
|
||||
_archive_params.keep_days = keep_days;
|
||||
_archive_params.keep_number = keep_number;
|
||||
_archive_params.keep_number = keep_min;
|
||||
_archive_params.enabled = 1;
|
||||
return 1;
|
||||
}
|
||||
@ -100,7 +105,7 @@ int backup_init(const char *dir)
|
||||
void backup_exit(void)
|
||||
{
|
||||
dbg_free(_backup_params.dir);
|
||||
memset(&backup_params, 0, sizeof(_backup_params));
|
||||
memset(&_backup_params, 0, sizeof(_backup_params));
|
||||
}
|
||||
|
||||
void backup_enable(int flag)
|
||||
|
@ -7,18 +7,22 @@
|
||||
#ifndef _LVM_TOOL_ARCHIVE_H
|
||||
#define _LVM_TOOL_ARCHIVE_H
|
||||
|
||||
#include "metadata.h"
|
||||
|
||||
/*
|
||||
* There are two operations that come under the
|
||||
* general area of backups. 'Archiving' occurs just
|
||||
* before a volume group configuration is changed.
|
||||
* The user may configure when archived files are expired.
|
||||
* Typically archives will be stored in /etc/lvm/archive.
|
||||
* general area of backups. 'Archiving' occurs
|
||||
* just before a volume group configuration is
|
||||
* changed. The user may configure when archived
|
||||
* files are expired. Typically archives will be
|
||||
* stored in /etc/lvm/archive.
|
||||
*
|
||||
* A 'backup' is a redundant copy of the *current*
|
||||
* volume group configuration. As such it should
|
||||
* be taken just after the volume group is
|
||||
* changed. Only 1 backup file will exist.
|
||||
* Typically backups will be stored in /etc/lvm/backups.
|
||||
* Typically backups will be stored in
|
||||
* /etc/lvm/backups.
|
||||
*/
|
||||
|
||||
int archive_init(const char *dir,
|
||||
@ -31,8 +35,7 @@ int archive(struct volume_group *vg);
|
||||
int backup_init(const char *dir);
|
||||
void backup_exit(void);
|
||||
|
||||
void backup_enable(void);
|
||||
void backup_disable(void);
|
||||
void backup_enable(int flag);
|
||||
int backup(struct volume_group *vg);
|
||||
|
||||
#endif
|
||||
|
29
tools/defaults.h
Normal file
29
tools/defaults.h
Normal file
@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright (C) 2001 Sistina Software (UK) Limited.
|
||||
*
|
||||
* This file is released under the GPL.
|
||||
*/
|
||||
|
||||
#ifndef _LVM_DEFAULTS_H
|
||||
#define _LVM_DEFAULTS_H
|
||||
|
||||
|
||||
#define DEFAULT_SYS_DIR "/etc/lvm"
|
||||
|
||||
#define DEFAULT_ARCHIVE_FLAG 1
|
||||
#define DEFAULT_BACKUP_FLAG 1
|
||||
|
||||
#define DEFAULT_ARCHIVE_SUBDIR "archive"
|
||||
#define DEFAULT_BACKUP_SUBDIR "backup"
|
||||
|
||||
/*
|
||||
* FIXME: these are deliberately low for the beta
|
||||
* series to encourage testing.
|
||||
*/
|
||||
#define DEFAULT_ARCHIVE_DAYS 7
|
||||
#define DEFAULT_ARCHIVE_NUMBER 5
|
||||
|
||||
#define DEFAULT_DEV_DIR "/dev"
|
||||
|
||||
|
||||
#endif /* _LVM_DEFAULTS_H */
|
@ -120,7 +120,7 @@ static int lvchange_permission(struct logical_volume *lv)
|
||||
if (!fid->ops->vg_write(fid, lv->vg))
|
||||
return 0;
|
||||
|
||||
autobackup(lv->vg);
|
||||
backup(lv->vg);
|
||||
|
||||
log_very_verbose("Updating permissions for %s in kernel", lv->name);
|
||||
if (!lv_update_write_access(lv))
|
||||
@ -158,7 +158,7 @@ static int lvchange_availability(struct logical_volume *lv)
|
||||
lv->name);
|
||||
if (!fid->ops->vg_write(fid, lv->vg))
|
||||
return 0;
|
||||
autobackup(lv->vg);
|
||||
backup(lv->vg);
|
||||
}
|
||||
|
||||
if ((lv_stat & ACTIVE) && (active & ACTIVE))
|
||||
@ -222,7 +222,7 @@ static int lvchange_contiguous(struct logical_volume *lv)
|
||||
if (!fid->ops->vg_write(fid, lv->vg))
|
||||
return 0;
|
||||
|
||||
autobackup(lv->vg);
|
||||
backup(lv->vg);
|
||||
|
||||
return 1;
|
||||
}
|
||||
@ -254,7 +254,7 @@ static int lvchange_readahead(struct logical_volume *lv)
|
||||
if (!fid->ops->vg_write(fid, lv->vg))
|
||||
return 0;
|
||||
|
||||
autobackup(lv->vg);
|
||||
backup(lv->vg);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
@ -225,7 +225,7 @@ int lvcreate(int argc, char **argv)
|
||||
if (!fid->ops->vg_write(fid, vg))
|
||||
return ECMD_FAILED;
|
||||
|
||||
autobackup(vg);
|
||||
backup(vg);
|
||||
|
||||
log_print("Logical volume %s created", lv->name);
|
||||
|
||||
|
94
tools/lvm.c
94
tools/lvm.c
@ -5,6 +5,8 @@
|
||||
*/
|
||||
|
||||
#include "tools.h"
|
||||
#include "archive.h"
|
||||
#include "defaults.h"
|
||||
|
||||
#include <assert.h>
|
||||
#include <getopt.h>
|
||||
@ -52,6 +54,10 @@ static int _dump_filter;
|
||||
static int _interactive;
|
||||
static FILE *_log;
|
||||
|
||||
/*
|
||||
* This structure only contains those options that
|
||||
* can have a default and per command setting.
|
||||
*/
|
||||
struct config_info {
|
||||
int debug;
|
||||
int verbose;
|
||||
@ -70,15 +76,12 @@ static struct config_info _current_settings;
|
||||
*
|
||||
* o The lvm configuration (lvm.conf)
|
||||
* o The persistent filter cache (.cache)
|
||||
* o Volume group backups (backup/)
|
||||
* o Volume group backups (/backup)
|
||||
* o Archive of old vg configurations (/archive)
|
||||
*/
|
||||
static char _sys_dir[PATH_MAX] = "/etc/lvm";
|
||||
static char _backup_dir[PATH_MAX];
|
||||
static char _dev_dir[PATH_MAX];
|
||||
|
||||
#define DEFAULT_DEV_DIR "/dev"
|
||||
|
||||
|
||||
/* static functions */
|
||||
static void register_commands(void);
|
||||
static struct command *find_command(const char *name);
|
||||
@ -672,6 +675,64 @@ static void __init_log(struct config_file *cf)
|
||||
_default_settings.test = find_config_int(cf->root, "log/test", '/', 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* '_sys_dir' must have been set before calling this.
|
||||
*/
|
||||
static int _init_backup(struct config_file *cf)
|
||||
{
|
||||
int days, min;
|
||||
char default_dir[PATH_MAX];
|
||||
const char *dir;
|
||||
|
||||
/* set up archiving */
|
||||
_default_settings.archive =
|
||||
find_config_bool(cmd->cf->root, "backup/archive", '/',
|
||||
DEFAULT_ARCHIVE_FLAG);
|
||||
|
||||
days = find_config_int(cmd->cf->root, "backup/retain_days", '/',
|
||||
DEFAULT_ARCHIVE_DAYS);
|
||||
|
||||
min = find_config_int(cmd->cf->root, "backup/retain_min", '/',
|
||||
DEFAULT_ARCHIVE_NUMBER);
|
||||
|
||||
if (lvm_snprintf(default_dir, sizeof(default_dir), "%s/%s", _sys_dir,
|
||||
DEFAULT_ARCHIVE_SUBDIR) == -1) {
|
||||
log_err("Couldn't create default archive path '%s/%s'.",
|
||||
_sys_dir, DEFAULT_ARCHIVE_SUBDIR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
dir = find_config_str(cmd->cf->root, "backup/archive_dir", '/',
|
||||
default_dir);
|
||||
|
||||
if (!archive_init(dir, days, min)) {
|
||||
log_debug("backup_init failed.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* set up the backup */
|
||||
_default_settings.backup =
|
||||
find_config_bool(cmd->cf->root, "backup/backup", '/',
|
||||
DEFAULT_BACKUP_FLAG);
|
||||
|
||||
if (lvm_snprintf(default_dir, sizeof(default_dir), "%s/%s", _sys_dir,
|
||||
DEFAULT_BACKUP_SUBDIR) == -1) {
|
||||
log_err("Couldn't create default backup path '%s/%s'.",
|
||||
_sys_dir, DEFAULT_BACKUP_SUBDIR);
|
||||
return 0;
|
||||
}
|
||||
|
||||
dir = find_config_str(cmd->cf->root, "backup/backup_dir", '/',
|
||||
default_dir);
|
||||
|
||||
if (!backup_init(dir)) {
|
||||
log_debug("backup_init failed.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int dev_cache_setup(struct config_file *cf)
|
||||
{
|
||||
struct config_node *cn;
|
||||
@ -851,27 +912,8 @@ static int init(void)
|
||||
|
||||
dm_log_init(print_log);
|
||||
|
||||
if (!*strncpy(_backup_dir,
|
||||
find_config_str(cmd->cf->root, "backup/dir", '/', ""),
|
||||
sizeof(_backup_dir)) &&
|
||||
*_sys_dir &&
|
||||
lvm_snprintf(_backup_dir, sizeof(_backup_dir), "%s/backup",
|
||||
_sys_dir) < 0) {
|
||||
log_error("Backup directory given in config file too long");
|
||||
if (!_init_backup(cmd->cf))
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!create_dir(_backup_dir))
|
||||
return 0;
|
||||
|
||||
_backup_days = find_config_int(cmd->cf->root, "backup/days", '/',
|
||||
_backup_days);
|
||||
|
||||
_backup_number = find_config_int(cmd->cf->root, "backup/keep", '/',
|
||||
_backup_number);
|
||||
|
||||
_backup_auto = find_config_int(cmd->cf->root, "backup/auto", '/',
|
||||
_backup_auto);
|
||||
|
||||
if (!dev_cache_setup(cmd->cf))
|
||||
return 0;
|
||||
@ -889,7 +931,7 @@ static int init(void)
|
||||
if (!(fid = create_lvm1_format(cmd)))
|
||||
return 0;
|
||||
|
||||
use_settings(_default_settings);
|
||||
_use_settings(&_default_settings);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -87,7 +87,7 @@ static int lvremove_single(struct logical_volume *lv)
|
||||
if (!fid->ops->vg_write(fid, vg))
|
||||
return ECMD_FAILED;
|
||||
|
||||
autobackup(vg);
|
||||
backup(vg);
|
||||
|
||||
log_print("logical volume %s successfully removed", lv->name);
|
||||
return 0;
|
||||
|
@ -122,7 +122,7 @@ int lvrename(int argc, char **argv)
|
||||
return ECMD_FAILED;
|
||||
}
|
||||
|
||||
autobackup(lv->vg);
|
||||
backup(lv->vg);
|
||||
|
||||
/* FIXME Update symlink. */
|
||||
lv_reactivate(lv);
|
||||
|
@ -345,7 +345,7 @@ int lvresize(int argc, char **argv)
|
||||
if (!fid->ops->vg_write(fid, vg))
|
||||
return ECMD_FAILED;
|
||||
|
||||
autobackup(vg);
|
||||
backup(vg);
|
||||
|
||||
/* FIXME Ensure it always displays errors? */
|
||||
if (!lv_reactivate(lv))
|
||||
|
@ -139,7 +139,7 @@ int pvchange_single(struct physical_volume *pv)
|
||||
"volume group %s", pv_name, vg->name);
|
||||
return 0;
|
||||
}
|
||||
autobackup(vg);
|
||||
backup(vg);
|
||||
} else {
|
||||
if (!(fid->ops->pv_write(fid, pv))) {
|
||||
log_error("Failed to store physical volume %s",
|
||||
|
109
tools/toollib.c
109
tools/toollib.c
@ -8,115 +8,6 @@
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
static int _autobackup;
|
||||
static char _backup_dir[PATH_MAX];
|
||||
static int _keep_days; /* keep for at least this number of days */
|
||||
static int _keep_number; /* keep at least this number of backups */
|
||||
|
||||
/*
|
||||
* Determine whether or not to do autobackup.
|
||||
* Cmd line overrides environment variable which in turn overrides config file
|
||||
*/
|
||||
int archive_init(const char *backup_dir, int keep_days, int keep_number,
|
||||
int autobackup)
|
||||
{
|
||||
char *lvm_autobackup;
|
||||
|
||||
if (lvm_snprintf(_backup_dir, sizeof(_backup_dir),
|
||||
"%s", backup_dir) < 0) {
|
||||
log_error("Backup directory name too long.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
_keep_days = keep_days;
|
||||
_keep_number = keep_number;
|
||||
_autobackup = autobackup; /* Config file setting */
|
||||
|
||||
if (arg_count(autobackup_ARG)) {
|
||||
_autobackup = arg_int_value(autobackup_ARG, 0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
lvm_autobackup = getenv("LVM_AUTOBACKUP");
|
||||
if (!lvm_autobackup)
|
||||
return 1;
|
||||
|
||||
log_verbose("Setting autobackup from environment (LVM_AUTOBACKUP)");
|
||||
if (!strcasecmp(lvm_autobackup, "no"))
|
||||
_autobackup = 0;
|
||||
else if (strcasecmp(lvm_autobackup, "yes")) {
|
||||
log_error("Environment variable LVM_AUTOBACKUP has "
|
||||
"invalid value \"%s\"!", lvm_autobackup);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int __backup_old(struct volume_group *vg)
|
||||
{
|
||||
int r;
|
||||
struct pool *old;
|
||||
struct format_instance *backer;
|
||||
|
||||
old = vg->cmd->mem;
|
||||
|
||||
/*
|
||||
* Create a temporary pool for this, I
|
||||
* doubt it's used but the backup code has
|
||||
* the right to expect it.
|
||||
*/
|
||||
if (!(vg->cmd->mem = pool_create(1024))) {
|
||||
stack;
|
||||
vg->cmd->mem = old;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!(backer = backup_format_create(vg->cmd, _backup_dir,
|
||||
_keep_days, _keep_number))) {
|
||||
log_error("Couldn't create backup object.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!(r = backer->ops->vg_write(backer, vg)))
|
||||
stack;
|
||||
|
||||
pool_destroy(vg->cmd->mem);
|
||||
vg->cmd->mem = old;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
/*
|
||||
* This backs up a volume group that is about to have it's .
|
||||
*/
|
||||
int auto_backup(struct volume_group *vg)
|
||||
{
|
||||
if (!_autobackup || !*_backup_dir) {
|
||||
log_print("WARNING: You don't have an automatic backup of %s",
|
||||
vg->name);
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (test_mode()) {
|
||||
log_print("Test mode: Skipping automatic backup");
|
||||
return 1;
|
||||
}
|
||||
|
||||
log_print("Creating automatic backup of volume group \"%s\" ...",
|
||||
vg->name);
|
||||
|
||||
if (!__autobackup(vg)) {
|
||||
log_error("Autobackup failed.");
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int backup_new
|
||||
|
||||
|
||||
int create_dir(const char *dir)
|
||||
{
|
||||
struct stat info;
|
||||
|
@ -20,15 +20,6 @@
|
||||
#ifndef _LVM_LVM_H
|
||||
#define _LVM_LVM_H
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
#include "pool.h"
|
||||
#include "dbg_malloc.h"
|
||||
#include "list.h"
|
||||
@ -49,6 +40,16 @@
|
||||
#include "format-text.h"
|
||||
#include "toollib.h"
|
||||
#include "activate.h"
|
||||
#include "archive.h"
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdlib.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <limits.h>
|
||||
|
||||
#define CMD_LEN 256
|
||||
#define MAX_ARGS 64
|
||||
|
@ -43,7 +43,7 @@ static int vg_backup_single(const char *vg_name)
|
||||
|
||||
} else {
|
||||
/* just use the normal backup code */
|
||||
backup_enable(); /* force a backup */
|
||||
backup_enable(1); /* force a backup */
|
||||
if (!backup(vg)) {
|
||||
stack;
|
||||
return ECMD_FAILED;
|
||||
|
@ -117,7 +117,7 @@ void vgchange_available(struct volume_group *vg)
|
||||
if (!fid->ops->vg_write(fid, vg))
|
||||
return;
|
||||
|
||||
autobackup(vg);
|
||||
backup(vg);
|
||||
|
||||
if (available && (lv_open = activate_lvs_in_vg(vg)))
|
||||
log_verbose("Activated %d logical volumes in "
|
||||
@ -155,7 +155,7 @@ void vgchange_allocation(struct volume_group *vg)
|
||||
if (!fid->ops->vg_write(fid, vg))
|
||||
return;
|
||||
|
||||
autobackup(vg);
|
||||
backup(vg);
|
||||
|
||||
log_print("Volume group %s successfully changed", vg->name);
|
||||
|
||||
@ -207,7 +207,7 @@ void vgchange_logicalvolume(struct volume_group *vg)
|
||||
if (!fid->ops->vg_write(fid, vg))
|
||||
return;
|
||||
|
||||
autobackup(vg);
|
||||
backup(vg);
|
||||
|
||||
log_print("Volume group %s successfully changed", vg->name);
|
||||
|
||||
|
@ -88,7 +88,7 @@ int vgcreate(int argc, char **argv)
|
||||
if (!fid->ops->vg_write(fid, vg))
|
||||
return ECMD_FAILED;
|
||||
|
||||
autobackup(vg);
|
||||
backup(vg);
|
||||
|
||||
log_print("Volume group %s successfully created", vg->name);
|
||||
|
||||
|
@ -75,7 +75,7 @@ int vgextend(int argc, char **argv)
|
||||
if (!fid->ops->vg_write(fid, vg))
|
||||
return ECMD_FAILED;
|
||||
|
||||
autobackup(vg);
|
||||
backup(vg);
|
||||
|
||||
log_print("Volume group '%s' successfully extended", vg_name);
|
||||
|
||||
|
@ -146,7 +146,7 @@ int vgmerge_single(const char *vg_name_to, const char *vg_name_from)
|
||||
|
||||
/* FIXME Remove /dev/vgfrom */
|
||||
|
||||
autobackup(vg_to);
|
||||
backup(vg_to);
|
||||
|
||||
log_print("Volume group %s successfully merged into %s",
|
||||
vg_from->name, vg_to->name);
|
||||
|
@ -130,7 +130,7 @@ static int vgreduce_single(struct volume_group *vg, struct physical_volume *pv)
|
||||
return ECMD_FAILED;
|
||||
}
|
||||
|
||||
autobackup(vg);
|
||||
backup(vg);
|
||||
|
||||
log_print("Removed %s from volume group %s", name, vg->name);
|
||||
|
||||
|
@ -74,7 +74,7 @@ static int vgremove_single(const char *vg_name)
|
||||
}
|
||||
}
|
||||
|
||||
autobackup(vg);
|
||||
backup(vg);
|
||||
|
||||
if (!ret)
|
||||
log_print("Volume group %s successfully removed", vg_name);
|
||||
|
@ -120,7 +120,7 @@ int vgrename(int argc, char **argv)
|
||||
|
||||
/******* FIXME Any LV things to update? */
|
||||
|
||||
autobackup(vg_old);
|
||||
backup(vg_old);
|
||||
|
||||
log_print("Volume group %s successfully renamed to %s",
|
||||
vg_name_old, vg_name_new);
|
||||
|
Loading…
Reference in New Issue
Block a user