summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMike Snitzer <snitzer@redhat.com>2010-08-12 04:08:59 +0000
committerMike Snitzer <snitzer@redhat.com>2010-08-12 04:08:59 +0000
commitdff224669d075625d4d5210c9808b6c22a4830ba (patch)
tree5ef1670e7f78df2afe400d526a2dc840ffdd1a3f
parentdc39d2a66e4dfaa9fd1d751eb5b1d3e532cfcc16 (diff)
downloadlvm2-dff224669d075625d4d5210c9808b6c22a4830ba.tar.gz
lvm2-dff224669d075625d4d5210c9808b6c22a4830ba.tar.xz
lvm2-dff224669d075625d4d5210c9808b6c22a4830ba.zip
Require --restorefile when using pvcreate --uuid.
Introduce --norestorefile to allow user to override the new requirement. This can also be overridden with "devices/require_restorefile_with_uuid" in lvm.conf -- however the default is 1. Signed-off-by: Mike Snitzer <snitzer@redhat.com>
-rw-r--r--WHATS_NEW2
-rw-r--r--doc/example.conf.in3
-rw-r--r--lib/config/defaults.h1
-rw-r--r--man/pvcreate.8.in9
-rwxr-xr-xtest/t-covercmd.sh2
-rwxr-xr-xtest/t-pvcreate-operation.sh11
-rw-r--r--test/t-vgcfgbackup-usage.sh4
-rw-r--r--tools/args.h1
-rw-r--r--tools/commands.h6
-rw-r--r--tools/pvcreate.c10
10 files changed, 39 insertions, 10 deletions
diff --git a/WHATS_NEW b/WHATS_NEW
index 8e8c3e8e..91367363 100644
--- a/WHATS_NEW
+++ b/WHATS_NEW
@@ -1,5 +1,7 @@
Version 2.02.73 -
================================
+ Add --norestorefile option to pvcreate.
+ Require --restorefile when using pvcreate --uuid.
Recognise and give preference to md device partitions (blkext major).
Never scan internal LVM devices.
Split-mirror operations were ignoring user-specified PVs.
diff --git a/doc/example.conf.in b/doc/example.conf.in
index 850b7e23..73832d98 100644
--- a/doc/example.conf.in
+++ b/doc/example.conf.in
@@ -130,6 +130,9 @@ devices {
# Set this to 1 to skip such devices. This should only be needed
# in recovery situations.
ignore_suspended_devices = 0
+
+ # Allow use of pvcreate --uuid without requiring --restorefile.
+ require_restorefile_with_uuid = 1
}
# This section that allows you to configure the nature of the
diff --git a/lib/config/defaults.h b/lib/config/defaults.h
index 3d8881ca..dd9897da 100644
--- a/lib/config/defaults.h
+++ b/lib/config/defaults.h
@@ -30,6 +30,7 @@
#define DEFAULT_MD_COMPONENT_DETECTION 1
#define DEFAULT_MD_CHUNK_ALIGNMENT 1
#define DEFAULT_IGNORE_SUSPENDED_DEVICES 1
+#define DEFAULT_REQUIRE_RESTOREFILE_WITH_UUID 1
#define DEFAULT_DATA_ALIGNMENT_OFFSET_DETECTION 1
#define DEFAULT_DATA_ALIGNMENT_DETECTION 1
diff --git a/man/pvcreate.8.in b/man/pvcreate.8.in
index 16a608d3..cb100494 100644
--- a/man/pvcreate.8.in
+++ b/man/pvcreate.8.in
@@ -17,6 +17,7 @@ pvcreate \- initialize a disk or partition for use by LVM
.RB [ \-\-dataalignment alignment ]
.RB [ \-\-dataalignmentoffset alignment_offset ]
.RB [ \-\-restorefile file ]
+.RB [ \-\-norestorefile ]
.RB [ \-\-setphysicalvolumesize size ]
.RB [ \-u | \-\-uuid uuid ]
.RB [ \-\-version ]
@@ -60,7 +61,9 @@ Specify the uuid for the device.
Without this option, \fBpvcreate\fP generates a random uuid.
All of your physical volumes must have unique uuids.
You need to use this option before restoring a backup of LVM metadata
-onto a replacement device - see \fBvgcfgrestore\fP(8).
+onto a replacement device - see \fBvgcfgrestore\fP(8). As such, use of
+\fB--restorefile\fP is compulsory unless the \fB--norestorefile\fP is
+used.
.TP
.BR \-y ", " \-\-yes
Answer yes to all questions.
@@ -138,6 +141,10 @@ the same place and not get overwritten by new metadata. This provides
a mechanism to upgrade the metadata format or to add/remove metadata
areas. Use with care. See also \fBvgconvert\fP(8).
.TP
+.BR \-\-norestorefile
+In conjunction with \fB--uuid\fP, this allows a uuid to be specified
+without also requiring that a backup of the metadata be provided.
+.TP
.BR \-\-labelsector " sector"
By default the PV is labelled with an LVM2 identifier in its second
sector (sector 1). This lets you use a different sector near the
diff --git a/test/t-covercmd.sh b/test/t-covercmd.sh
index 9697606f..358a93ef 100755
--- a/test/t-covercmd.sh
+++ b/test/t-covercmd.sh
@@ -30,7 +30,7 @@ pvcreate $dev1
pvcreate --metadatacopies 0 $dev2
pvcreate --metadatacopies 0 $dev3
pvcreate $dev4
-pvcreate -u $TEST_UUID --metadatacopies 0 $dev5
+pvcreate --norestorefile -u $TEST_UUID --metadatacopies 0 $dev5
vgcreate -c n $vg $devs
lvcreate -n $lv -l 5 -i5 -I256 $vg
diff --git a/test/t-pvcreate-operation.sh b/test/t-pvcreate-operation.sh
index a9d1a421..2c94696f 100755
--- a/test/t-pvcreate-operation.sh
+++ b/test/t-pvcreate-operation.sh
@@ -95,17 +95,20 @@ uuid2=freddy-fred-fred-fred-fred-fred-fredie
bogusuuid=fred
# pvcreate rejects uuid option with less than 32 characters
-not pvcreate --uuid $bogusuuid $dev1
+not pvcreate --norestorefile --uuid $bogusuuid $dev1
+
+# pvcreate rejects uuid option without restorefile
+not pvcreate --uuid $uuid1 $dev1
# pvcreate rejects uuid already in use
-pvcreate --uuid $uuid1 $dev1
-not pvcreate --uuid $uuid1 $dev2
+pvcreate --norestorefile --uuid $uuid1 $dev1
+not pvcreate --norestorefile --uuid $uuid1 $dev2
# pvcreate rejects non-existent file given with restorefile
not pvcreate --uuid $uuid1 --restorefile $backupfile $dev1
# pvcreate rejects restorefile with uuid not found in file
-pvcreate --uuid $uuid1 $dev1
+pvcreate --norestorefile --uuid $uuid1 $dev1
vgcfgbackup -f $backupfile
not pvcreate --uuid $uuid2 --restorefile $backupfile $dev2
diff --git a/test/t-vgcfgbackup-usage.sh b/test/t-vgcfgbackup-usage.sh
index e1e94b37..d7b04325 100644
--- a/test/t-vgcfgbackup-usage.sh
+++ b/test/t-vgcfgbackup-usage.sh
@@ -37,6 +37,6 @@ pvcreate -ff -y $dev1
pvcreate -ff -y $dev2
vgcfgbackup -f "$(pwd)/backup.$$" $vg
sed 's/flags = \[\"MISSING\"\]/flags = \[\]/' "$(pwd)/backup.$$" > "$(pwd)/backup.$$1"
-pvcreate -ff -y -u $pv1_uuid $dev1
-pvcreate -ff -y -u $pv2_uuid $dev2
+pvcreate -ff -y --norestorefile -u $pv1_uuid $dev1
+pvcreate -ff -y --norestorefile -u $pv2_uuid $dev2
vgcfgrestore -f "$(pwd)/backup.$$1" $vg
diff --git a/tools/args.h b/tools/args.h
index a23c46cb..91d7b095 100644
--- a/tools/args.h
+++ b/tools/args.h
@@ -27,6 +27,7 @@ arg(vgmetadatacopies_ARG, '\0', "vgmetadatacopies", metadatacopies_arg, 0)
arg(metadatacopies_ARG, '\0', "metadatacopies", metadatacopies_arg, 0)
arg(metadatasize_ARG, '\0', "metadatasize", size_mb_arg, 0)
arg(metadataignore_ARG, '\0', "metadataignore", yes_no_arg, 0)
+arg(norestorefile_ARG, '\0', "norestorefile", NULL, 0)
arg(restorefile_ARG, '\0', "restorefile", string_arg, 0)
arg(labelsector_ARG, '\0', "labelsector", int_arg, 0)
arg(driverloaded_ARG, '\0', "driverloaded", yes_no_arg, 0)
diff --git a/tools/commands.h b/tools/commands.h
index d9e13f42..1c113201 100644
--- a/tools/commands.h
+++ b/tools/commands.h
@@ -497,6 +497,7 @@ xx(pvcreate,
"Initialize physical volume(s) for use by LVM",
0,
"pvcreate " "\n"
+ "\t[--norestorefile]\n"
"\t[--restorefile file]\n"
"\t[-d|--debug]" "\n"
"\t[-f[f]|--force [--force]] " "\n"
@@ -517,8 +518,9 @@ xx(pvcreate,
"\tPhysicalVolume [PhysicalVolume...]\n",
dataalignment_ARG, dataalignmentoffset_ARG, force_ARG, test_ARG,
- labelsector_ARG, metadatatype_ARG, metadatacopies_ARG, pvmetadatacopies_ARG,
- metadatasize_ARG, metadataignore_ARG, physicalvolumesize_ARG,
+ labelsector_ARG, metadatatype_ARG, metadatacopies_ARG,
+ metadatasize_ARG, metadataignore_ARG, norestorefile_ARG,
+ physicalvolumesize_ARG, pvmetadatacopies_ARG,
restorefile_ARG, uuidstr_ARG, yes_ARG, zero_ARG)
xx(pvdata,
diff --git a/tools/pvcreate.c b/tools/pvcreate.c
index df7664b5..23ff02fa 100644
--- a/tools/pvcreate.c
+++ b/tools/pvcreate.c
@@ -36,6 +36,16 @@ static int pvcreate_restore_params_validate(struct cmd_context *cmd,
return 0;
}
+ if (!arg_count(cmd, restorefile_ARG) && arg_count(cmd, uuidstr_ARG)) {
+ if (!arg_count(cmd, norestorefile_ARG) &&
+ find_config_tree_bool(cmd,
+ "devices/require_restorefile_with_uuid",
+ DEFAULT_REQUIRE_RESTOREFILE_WITH_UUID)) {
+ log_error("--restorefile is required with --uuid");
+ return 0;
+ }
+ }
+
if (arg_count(cmd, uuidstr_ARG) && argc != 1) {
log_error("Can only set uuid on one volume at once");
return 0;