From c1060e13a75b20699d59106de12ea4fc46356130 Mon Sep 17 00:00:00 2001 From: Mike Snitzer Date: Mon, 6 Jul 2009 19:13:26 +0000 Subject: [PATCH] Allow commandline sizes to be specified in terms of bytes and sectors. Update the man pages to document size units uniformly. --- WHATS_NEW | 2 ++ man/lvcreate.8.in | 6 +++--- man/lvextend.8.in | 4 ++-- man/lvreduce.8.in | 4 ++-- man/lvresize.8.in | 4 ++-- man/vgchange.8.in | 4 ++-- man/vgcreate.8.in | 4 ++-- tools/commands.h | 26 +++++++++++++------------- tools/lvmcmdline.c | 31 ++++++++++++++++++++++++------- 9 files changed, 52 insertions(+), 33 deletions(-) diff --git a/WHATS_NEW b/WHATS_NEW index f35d56b1e..5c8e6c29d 100644 --- a/WHATS_NEW +++ b/WHATS_NEW @@ -1,5 +1,7 @@ Version 2.02.49 - ================================ + Update the man pages to document size units uniformly. + Allow specifying commandline sizes in terms of bytes and sectors. Update 'md_chunk_alignment' to use stripe-width to align PV data area. Update test/t-inconsistent-metadata.sh to match new vg_read interface. Add lvmcache_init() to polldaemon initialization. diff --git a/man/lvcreate.8.in b/man/lvcreate.8.in index af3dc283c..001e01320 100644 --- a/man/lvcreate.8.in +++ b/man/lvcreate.8.in @@ -9,7 +9,7 @@ lvcreate \- create a logical volume in an existing volume group [\-h|\-?|\-\-help] [\-i|\-\-stripes Stripes [\-I|\-\-stripesize StripeSize]] {\-l|\-\-extents LogicalExtentsNumber[%{VG|PVS|FREE}] | - \-L|\-\-size LogicalVolumeSize[kKmMgGtT]} + \-L|\-\-size LogicalVolumeSize[bBsSkKmMgGtTpPeE]} [\-M|\-\-persistent y|n] [\-\-minor minor] [\-m|\-\-mirrors Mirrors [\-\-nosync] [\-\-mirrorlog {disk|core}] [\-\-corelog] [\-R|\-\-regionsize MirrorLogRegionSize]] @@ -23,7 +23,7 @@ VolumeGroupName [PhysicalVolumePath...] .br .B lvcreate {\-l|\-\-extents LogicalExtentsNumber[%{VG|FREE}] | - \-L|\-\-size LogicalVolumeSize[kKmMgGtT]} + \-L|\-\-size LogicalVolumeSize[bBsSkKmMgGtTpPeE]} [\-c|\-\-chunksize ChunkSize] \-n|\-\-name SnapshotLogicalVolumeName {{\-s|\-\-snapshot} @@ -76,7 +76,7 @@ free space in the Volume Group with the suffix %FREE, or of the remaining free space for the specified PhysicalVolume(s) with the suffix %PVS, .TP -.I \-L, \-\-size LogicalVolumeSize[kKmMgGtTpPeE] +.I \-L, \-\-size LogicalVolumeSize[bBsSkKmMgGtTpPeE] Gives the size to allocate for the new logical volume. A size suffix of K for kilobytes, M for megabytes, G for gigabytes, T for terabytes, P for petabytes diff --git a/man/lvextend.8.in b/man/lvextend.8.in index a97d35996..dcbd73698 100644 --- a/man/lvextend.8.in +++ b/man/lvextend.8.in @@ -7,7 +7,7 @@ lvextend \- extend the size of a logical volume [\-A|\-\-autobackup y|n] [\-d|\-\-debug] [\-h|\-?|\-\-help] [\-i|\-\-stripes Stripes [\-I|\-\-stripesize StripeSize]] {\-l|\-\-extents [+]LogicalExtentsNumber[%{VG|LV|PVS|FREE}] | -\-L|\-\-size [+]LogicalVolumeSize[kKmMgGtT]} +\-L|\-\-size [+]LogicalVolumeSize[bBsSkKmMgGtTpPeE]} [\-t|\-\-test] [\-v|\-\-verbose] LogicalVolumePath [PhysicalVolumePath...] .SH DESCRIPTION @@ -32,7 +32,7 @@ free space for the specified PhysicalVolume(s) with the suffix %PVS, or as a percentage of the remaining free space in the Volume Group with the suffix %FREE. .TP -.I \-L, \-\-size [+]LogicalVolumeSize[kKmMgGtTpPeE] +.I \-L, \-\-size [+]LogicalVolumeSize[bBsSkKmMgGtTpPeE] Extend or set the logical volume size in units of megabytes. A size suffix of M for megabytes, G for gigabytes, T for terabytes, P for petabytes diff --git a/man/lvreduce.8.in b/man/lvreduce.8.in index 4f5c35e7b..1f9827961 100644 --- a/man/lvreduce.8.in +++ b/man/lvreduce.8.in @@ -6,7 +6,7 @@ lvreduce \- reduce the size of a logical volume [\-A|\-\-autobackup y|n] [\-d|\-\-debug] [\-f|\-\-force] [\-h|\-?|\-\-help] {\-l|\-\-extents [\-]LogicalExtentsNumber[%{VG|LV|FREE}] | -\-L|\-\-size [\-]LogicalVolumeSize[kKmMgGtT]} +\-L|\-\-size [\-]LogicalVolumeSize[bBsSkKmMgGtTpPeE]} [\-t|\-\-test] [\-v|\-\-verbose] LogicalVolume[Path] .SH DESCRIPTION @@ -46,7 +46,7 @@ in the Volume Group with the suffix %VG or relative to the existing size of the Logical Volume with the suffix %LV or as a percentage of the remaining free space in the Volume Group with the suffix %FREE. .TP -.I \-L, \-\-size [\-]LogicalVolumeSize[kKmMgGtTpPeE] +.I \-L, \-\-size [\-]LogicalVolumeSize[bBsSkKmMgGtTpPeE] Reduce or set the logical volume size in units of megabyte by default. A size suffix of k for kilobyte, m for megabyte, g for gigabytes, t for terabytes, p for petabytes diff --git a/man/lvresize.8.in b/man/lvresize.8.in index 961d43069..64a4203b1 100644 --- a/man/lvresize.8.in +++ b/man/lvresize.8.in @@ -7,7 +7,7 @@ lvresize \- resize a logical volume [\-A|\-\-autobackup y|n] [\-d|\-\-debug] [\-h|\-?|\-\-help] [\-i|\-\-stripes Stripes [\-I|\-\-stripesize StripeSize]] {\-l|\-\-extents [+]LogicalExtentsNumber[%{VG|LV|PVS|FREE}] | -\-L|\-\-size [+]LogicalVolumeSize[kKmMgGtT]} +\-L|\-\-size [+]LogicalVolumeSize[bBsSkKmMgGtTpPeE]} [\-t|\-\-test] [\-v|\-\-verbose] LogicalVolumePath [PhysicalVolumePath...] .SH DESCRIPTION @@ -36,7 +36,7 @@ the remaining free space of the PhysicalVolumes on the command line with the suffix %PVS, or as a percentage of the remaining free space in the Volume Group with the suffix %FREE. .TP -.I \-L, \-\-size [+|-]LogicalVolumeSize[kKmMgGtTpPeE] +.I \-L, \-\-size [+|-]LogicalVolumeSize[bBsSkKmMgGtTpPeE] Change or set the logical volume size in units of megabytes. A size suffix of M for megabytes, G for gigabytes, T for terabytes, P for petabytes diff --git a/man/vgchange.8.in b/man/vgchange.8.in index 413339aab..441100ad3 100644 --- a/man/vgchange.8.in +++ b/man/vgchange.8.in @@ -24,7 +24,7 @@ vgchange \- change attributes of a volume group .IR MaxPhysicalVolumes ] .RB [ \-P | \-\-partial] .RB [ \-s | \-\-physicalextentsize -.IR PhysicalExtentSize [ \fBkKmMgGtT\fR ]] +.IR PhysicalExtentSize [ \fBbBsSkKmMgGtTpPeE\fR ]] .RB [ \-\-refresh] .RB [ -t | \-\-test] .RB [ \-v | \-\-verbose] @@ -108,7 +108,7 @@ for tool performance reasons, you should consider some use of \fB--metadatacopies 0\fP as described in \fBpvcreate(8)\fP. .TP -.BR \-s ", " \-\-physicalextentsize " " \fIPhysicalExtentSize\fR[\fBkKmMgGtT\fR] +.BR \-s ", " \-\-physicalextentsize " " \fIPhysicalExtentSize\fR[\fBbBsSkKmMgGtTpPeE\fR] Changes the physical extent size on physical volumes of this volume group. A size suffix (k for kilobytes up to t for terabytes) is optional, megabytes is the default if no suffix is present. diff --git a/man/vgcreate.8.in b/man/vgcreate.8.in index a53197e0d..6a89305e3 100644 --- a/man/vgcreate.8.in +++ b/man/vgcreate.8.in @@ -17,7 +17,7 @@ vgcreate \- create a volume group .RB [ -p | \-\-maxphysicalvolumes .IR MaxPhysicalVolumes ] .RB [ \-s | \-\-physicalextentsize -.IR PhysicalExtentSize [ \fBkKmMgGtT\fR ]] +.IR PhysicalExtentSize [ \fBbBsSkKmMgGtTpPeE\fR ]] .RB [ \-t | \-\-test ] .RB [ \-v | \-\-verbose ] .RB [ \-\-version ] @@ -66,7 +66,7 @@ for tool performance reasons, you should consider some use of \fB--metadatacopies 0\fP as described in \fBpvcreate(8)\fP. .TP -.BR \-s ", " \-\-physicalextentsize " " \fIPhysicalExtentSize\fR[\fBkKmMgGtT\fR] +.BR \-s ", " \-\-physicalextentsize " " \fIPhysicalExtentSize\fR[\fBbBsSkKmMgGtTpPeE\fR] Sets the physical extent size on physical volumes of this volume group. A size suffix (k for kilobytes up to t for terabytes) is optional, megabytes is the default if no suffix is present. diff --git a/tools/commands.h b/tools/commands.h index 1dfbb939c..8559799dc 100644 --- a/tools/commands.h +++ b/tools/commands.h @@ -19,7 +19,7 @@ xx(e2fsadm, "e2fsadm " "[-d|--debug] " "[-h|--help] " "[-n|--nofsck]" "\n" "\t{[-l|--extents] [+|-]LogicalExtentsNumber |" "\n" - "\t [-L|--size] [+|-]LogicalVolumeSize[kKmMgGtTpPeE]}" "\n" + "\t [-L|--size] [+|-]LogicalVolumeSize[bBsSkKmMgGtTpPeE]}" "\n" "\t[-t|--test] " "\n" "\t[-v|--verbose] " "\n" "\t[--version] " "\n" @@ -133,7 +133,7 @@ xx(lvcreate, "\t[-h|-?|--help]\n" "\t[-i|--stripes Stripes [-I|--stripesize StripeSize]]\n" "\t{-l|--extents LogicalExtentsNumber |\n" - "\t -L|--size LogicalVolumeSize[kKmMgGtTpPeE]}\n" + "\t -L|--size LogicalVolumeSize[bBsSkKmMgGtTpPeE]}\n" "\t[-M|--persistent {y|n}] [--major major] [--minor minor]\n" "\t[-m|--mirrors Mirrors [--nosync] [{--mirrorlog {disk|core}|--corelog}]]\n" "\t[-n|--name LogicalVolumeName]\n" @@ -159,7 +159,7 @@ xx(lvcreate, "\t[-h|-?|--help]\n" "\t[-i|--stripes Stripes [-I|--stripesize StripeSize]]\n" "\t{-l|--extents LogicalExtentsNumber[%{VG|LV|PVS|FREE}] |\n" - "\t -L|--size LogicalVolumeSize[kKmMgGtTpPeE]}\n" + "\t -L|--size LogicalVolumeSize[bBsSkKmMgGtTpPeE]}\n" "\t[-M|--persistent {y|n}] [--major major] [--minor minor]\n" "\t[-n|--name LogicalVolumeName]\n" "\t[-p|--permission {r|rw}]\n" @@ -228,7 +228,7 @@ xx(lvextend, "\t[-h|--help]\n" "\t[-i|--stripes Stripes [-I|--stripesize StripeSize]]\n" "\t{-l|--extents [+]LogicalExtentsNumber[%{VG|PVS|FREE}] |\n" - "\t -L|--size [+]LogicalVolumeSize[kKmMgGtTpPeE]}\n" + "\t -L|--size [+]LogicalVolumeSize[bBsSkKmMgGtTpPeE]}\n" "\t[-m|--mirrors Mirrors]\n" "\t[-n|--nofsck]\n" "\t[-r|--resizefs]\n" @@ -298,7 +298,7 @@ xx(lvreduce, "\t[-f|--force]\n" "\t[-h|--help]\n" "\t{-l|--extents [-]LogicalExtentsNumber[%{VG|LV|FREE}] |\n" - "\t -L|--size [-]LogicalVolumeSize[kKmMgGtTpPeE]}\n" + "\t -L|--size [-]LogicalVolumeSize[bBsSkKmMgGtTpPeE]}\n" "\t[-n|--nofsck]\n" "\t[-r|--resizefs]\n" "\t[-t|--test]\n" @@ -351,7 +351,7 @@ xx(lvresize, "\t[-h|--help]\n" "\t[-i|--stripes Stripes [-I|--stripesize StripeSize]]\n" "\t{-l|--extents [+|-]LogicalExtentsNumber[%{VG|LV|PVS|FREE}] |\n" - "\t -L|--size [+|-]LogicalVolumeSize[kKmMgGtTpPeE]}\n" + "\t -L|--size [+|-]LogicalVolumeSize[bBsSkKmMgGtTpPeE]}\n" "\t[-n|--nofsck]\n" "\t[-r|--resizefs]\n" "\t[-t|--test]\n" @@ -436,7 +436,7 @@ xx(pvresize, "pvresize " "\n" "\t[-d|--debug]" "\n" "\t[-h|-?|--help] " "\n" - "\t[--setphysicalvolumesize PhysicalVolumeSize[kKmMgGtTpPeE]" "\n" + "\t[--setphysicalvolumesize PhysicalVolumeSize[bBsSkKmMgGtTpPeE]" "\n" "\t[-t|--test] " "\n" "\t[-v|--verbose] " "\n" "\t[--version] " "\n" @@ -468,9 +468,9 @@ xx(pvcreate, "\t[--labelsector sector] " "\n" "\t[-M|--metadatatype 1|2]" "\n" "\t[--metadatacopies #copies]" "\n" - "\t[--metadatasize MetadataSize[kKmMgGtTpPeE]]" "\n" - "\t[--dataalignment Alignment[kKmMgGtTpPeE]]" "\n" - "\t[--setphysicalvolumesize PhysicalVolumeSize[kKmMgGtTpPeE]" "\n" + "\t[--metadatasize MetadataSize[bBsSkKmMgGtTpPeE]]" "\n" + "\t[--dataalignment Alignment[bBsSkKmMgGtTpPeE]]" "\n" + "\t[--setphysicalvolumesize PhysicalVolumeSize[bBsSkKmMgGtTpPeE]" "\n" "\t[-t|--test] " "\n" "\t[-u|--uuid uuid] " "\n" "\t[-v|--verbose] " "\n" @@ -683,7 +683,7 @@ xx(vgchange, "\t -x|--resizeable {y|n} |" "\n" "\t -l|--logicalvolume MaxLogicalVolumes |" "\n" "\t -p|--maxphysicalvolumes MaxPhysicalVolumes |" "\n" - "\t -s|--physicalextentsize PhysicalExtentSize[kKmMgGtTpPeE] |" "\n" + "\t -s|--physicalextentsize PhysicalExtentSize[bBsSkKmMgGtTpPeE] |" "\n" "\t --addtag Tag |\n" "\t --deltag Tag}\n" "\t[VolumeGroupName...]\n", @@ -713,7 +713,7 @@ xx(vgconvert, "\t[--labelsector sector] " "\n" "\t[-M|--metadatatype 1|2]" "\n" "\t[--metadatacopies #copies]" "\n" - "\t[--metadatasize MetadataSize[kKmMgGtTpPeE]]" "\n" + "\t[--metadatasize MetadataSize[bBsSkKmMgGtTpPeE]]" "\n" "\t[-t|--test] " "\n" "\t[-v|--verbose] " "\n" "\t[--version] " "\n" @@ -735,7 +735,7 @@ xx(vgcreate, "\t[-l|--maxlogicalvolumes MaxLogicalVolumes]" "\n" "\t[-M|--metadatatype 1|2] " "\n" "\t[-p|--maxphysicalvolumes MaxPhysicalVolumes] " "\n" - "\t[-s|--physicalextentsize PhysicalExtentSize[kKmMgGtTpPeE]] " "\n" + "\t[-s|--physicalextentsize PhysicalExtentSize[bBsSkKmMgGtTpPeE]] " "\n" "\t[-t|--test] " "\n" "\t[-v|--verbose]" "\n" "\t[--version] " "\n" diff --git a/tools/lvmcmdline.c b/tools/lvmcmdline.c index 0d4e230aa..7f5ba9901 100644 --- a/tools/lvmcmdline.c +++ b/tools/lvmcmdline.c @@ -239,9 +239,10 @@ static int _size_arg(struct cmd_context *cmd __attribute((unused)), struct arg * { char *ptr; int i; - static const char *suffixes = "kmgtpe"; + static const char *suffixes = "kmgtpebs"; char *val; double v; + uint64_t v_tmp, adjustment; a->percent = PERCENT_NONE; @@ -272,13 +273,29 @@ static int _size_arg(struct cmd_context *cmd __attribute((unused)), struct arg * if (suffixes[i] == tolower((int) *ptr)) break; - if (i < 0) + if (i < 0) { return 0; - - while (i-- > 0) - v *= 1024; - - v *= 2; + } else if (i == 7) { + /* sectors */ + v = v; + } else if (i == 6) { + /* bytes */ + v_tmp = (uint64_t) v; + adjustment = v_tmp % 512; + if (adjustment) { + v_tmp += (512 - adjustment); + log_error("Size is not a multiple of 512. " + "Try using %lu or %lu.", + v_tmp - 512, v_tmp); + return 0; + } + v /= 512; + } else { + /* all other units: kmgtpe */ + while (i-- > 0) + v *= 1024; + v *= 2; + } } else v *= factor;