lvm返回后,在lvm2_main里执行:
lvm_register_commands()又是一个似曾相识的构架:
在commands.h中,xx了好多种命令:
- cmd->argv = argv;
- lvm_register_commands();
- void lvm_register_commands(void)
- {
- #define xx(a, b, c, d...) _register_command(# a, a, b, c, ## d, /
- driverloaded_ARG, /
- debug_ARG, help_ARG, help2_ARG, /
- version_ARG, verbose_ARG, /
- quiet_ARG, config_ARG, -1);
- #include "commands.h"
- #undef xx
- }
- xx(dumpconfig,
- "Dump active configuration",
- 0,
- "dumpconfig "
- "/t[-f|--file filename] " "/n"
- "[ConfigurationVariable...]/n",
- file_ARG)
- xx(formats,
- "List available metadata formats",
- 0,
- "formats/n")
- xx(help,
- "Display help for commands",
- 0,
- "help <command>" "/n")
- /*********
- xx(lvactivate,
- "Activate logical volume on given partition(s)",
- "lvactivate "
- "/t[-d|--debug]/n"
- "/t[-h|--help]/n"
- "/t[-v|--verbose]/n"
- "Logical Volume(s)/n")
- ***********/
- xx(lvchange,
- "Change the attributes of logical volume(s)",
- CACHE_VGMETADATA,
- "lvchange/n"
- "/t[-A|--autobackup y|n]/n"
- "/t[-a|--available [e|l]y|n]/n"
- "/t[--addtag Tag]/n"
- "/t[--alloc AllocationPolicy]/n"
- "/t[-C|--contiguous y|n]/n"
- "/t[-d|--debug]/n"
- "/t[--deltag Tag]/n"
- "/t[-f|--force]/n"
- "/t[-h|--help]/n"
- "/t[--ignorelockingfailure]/n"
- "/t[--ignoremonitoring]/n"
- "/t[--monitor {y|n}]/n"
- "/t[-M|--persistent y|n] [--major major] [--minor minor]/n"
- "/t[-P|--partial] " "/n"
- "/t[-p|--permission r|rw]/n"
- "/t[-r|--readahead ReadAheadSectors|auto|none]/n"
- "/t[--refresh]/n"
- "/t[--resync]/n"
- "/t[-t|--test]/n"
- "/t[-v|--verbose]/n"
- "/t[-y|--yes]/n"
- "/t[--version]" "/n"
- "/tLogicalVolume[Path] [LogicalVolume[Path]...]/n",
- alloc_ARG, autobackup_ARG, available_ARG, contiguous_ARG, force_ARG,
- ignorelockingfailure_ARG, ignoremonitoring_ARG, major_ARG, minor_ARG,
- monitor_ARG, partial_ARG, permission_ARG, persistent_ARG, readahead_ARG,
- resync_ARG, refresh_ARG, addtag_ARG, deltag_ARG, test_ARG, yes_ARG)
- xx(lvconvert,
- "Change logical volume layout",
- 0,
- "lvconvert "
- "[-m|--mirrors Mirrors [{--mirrorlog {disk|core}|--corelog}]]/n"
- "/t[-R|--regionsize MirrorLogRegionSize]/n"
- "/t[--alloc AllocationPolicy]/n"
- "/t[-b|--background]/n"
- "/t[-d|--debug]/n"
- "/t[-h|-?|--help]/n"
- "/t[-i|--interval seconds]/n"
- "/t[-v|--verbose]/n"
- "/t[--version]" "/n"
- "/tLogicalVolume[Path] [PhysicalVolume[Path]...]/n/n"
- "lvconvert "
- "[-s|--snapshot]/n"
- "/t[-c|--chunksize]/n"
- "/t[-d|--debug]/n"
- "/t[-h|-?|--help]/n"
- "/t[-v|--verbose]/n"
- "/t[-Z|--zero {y|n}]/n"
- "/t[--version]" "/n"
- "/tOriginalLogicalVolume[Path] SnapshotLogicalVolume[Path]/n",
- alloc_ARG, background_ARG, chunksize_ARG, corelog_ARG, interval_ARG,
- mirrorlog_ARG, mirrors_ARG, regionsize_ARG, snapshot_ARG, test_ARG, zero_ARG)
- xx(lvcreate,
- "Create a logical volume",
- 0,
- "lvcreate " "/n"
- "/t[-A|--autobackup {y|n}]/n"
- "/t[--addtag Tag]/n"
- "/t[--alloc AllocationPolicy]/n"
- "/t[-C|--contiguous {y|n}]/n"
- "/t[-d|--debug]/n"
- "/t[-h|-?|--help]/n"
- "/t[-i|--stripes Stripes [-I|--stripesize StripeSize]]/n"
- "/t{-l|--extents LogicalExtentsNumber |/n"
- "/t -L|--size LogicalVolumeSize[kKmMgGtTpPeE]}/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"
- "/t[-p|--permission {r|rw}]/n"
- "/t[-r|--readahead ReadAheadSectors|auto|none]/n"
- "/t[-R|--regionsize MirrorLogRegionSize]/n"
- "/t[-t|--test]/n"
- "/t[--type VolumeType]/n"
- "/t[-v|--verbose]/n"
- "/t[-Z|--zero {y|n}]/n"
- "/t[--version]/n"
- "/tVolumeGroupName [PhysicalVolumePath...]/n/n"
- "lvcreate -s|--snapshot/n"
- "/t[-c|--chunksize]/n"
- "/t[-A|--autobackup {y|n}]/n"
- "/t[--addtag Tag]/n"
- "/t[--alloc AllocationPolicy]/n"
- "/t[-C|--contiguous {y|n}]/n"
- "/t[-d|--debug]/n"
- "/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[-M|--persistent {y|n}] [--major major] [--minor minor]/n"
- "/t[-n|--name LogicalVolumeName]/n"
- "/t[-p|--permission {r|rw}]/n"
- "/t[-r|--readahead ReadAheadSectors|auto|none]/n"
- "/t[-t|--test]/n"
- "/t[-v|--verbose]/n"
- "/t[--version]/n"
- "/tOriginalLogicalVolume[Path] [PhysicalVolumePath...]/n/n",
- addtag_ARG, alloc_ARG, autobackup_ARG, chunksize_ARG, contiguous_ARG,
- corelog_ARG, extents_ARG, major_ARG, minor_ARG, mirrorlog_ARG, mirrors_ARG,
- name_ARG, nosync_ARG, permission_ARG, persistent_ARG, readahead_ARG,
- regionsize_ARG, size_ARG, snapshot_ARG, stripes_ARG, stripesize_ARG,
- test_ARG, type_ARG, zero_ARG)
- xx(lvdisplay,
- "Display information about a logical volume",
- 0,
- "lvdisplay/n"
- "/t[-a|--all]/n"
- "/t[-c|--colon]/n"
- "/t[-d|--debug]/n"
- "/t[-h|--help]/n"
- "/t[--ignorelockingfailure]/n"
- "/t[-m|--maps]/n"
- "/t[--nosuffix]/n"
- "/t[-P|--partial] " "/n"
- "/t[--units hsbkmgtHKMGT]/n"
- "/t[-v|--verbose]/n"
- "/t[--version]" "/n"
- "/t[LogicalVolume[Path] [LogicalVolume[Path]...]]/n"
- "/n"
- "lvdisplay --columns|-C/n"
- "/t[--aligned]/n"
- "/t[-a|--all]/n"
- "/t[-d|--debug]/n"
- "/t[-h|--help]/n"
- "/t[--ignorelockingfailure]/n"
- "/t[--noheadings]/n"
- "/t[--nosuffix]/n"
- "/t[-o|--options [+]Field[,Field]]/n"
- "/t[-O|--sort [+|-]key1[,[+|-]key2[,...]]]/n"
- "/t[-P|--partial] " "/n"
- "/t[--segments]/n"
- "/t[--separator Separator]/n"
- "/t[--unbuffered]/n"
- "/t[--units hsbkmgtHKMGT]/n"
- "/t[-v|--verbose]/n"
- "/t[--version]" "/n"
- "/t[LogicalVolume[Path] [LogicalVolume[Path]...]]/n",
- aligned_ARG, all_ARG, colon_ARG,