xlv_make(1M) xlv_make(1M) NAME xlv_make - create logical volume objects SYNOPSIS xlv_make [ -c cmdstring ] [ -f ] [ -h nodename ] [ -v ] [ -A ] [ input_file ] DESCRIPTION xlv_make creates new logical volume objects by writing logical volume labels to the devices that are to constitute the volume objects. A volume object can be an entire volume, a plex, or a volume element. xlv_make allows you to create objects that are not full volumes so that you can maintain a set of spares. xlv_make supports the following command line options: -c cmdstring Command line option. Causes xlv_make to go into command line mode and use cmdstring as the command input. Multiple instances of -c are accumulated. The exit or quit command must be used to terminate input. -f Force xlv_make to create a volume element even if the partition type for the partition specified does not correspond with its intended usage. This is useful, for example, in converting lv(7M) volumes to xlv(7M) volumes. It is also used to allow creation of objects involving currently mounted partitions. -h nodename Use nodename as the local nodename. This option implies the -A option below. -v Verbose option. Causes xlv_make to generate more detailed output. Also, it causes xlv_assemble(1M) to generate output upon exit from xlv_make. -A Do not invoke xlv_assemble(1M) upon exit from xlv_make. The default is to invoke xlv_assemble with the -q option unless the -v option is specified, in which case xlv_assemble is invoked with no options. To invoke other xlv_assemble options, specify the -A option and invoke xlv_assemble manually. xlv_make only allows you to create volume objects out of disk partitions that are not currently part of other volume objects. Partitions must be of a type suitable for use by xlv_make. Suitable types are xfs, efs, xlv, and xfslog. Partition types other than these are rejected unless the -f command line option or the ve -force interactive command is specified. See fx(1M) for more information regarding partition types. xlv_mgr(1M) must be used to modify or destroy volume objects. xlv_make can be run either interactively or it can take its commands from an input file, input_file. xlv_make is written using Tcl. Therefore, all the Tcl features such as variables, control structures, and so on can be used in xlv_make commands. xlv_make creates volume objects by writing the disk labels. To make the newly created logical volumes active, xlv_assemble(1M) must be run. xlv_assemble is, by default, automatically invoked upon successful exit from xlv_make; xlv_assemble scans all the disks attached to the system and automatically assembles all the available logical volumes. Objects are specified top-down and depth-first. You start by specifying the top-level object and continue to specify the pieces that make it up. When you have completed specifying an object at one level, you can back up and specify another object at the same level. The commands are: vol volume_name Specifies a volume. The volume_name is required. It can be up to 14 alphanumeric characters in length. data Specifies a data subvolume. This subvolume is required. log Specifies a log subvolume. This is an optional subvolume used by the XFS filesystem. rt Specifies a real-time subvolume. Real-time subvolumes are used for guaranteed-rate I/O and also for high performance applications that isolate user data on a separate subvolume. This is an optional subvolume. plex [plex_name] Specifies a plex. If this plex is specified outside of a volume, plex_name must be given. The name can be up to 14 alphanumeric characters. A plex that exists outside of a volume is known as a standalone plex. ve [volume_element_name] [-stripe] [-concat] [-force] [-stripe_unit stripe_unit_size] [-start blkno] device_pathnames Specifies a volume element. If this volume element is specified outside of a plex, volume_element_name must be given. The name can be up to 14 alphanumeric characters. -stripe Specifies that the data within this volume element is to be striped across all the disks named by device_pathnames. -concat Specifies that all the devices named by device_pathnames are to be joined linearly into a single logical range of blocks. This is the default if no flags are specified. -force Forces the specification of the volume element when the partition type does not agree with the volume element's intended usage. For example, a partition with type xfslog could be assigned to a data subvolume. Also, -force allows the specification of an object that includes a partition that is currently mounted. -stripe_unit stripe_unit_size specifies the number of blocks to write to one disk before writing to the next disk in a stripe set. stripe_unit_size is expressed in 512-byte blocks. -stripe_unit is only meaningful when used in conjunction with -stripe. The default stripe unit size, if this flag is not set, is one track. Note: lv called this parameter the granularity. -start blkno Specifies that this volume element should start at the given block number within the plex. end Terminates the specification of the current object. create Create all new objects just specified during this session by writing the disk labels out to all the disks affected. This command is similar to the exit command except the session is not terminated. clear Removes the current, uncompleted object. show Prints out all the volume objects on the system. This includes existing volume objects (created during an earlier xlv_make session) and new objects specified during this session that have not been created (written out to the disk labels) yet. exit Create the objects specified during this session by writing the disk labels out to all the disks affected, and exit xlv_make. In interactive mode, the user is prompted to confirm this action if any new objects have been created. quit Leave xlv_make without creating the specified objects (without writing the disk labels). All the work done during this invocation of xlv_make is lost. In interactive mode, the user is prompted to confirm this action if any objects have been specified. help Displays a summary of xlv_make commands. ? Same as help. sh Fork a shell. EXAMPLES Example 1 To make a volume from a description in an input file called volume_config.txt, give this command: # xlv_make volume_config.txt Example 2 This example shows making some volume objects interactively. # xlv_make Make a spare plex so we can plug it into another volume on demand. xlv_make> plex spare_plex1 spare_plex1 xlv_make> ve /dev/dsk/dks0d2s1 /dev/dsk/dks0d2s2 spare_plex1.0 xlv_make> end Object specification completed Now make a small volume. (Note that xlv_make automatically adds a /dev/dsk to the disk partition name if it is missing from the ve command.) xlv_make> vol small small xlv_make> log small.log xlv_make> plex small.log.0 xlv_make> ve dks0d2s3 small.log.0.0 xlv_make> data small.data xlv_make> plex small.data.0 xlv_make> ve dks0d2s14 dks0d2s12 small.data.0.0 xlv_make> end Object specification completed xlv_make> show vol small ve small.log.0.0 d710aa7d-b21d-1001-868d-080069077725 start=0, end=1523, (cat)grp_size=1 /dev/dsk/dks0d2s3 (1524 blks) d710aa7e-b21d-1001-868d-080069077725 ve small.data.0.0 d710aa81-b21d-1001-868d-080069077725 start=0, end=4571, (cat)grp_size=2 /dev/dsk/dks0d2s14 (1524 blks) d710aa82-b21d-1001-868d-080069077725 /dev/dsk/dks0d2s12 (3048 blks) d710aa83-b21d-1001-868d-080069077725 plex spare_plex1 ve spare_plex1.0 d710aa77-b21d-1001-868d-080069077725 start=0, end=3047, (cat)grp_size=2 /dev/dsk/dks0d2s1 (1524 blks) d710aa78-b21d-1001-868d-080069077725 /dev/dsk/dks0d2s2 (1524 blks) d710aa79-b21d-1001-868d-080069077725 xlv_make> help vol volume_name - Create a volume. data | log | rt - Create subvolume of this type. plex [plex_name] - Create a plex. ve [-start] [-stripe] [-stripe_unit N] [-force] [volume_element_name] partition(s) end - Finished composing current object. clear- Delete partially created object. show - Show all objects. exit - Write labels and terminate session. quit - Terminate session without writing labels. help or ? - Display this help message. sh - Fork a shell. xlv_make> exit # Note that the strings like d710aa82-b21d-1001-868d-080069077725 shown above are the universally unique identifiers (UUIDs) that identify each XLV object. Example 3 This example shows a description file that makes the same volume objects as in Example 2. # A spare plex plex spare_plex1 ve dks0d2s1 dks0d2s2 # A small volume vol small log plex ve dks0d2s3 data plex ve dks0d2s14 dks0d2s12 end # Write labels before terminating session. exit Example 4 This example shows making a complex volume interactively. It makes a volume for an XFS filesystem that has a single-partition log and a plexed (mirrored) data subvolume that is striped. # xlv_make xlv_make> vol movies movies xlv_make> log movies.log xlv_make> plex movies.log.0 xlv_make> ve /dev/dsk/dks0d2s1 movies.log.0.0 Let the data subvolume have two plexes, each of which consists of two sets of striped disks. The data written to the data subvolume is copied to both movies.data.0 and movies.data.1. xlv_make> data movies.data xlv_make> plex movies.data.0 xlv_make> ve -stripe dks0d1s6 dks0d2s6 dks0d3s6 movies.data.0.0 xlv_make> ve -stripe dks0d4s6 dks0d5s6 movies.data.0.1 xlv_make> plex movies.data.1 xlv_make> ve -stripe dks1d1s6 dks1d2s6 dks1d3s6 movies.data.1.0 xlv_make> ve -stripe dks1d4s6 dks1d5s6 movies.data.1.1 Add a small real-time subvolume. Stripe the data across two disks, with the stripe unit set to 1024 512-byte sectors. xlv_make> rt movies.rt xlv_make> plex movies.rt.0 xlv_make> ve -stripe -stripe_unit 1024 dks4d1s6 dks4d2s6 movies.rt.0.0 xlv_make> end Object specification completed xlv_make> exit # DIAGNOSTICS Previous object not completed You have tried to specify a new object before the previous object has been completely specified. For example, the sequence plex plex is not valid because the volume elements for the first plex have not been specified yet. A volume has not been specified yet This error results from giving rt, data, or log without first specifying a volume to which these subvolumes belong. An object with that name has already been specified This error results from giving the vol volume_name, plex plex_name, or ve volume_element_name command when an object with the same name already exists or has been specified in this session. A log subvolume has already been specified for this volume A data subvolume has already been specified for this volume A real-time subvolume has already been specified for this volume These errors results from giving the log, data, or rt command for a volume that already has a subvolume of the given type. A subvolume has not been specified yet You have given a volume command and then given the plex command without first specifying a subvolume to which the plex belongs. Too many plexes have been specified for this subvolume You have already specified the maximum allowable number of plexes for this subvolume. A plex has not been specified yet You have given a ve command without first giving the plex command. Too many volume elements have been specified for this plex You have reached the maximum number of volume elements that can be in a single plex. An error occurred in creating the specified objects An error occurred while writing the volume configuration out to the disk labels. Unrecognized flag: flag flag is not recognized. Unexpected symbol: symbol symbol is an unknown command. A volume name must be specified You have given a vol command without giving the name of the volume as an argument. Too many disk partitions You have specified too many devices for the volume element. Cannot determine size of partition; please verify that the device exists xlv_make is unable to figure out the size of the specified disk partition. Make sure that the device exists. Unequal partition sizes, truncating the larger partition The partitions specified for a striped volume element are not of the same size. This leaves some disk space unusable in the larger partition because data is striped across all the partitions in a volume element. A disk partition must be specified You have given the ve command without specifying the disk partitions that belong to the volume element as arguments to the command. Unknown device: %s You have specified a disk partition that either has no device node in /dev/dsk or is missing altogether. Illegal value The value is out of range for the given flag. The volume element's address range must be increasing When you specify the starting offset of a volume element within a plex by using the ve -start command, you must specify them in increasing order. Disk partition partition is already being used The disk partition named in the ve command is already in use by some other volume object. Disk partition partition is mounted; use ``-force'' to override The disk partition named in the ve command is currently mounted. Use of the -force argument is required to perform the operation. Address range doesn't match corresponding volume element in other plexes A volume element within a plex must have the same address range in all plexes for the subvolume that includes those plexes. There are partially specified objects, use ``quit'' to exit without creating them You have entered the quit command while there are specified, but not created objects. You should enter quit again to really quit at this point and discard specified objects. Missing flag value for: %s A command was given that requires an additional argument that was not given. Malloc failed There is insufficient memory available for xlv_make to operate successfully. An error occurred in updating the volume header An attempt to modify a disk's volume header was unsuccessful. A striped volume element must have at least two partitions The ve -stripe command was given and only one partition was specified. Log ve should have partition type xfslog Data ve should have partition type xlv Rt ve should have partition type xlv Standalone object should have partition type xlv or xfslog Mixing partition type xfslog with data types not allowed All the partitions that make up a volume element must have the same partition type, either xlv or xfslog. Partition type must be consistent with other ve's in plex Partition type does not correspond with intended usage. Partition could already belong to lv. Check /etc/lvtab A warning that this partition may already belong to an lv volume. Illegal partition type An attempt was made to specify a partition that cannot, under any circumstance, be used in an xlv(7M) volume. An example of such a partition would be the volume header. Subvolume type does not match any known The subvolume being operated on is of no known type. Size mismatch The partition size information in the volume header does not match that contained in the xlv label. Device number mismatch A warning that the device number in the xlv label does not match that of the volume header. The same partition cannot be listed twice The ve command was given with the same partition listed twice. SEE ALSO xlv_assemble(1M), xlv_labd(1M), xlv_mgr(1M), xlv_plexd(1M), xlv_shutdown(1M), xlvd(1M), xlv(7M). Tcl and the Tk Toolkit by John K. Ousterhout, Addison-Wesley, 1994. NOTES The disk labels created by xlv_make are stored only in the volume header of the disks. They do not destroy user data. Therefore, you can make an lv(7M) volume into an XLV volume and still preserve all the data on the logical volume. xlv_make changes the partition type of partitions used in newly created objects to either xlv or xfslog depending upon their usage. You must pick a different name for each volume, standalone plex, and standalone volume element. You cannot have, for example, both a volume and a plex named yy. You must be root to run xlv_make. Page 10