xlv_mgr(1M)                                                        xlv_mgr(1M)


NAME
     xlv_mgr - administers XLV logical volume objects and their disk labels

SYNOPSIS
     xlv_mgr [ -r root ] [ -c cmdstring ] [ -v ] [ -x ] [ -R ]

DESCRIPTION
     xlv_mgr displays and modifies existing XLV objects (volumes, plexes,
     volume elements, and XLV disk labels).  xlv_mgr can operate on XLV
     volumes even while they are mounted and in use.

     xlv_mgr supports the following command line options:

     -r root   Use root as the root directory.  This is used in the miniroot
               when / is mounted as /root.

     -c cmdstring
               Command line option.  Causes xlv_mgr to go into command line
               mode and use cmdstring as the command input.  Multiple
               instances of -c are accumulated.

     -v        Verbose option.  Causes xlv_mgr to generate more detailed
               output.

     -x        Expert mode.  Provides additional functions.

     -R        Do not read the XLV configuration information from the disks at
               the time xlv_mgr is invoked.  This allows xlv_mgr to quickly
               startup.  The XLV configuration information can be read from
               the disks at a later time with the reset command.

     Commands that pertain to plexes are displayed only when the system has
     been licensed for the plexing portion of XLV.

     xlv_mgr provides several types of operations:  attach, detach, delete,
     change, script, and show:

     attach    Add an XLV object to another XLV object.  You can add a volume
               element to a plex or plex to a volume.  The volume element or
               plex to be added must first be created using xlv_make(1M).

     detach    Separate a part of an XLV object and make it an independent
               (standalone) XLV object.  For example, if you detach a plex
               from a plexed volume, that plex is separated from the volume
               and made into a standalone plex.  The original volume then has
               one less plex.

     delete    Delete an entire XLV object.

     script    Generate the xlv_make commands required to create some or all
               XLV objects.


     show      Display the list of XLV objects on the system and their
               structure.

     change    Change an attribute associated with can XLV object.

     The commands are:

     show [-long][-verbose] all
          Displays all known XLV objects by name and type.  The -long option
          causes more information about each XLV object to be displayed.  The
          -verbose displays more detailed information, such as the uuid.  The
          following is an example of the output of this command:

          xlv_mgr> show all

          Volume:             root_vol (complete)
          Volume:             db1 (complete)
          Volume Element:     ve12
          Plex:               plex2

     show [-short][-verbose] kernel [volume_name]
          Displays all XLV objects or the specified volume_name configured
          into the running kernel.  The only XLV objects in the kernel are
          volumes.  Standalone plexes and volume elements are not viable
          objects in the kernel because they cannot be used.  The -short
          option displays terse information on each volume.  The -verbose
          displays more detailed information on each volume.

     show [-long][-verbose] labels [device_volume_header]
          Displays XLV disk labels on all disks or the specified
          device_volume_header.  The -long option displays the secondary
          label.

     show config
          Displays XLV software configuration information about the running
          kernel.  Included are statistics on the XLV memory pools for all
          plexed volumes (if support is present) and all volume elements. For
          example:

          xlv_mgr> show config


          Allocated subvol locks: 30      locks in use: 8
          Plexing license: present
          Plexing support: present
          Statistic Collection: off
          Plex buffer pool statistics:
                  maximum concurrent I/O's 13;  I/O buffer size 1016 bytes
               buffer pool size 13.21KB;  maximum size 4.00GB
                  pool hits 1121; misses 141; waits 0; resized 4 times
                  memory growth rate 50%; maximum miss rate 10%
          Volume Element buffer pool statistics:


                  maximum concurrent I/O's 53;  I/O buffer size 1.48KB
               buffer pool size 80.32KB;  maximum size 4.00GB
                  pool hits 1636; misses 225; waits 0; resized 5 times
                  memory growth rate 50%; maximum miss rate 10%
          Maximum subvol block number: 0x7fffffff

          The Statistic Collection tag indicates if statistics gathering is
          enabled (on) or disabled (off).

          In the pool statistics, hits imply an efficient I/O path and misses
          suggest a somewhat slower path.  When the maximum miss rate is
          exceeded, the buffer pool is grown by the growth rate. The buffer
          pool size is limited to maximum size.  The maximum concurrent I/O's
          gives an upper bound on the number of efficient I/Os possible, and
          the I/O buffer size is the amount of memory dedicated for each I/O
          request.

     show [-verbose] object object_name
          Displays detailed information on an XLV object object_name.  The
          information includes all the XLV parameters and the disk partitions
          that make up the object.

          In the example below, the volume named db1 has one subvolume of type
          data that contains two plexes.  The first plex has two volume
          elements, while the second plex only has one volume element.  The
          first volume element in each plex covers the same range of disk
          blocks.  For each volume element, xlv_mgr displays the partitions
          that make up the volume element, the size of the partition, and the
          range of this volume's disk blocks that map to the volume element.
          For example:

          xlv_mgr> show object db1
          VOL db1 (complete)
          VE db1.data.0.0 [active]
                  start=0, end=1100799, (cat)grp_size=1
                  /dev/dsk/dks1d4s0 (1100800 blks)
          VE db1.data.0.1 [active]
                  start=1100800, end=2201599, (cat)grp_size=1
                  /dev/dsk/dks1d4s1 (1100800 blks)
          VE db1.data.1.0 [active]
                  start=0, end=1100799, (cat)grp_size=1
                  /dev/dsk/dks1d4s2 (1100800 blks)


     show stat [subvolume]
          Displays statistics gathered for either all subvolumes or the
          specified subvolume.  For example:

          xlv_mgr> show stat root.data
          Subvolume 0 (root.data):
            read ops: 668,  read blocks: 286015
            write ops: 2025,  write blocks: 305508


          The above example shows the number of read/write operations and
          read/write blocks going to the data subvolume of the volume root.

          The following example shows the statistics for subvolume 6 which has
          a striped volume element.

          xlv_mgr> show stat 6
          Subvolume 6 (rickey.data):
            read ops: 300,  read blocks: 2457600
            write ops: 300,  write blocks: 2457600
              stripe ops: 600,  total units: 19200
               largest single i/o: 32 stripe units,  frequency: 600
               aligned     <    stripe width; ends on stripe unit: 0
               aligned     >    stripe width; ends on stripe unit: 600
               aligned     =    stripe width; ends on stripe unit: 0
               aligned   > or < stripe width; doesn't end on stripe unit: 0

               unaligned   <    stripe width; ends on stripe unit: 0
               unaligned   >    stripe width; ends on stripe unit: 0
               unaligned   =    stripe width; doesn't end on stripe unit: 0
               unaligned > or < stripe width; doesn't end on stripe unit: 0

          A stripe width is composed of the product of the stripe unit and the
          number of disks comprising the stripe.  The stripe unit determines
          the number of blocks to write to one disk before writing to the
          next.  The stripe statistics are:

          stripe ops            The number of operations issued to the
                                subvolume's striped volume elements.
                                Depending on the volume geometry, and whether
                                or not the subvolume is plexed, this may not
                                match the number of read and write operations.

          total units           The cumulative count of all stripe units
                                involved in stripe operations to the
                                subvolume.

          largest single i/o    Keeps track of the largest I/O size issued to
                                the subvolume measured in stripe units.

          frequency             The number of times the largest I/O was
                                issued.

          There are three parameters for evaluating how an I/O spans a striped
          volume:

          aligned/unaligned     Indicates whether or not the start address of
                                the I/O begins on a stripe unit boundary.  If
                                an I/O doesn't start on a boundary, the stripe
                                unit is used inefficiently.


          < stripe width
          > stripe width
          = stripe width        Specifies if the transfer is less than a
                                stripe width's worth of data, more than a
                                stripe width, or an even multiple of the
                                stripe width size.  Transfers of full stripe
                                widths are optimal since all disks are
                                accessed evenly.  Transfers of more or less
                                than a stripe width are less optimal due to
                                uneven drive access patterns.

          doesn't end on a stripe unit
          ends on a stripe unit When an I/O ends on a stripe unit, the next
                                sequential I/O will start aligned on a stripe
                                unit boundary.  If it doesn't end on a stripe
                                unit, then the stripe is used inefficiently
                                since a sequential access will require that
                                particular unit to be accessed multiple times.

     attach ve source dest-plex
     attach ve source volume.{data|log|rt}.N
          The command appends standalone volume element object source to the
          end of destination plex.  This enables you to grow a plex or volume
          by adding a volume element to the end of a plex.  You can use this
          in conjunction with xfs_growfs(1M) to grow an XFS filesystem without
          unmounting it.

          Suppose that you have a volume element, spareve, that contains a
          single disk partition /dev/dsk/dks1d4s2.  The following command
          appends it to plex 0 of the data subvolume of volume db1:

          xlv_mgr> attach ve spareve db1.data.0
          xlv_mgr> show object db1
          VOL db1 (complete)
          VE db1.data.0.0 [active]
                  start=0, end=1100799, (cat)grp_size=1
                  /dev/dsk/dks1d4s0 (1100800 blks)
          VE db1.data.0.1 [active]
                  start=1100800, end=2201599, (cat)grp_size=1
                  /dev/dsk/dks1d4s1 (1100800 blks)
          VE db1.data.0.2 [active]
                  start=2201600, end=3302399, (cat)grp_size=1
                  /dev/dsk/dks1d4s2 (1100800 blks)

     attach plex source volume.{data|log|rt}
          Appends standalone plex object source to existing volume volume.
          This command creates duplicate copies of the data on the volume for
          greater reliability.  This operation is sometimes called mirroring.
          After the plex has been added, xlv_mgr automatically initiates a
          plex revive operation; this copies the data from the original XLV
          plexes to the newly added plex so that the plex holds the same data
          as the original plexes in the volume.  The following appends a plex


          named plex2 to the data subvolume of volume db1:

          xlv_mgr> attach plex plex2 db1.data

          Use the show object command to display volume db1 and see that the
          disk partitions that were part of plex2 are now a component of db2.
          plex2 no longer exists as a standalone plex since it was merged into
          volume db1.

     insert ve source vol.{data|log|rt}.N
     insert ve source plex.N
          Inserts standalone volume element object source into the destination
          plex object.  This enables you to add a volume element into a gap in
          a plex.

          xlv_mgr requires that the destination be a fully qualified XLV
          pathname (for example, movies.data.0).  The pathname must specify
          the relative position within the plex to insert the volume element.
          (The first volume element in a plex is at position 0.)  The plex to
          be operated on can be a standalone plex or a part of a volume.  If
          the plex is part of a volume, the volume, subvolume, and plex must
          be specified.  In the example below it is volume test.  The
          following example inserts a volume element ve5 into a gap in the
          volume test.  There is a gap because the first volume element starts
          at block number 76200.  First display the configuration of test and
          ve5 before inserting ve5 into test.

          xlv_mgr> show object test

          VOL test (has holes)
          VE test.data.0.0 [active]
                  start=76200, end=152399, (cat)grp_size=1
                  /dev/dsk/dks0d2s1 (76200 blks)
          VE test.data.0.1 [active]
                  start=152400, end=228599, (cat)grp_size=1
                  /dev/dsk/dks0d2s2 (76200 blks)

          xlv_mgr> show object ve5

          VE ve5 [empty]
                  start=0, end=76199, (cat)grp_size=1
                  /dev/dsk/dks0d2s5 (76200 blks)

          xlv_mgr> insert ve ve5 test.data.0

          xlv_mgr> show object test

          VOL test (complete)
          VE test.data.0.0 [stale]
                  start=0, end=76199, (cat)grp_size=1
                  /dev/dsk/dks0d2s5 (76200 blks)
          VE test.data.0.1 [active]


                  start=76200, end=152399, (cat)grp_size=1
                  /dev/dsk/dks0d2s1 (76200 blks)
          VE test.data.0.2 [active]
                  start=152400, end=228599, (cat)grp_size=1
                  /dev/dsk/dks0d2s2 (76200 blks)

     detach [-force] ve plex.N ve-object
     detach [-force] ve volume.{data|log|rt}.N ve-object
          Removes specified volume element from its parent object and save it
          as ve-object.  This command separates a volume element from its
          parent plex.  This volume element can later be added to some other
          XLV object.  The plex from which the volume element is removed can
          be a standalone plex or part of a volume.  The detached volume
          element becomes a standalone XLV volume element object.  You must
          specify the fully qualified pathname of the volume element to be
          detached and the name to be given to the detached volume element.
          The -force option forces the detach when the the parent object is
          missing any pieces.  The detach operation leaves the volume element
          intact.

     detach [-force] plex volname.{data|log|rt}.plexno plexobject
          This command removes the specified plex from its parent object and
          saves it as plexobject.  The -force option forces the detach when
          the the parent object is missing any pieces.  This new standalone
          plex can later be added back to a volume via the attach plex
          command.

          The following example shows how to detach the first plex from a
          volume:

          xlv_mgr> detach plex db1.data.0 savedplex

     delete object name
          Deletes the object name.  This command enables you to delete a
          volume, a standalone plex, or a standalone volume element.  The XLV
          configuration is removed from the disks that make up the XLV object.
          Because the XLV configuration information is stored in the volume
          header (see vh(7M)), this command does not affect any user data that
          may have been written to the user disk partitions.

     delete all[_labels]
          An expert command, this command deletes the XLV labels from all
          disks on the local system.  You might want to do this to initialize
          all the disks on a new system and ensure that there is no leftover
          XLV configuration information on the disks.  Note that this is a
          very dangerous operation.  Deleting the disk labels destroys all of
          the XLV objects on the system.

     delete label device_volume_header
          An expert command, this command deletes the XLV disk label from the
          named device_volume_header.


     change name object_name newname
          This command renames the given XLV object object_name to newname.

          The following example shows how to rename an object small to big.

          xlv_mgr> change name small big

     change nodename name object ...
          This command changes the nodename associated with the named objects.

          The following example shows how to set the node name for the volume
          db1 to homestead.

          xlv_mgr> change nodename homestead db1

     change online vol.{data|log|rt}.N.N
     change offline vol.{data|log|rt}.N.N
          This command transitions the specified volume element online or
          offline.

     change stat on
     change stat off
          Expert commands to enable or disable statistics gathering.  The
          default setting for statistics gathering is specified in the
          configuration file /var/sysgen/master.d/xlv.

     change type ve|plex|vol object
          This command changes the type of the given object.

          The following example shows how to change a standalone plex object
          sa_plex to a volume and then rename the volume to backup_vol.

          xlv_mgr> change type vol sa_plex
          xlv_mgr> change name sa_plex backup_vol

     change ve_start start_block sa_ve
          This command changes the start address of a standalone volume
          element.  This is useful to aid in detaching a volume element from
          one object and arbitrarily inserting it in another.

     change plexmem  max-pool-i/os  growth%  maximum-miss%  [maximum-size]
     change vemem  max-pool-i/os  growth%  maximum-miss% [maximum-size]
          An expert command, these two commands allow you to modify the
          parameters for the two XLV memory/buffer pools.

          When servicing an I/O request, there are two types of memory
          allocated.  The first is for plexed volumes, if plexing support is
          present, and the second is for the underlying volume elements.  If
          no memory available in the respective memory pool, XLV gets memory
          from the system general purpose memory allocator.  By changing the
          maximum number of concurrent I/O max-pool-i/os, you can increase the
          efficiency of an I/O request because memory taken from the pool is


          more efficient than using the general purpose allocator.  Changing
          the growth percentage growth% alters how fast the pool grows when
          the number of misses exceeds the miss percentage maximum-miss%.  The
          maximum-size parameter is expressed in kilobyte units and is used to
          limit the size of the memory pool.

          Note that any changes to the pool parameters are only for life of
          the running system.  The changes are not kept across system
          restarts.

     reset
          Reinitializes xlv_mgr data structures by rereading all the XLV
          configuration information from all the disks.

     reset stat [subvolume]
          An expert command to clear the statistics of either all subvolumes
          or the named subvolume.

     script [-write filename] object name
     script [-write filename] all
          Generates the required xlv_make commands to create the named object
          or all objects.  When the -write option is specified, the xlv_make
          commands are saved into filename.

     help Displays a summary of xlv_mgr commands.

     ?    Same as help.

     sh   Fork a shell.

     quit Terminate this session.

EXAMPLES
     These examples show the making of some XLV objects and the growing and
     plexing of a volume.  The resulting volume configuration is saved to a
     xlv_make(1M) input file.

     Use xlv_make(1M) to create a volume named bigvolume.

          xlv_make> vol bigvolume
          bigvolume
          xlv_make> data
          bigvolume.data
          xlv_make> plex
          bigvolume.data.0
          xlv_make> ve dks131d3s7
          bigvolume.data.0.0
          xlv_make> end
          Object specification completed
          xlv_make> exit
          Newly created objects will be written to disk.
          Is this what you want?(yes)  yes


          Invoking xlv_assemble

     Create a standalone volume element spare_ve.

          # xlv_make
          xlv_make> ve spare_ve dks131d4s7
          spare_ve
          xlv_make> end
          Object specification completed
          xlv_make> exit
          Newly created objects will be written to disk.
          Is this what you want?(yes)  yes
          Invoking xlv_assemble

     Use the xlv_mgr attach ve command to grow the volume bigvolume by
     appending spare_ve to plex 0 of the data subvolume.

          # xlv_mgr
          xlv_mgr> attach ve spare_ve bigvolume.data.0
          xlv_mgr> exit

     Create a standalone plex spare_plex which can be used to completely
     mirror the volume bigvolume.

          xlv_make> plex spare_plex
          spare_plex
          xlv_make> ve dks133d3s7
          spare_plex.0
          xlv_make> ve dks133d4s7
          spare_plex.1
          xlv_make> end
          Object specification completed
          xlv_make> exit
          Newly created objects will be written to disk.
          Is this what you want?(yes)  yes
          Invoking xlv_assemble

     Use the xlv_mgr attach plex command to mirror the volume bigvolume by
     adding plex spare_plex to the data subvolume.

          # xlv_mgr
          xlv_mgr> attach plex spare_plex bigvolume.data
          xlv_mgr> exit

     Save the volume configuration to a file.

          # xlv_mgr
          xlv_mgr> script -write /etc/xlv_make.bigvolume.input object bigvolume
          xlv_mgr> exit


SEE ALSO
     xlv_assemble(1M), xlv_make(1M), xlv_plexd(1M), xlv_shutdown(1M), xlv(7M).

     Tcl and the Tk Toolkit by John K. Ousterhout, Addison-Wesley, 1994.

NOTES
     xlv_mgr operations modify both the XLV disk labels and the kernel data
     structures as appropriate.  This means that you do not need to run
     xlv_assemble(1M) for your changes to take effect.  The only exceptions
     are the XLV label deleting commands delete all_labels and delete label,
     which effect only the disk labels.

     xlv_mgr automatically initiates plex revive operations (see
     xlv_plexd(1M)) as required after adding a new plex to a volume or a
     volume element to a plexed volume.

     You should be root when running xlv_mgr.  Otherwise you have limited
     functionality.


                                                                       Page 11