Logical Volume Manager Administration4.5. Controlling LVM Device Scans with FiltersAt startup, the vgscan command is run to scan the block devices on the system looking for LVM labels, to determine which of them are physical volumes and to read the metadata and build up a list of volume groups. The names of the physical volumes are stored in the cache file of each node in the system, /etc/lvm/cache/.cache . Subsequent commands may read that file to avoiding rescanning. You can control which devices LVM scans by setting up filters in the lvm.conf configuration file. The filters in the lvm.conf file consist of a series of simple regular expressions that get applied to the device names that are in the /dev directory to decide whether to accept or reject each block device found. The following examples show the use of filters to control which devices LVM scans. Note that some of these examples do not necessarily represent best practice, as the regular expressions are matched freely against the complete pathname. For example, a/loop/ is equivalent to a/.*loop.*/ and would match /dev/solooperation/lvol1 . The following filter adds all discovered devices, which is the default behavior as there is no filter configured in the configuration file: filter = [ "a/.*/" ] The following filter removes the cdrom device in order to avoid delays if the drive contains no media: filter = [ "r|/dev/cdrom|" ] The following filter adds all loop and removes all other block devices: filter = [ "a/loop.*/", "r/.*/" ] The following filter adds all loop and IDE and removes all other block devices: filter =[ "a|loop.*|", "a|/dev/hd.*|", "r|.*|" ] The following filter adds just partition 8 on the first IDE drive and removes all other block devices: filter = [ "a|^/dev/hda8$|", "r/.*/" ] 4.6. Online Data RelocationYou can move data while the system is in use with the pvmove command. The pvmove command breaks up the data to be moved into sections and creates a temporary mirror to move each section. For more information on the operation of the pvmove command, see the pvmove (8) man page. In order to perform a pvmove operation in a cluster, you should ensure that the cmirror and cmirror-kmod packages are installed and the cmirror service is running. The cmirror-kmod package that must be installed depends on the kernel that is running. For example, if the running kernel is kernel-largesmp , it is necessary to have cmirror-kmod-largesmp for the corresponding kernel version. The following command moves all allocated space off the physical volume /dev/sdc1 to other free physical volumes in the volume group: # pvmove /dev/sdc1 The following command moves just the extents of the logical volume MyLV . # pvmove -n MyLV /dev/sdc1 Since the pvmove command can take a long time to execute, you may want to run the command in the background to avoid display of progress updates in the foreground. The following command moves all extents allocated to the physical volume /dev/sdc1 over to /dev/sdf1 in the background. # pvmove -b /dev/sdc1 /dev/sdf1 The following command reports the progress of the move as a percentage at five second intervals. # pvmove -i5 /dev/sdd1 4.7. Activating Logical Volumes on Individual Nodes in a ClusterIf you have LVM installed in a cluster environment, you may at times need to activate logical volumes exclusively on one node. To activate logical volumes exclusively on one node, use the lvchange -aey command. Alternatively, you can use lvchange -aly command to activate logical volumes only on the local node but not exclusively. You can later activate them on additional nodes concurrently. 4.8. Customized Reporting for LVMYou can produce concise and customizable reports of LVM objects with the pvs , lvs , and vgs commands. The reports that these commands generate include one line of output for each object. Each line contains an ordered list of fields of properties related to the object. There are five ways to select the objects to be reported: by physical volume, volume group, logical volume, physical volume segment, and logical volume segment. The following sections provide: A summary of command arguments you can use to control the format of the generated report. A list of the fields you can select for each LVM object. A summary of command arguments you can use to sort the generated report. Instructions for specifying the units of the report output.
Whether you use the pvs , lvs , or vgs command determines the default set of fields displayed and the sort order. You can control the output of these commands with the following arguments: You can change what fields are displayed to something other than the default by using the -o argument. For example, the following output is the default display for the pvs command (which displays information about physical volumes). # pvs PV VG Fmt Attr PSize PFree /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G /dev/sdd1 new_vg lvm2 a- 17.14G 17.14G The following command displays only the physical volume name and size. # pvs -o pv_name,pv_size PV PSize /dev/sdb1 17.14G /dev/sdc1 17.14G /dev/sdd1 17.14G You can append a field to the output with the plus sign (+), which is used in combination with the -o argument. The following example displays the UUID of the physical volume in addition to the default fields. # pvs -o +pv_uuid PV VG Fmt Attr PSize PFree PV UUID /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G onFF2w-1fLC-ughJ-D9eB-M7iv-6XqA-dqGeXY /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G Joqlch-yWSj-kuEn-IdwM-01S9-X08M-mcpsVe /dev/sdd1 new_vg lvm2 a- 17.14G 17.14G yvfvZK-Cf31-j75k-dECm-0RZ3-0dGW-UqkCS Adding the -v argument to a command includes some extra fields. For example, the pvs -v command will display the DevSize and PV UUID fields in addition to the default fields. # pvs -v Scanning for physical volume names PV VG Fmt Attr PSize PFree DevSize PV UUID /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G 17.14G onFF2w-1fLC-ughJ-D9eB-M7iv-6XqA-dqGeXY /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G 17.14G Joqlch-yWSj-kuEn-IdwM-01S9-XO8M-mcpsVe /dev/sdd1 new_vg lvm2 a- 17.14G 17.14G 17.14G yvfvZK-Cf31-j75k-dECm-0RZ3-0dGW-tUqkCS The --noheadings argument suppresses the headings line. This can be useful for writing scripts. The following example uses the --noheadings argument in combination with the pv_name argument, which will generate a list of all physical volumes. # pvs --noheadings -o pv_name /dev/sdb1 /dev/sdc1 /dev/sdd1 The --separator separator argument uses separator to separate each field. The following example separates the default output fields of the pvs command with an equals sign (=). # pvs --separator = PV=VG=Fmt=Attr=PSize=PFree /dev/sdb1=new_vg=lvm2=a-=17.14G=17.14G /dev/sdc1=new_vg=lvm2=a-=17.14G=17.09G /dev/sdd1=new_vg=lvm2=a-=17.14G=17.14G To keep the fields aligned when using the separator argument, use the separator argument in conjunction with the --aligned argument. # pvs --separator = --aligned PV =VG =Fmt =Attr=PSize =PFree /dev/sdb1 =new_vg=lvm2=a- =17.14G=17.14G /dev/sdc1 =new_vg=lvm2=a- =17.14G=17.09G /dev/sdd1 =new_vg=lvm2=a- =17.14G=17.14G
For a full listing of display arguments, see the pvs (8), vgs (8) and lvs (8) man pages. Volume group fields can be mixed with either physical volume (and physical volume segment) fields or with logical volume (and logical volume segment) fields, but physical volume and logical volume fields cannot be mixed. For example, the following command will display one line of output for each physical volume. # vgs -o +pv_name VG #PV #LV #SN Attr VSize VFree PV new_vg 3 1 0 wz--n- 51.42G 51.37G /dev/sdc1 new_vg 3 1 0 wz--n- 51.42G 51.37G /dev/sdd1 new_vg 3 1 0 wz--n- 51.42G 51.37G /dev/sdb1 This section provides a series of tables that list the information you can display about the LVM objects with the pvs , vgs , and lvs commands. For convenience, a field name prefix can be dropped if it matches the default for the command. For example, with the pvs command, name means pv_name , but with the vgs command, name is interpreted as vg_name . Executing the following command is the equivalent of executing pvs -o pv_free . # pvs -o +free PFree 17.14G 17.09G 17.14G Table 4.2, "pvs Display Fields" lists the display arguments of the pvs command, along with the field name as it appears in the header display and a description of the field. Table 4.2. pvs Display Fields Argument | Header | Description |
---|
dev_size | DevSize | The size of the underlying device on which the physical volume was created | pe_start | 1st PE | Offset to the start of the first physical extent in the underlying device | pv_attr | Attr | Status of the physical volume: (a)llocatable or e(x)ported. | pv_fmt | Fmt | The metadata format of the physical volume (lvm2 or lvm1 ) | pv_free | PFree | The free space remaining on the physical volume | pv_name | PV | The physical volume name | pv_pe_alloc_count | Alloc | Number of used physical extents | pv_pe_count | PE | Number of physical extents | pvseg_size | SSize | The segment size of the physical volume | pvseg_start | Start | The starting physical extent of the physical volume segment | pv_size | PSize | The size of the physical volume | pv_tags | PV Tags | LVM tags attached to the physical volume | pv_used | Used | The amount of space currently used on the physical volume | pv_uuid | PV UUID | The UUID of the physical volume |
The pvs command displays the following fields by default: pv_name , vg_name , pv_fmt , pv_attr , pv_size , pv_free . The display is sorted by pv_name . # pvs PV VG Fmt Attr PSize PFree /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G /dev/sdd1 new_vg lvm2 a- 17.14G 17.13G Using the -v argument with the pvs command adds the following fields to the default display: dev_size , pv_uuid . # pvs -v Scanning for physical volume names PV VG Fmt Attr PSize PFree DevSize PV UUID /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G 17.14G onFF2w-1fLC-ughJ-D9eB-M7iv-6XqA-dqGeXY /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G 17.14G Joqlch-yWSj-kuEn-IdwM-01S9-XO8M-mcpsVe /dev/sdd1 new_vg lvm2 a- 17.14G 17.13G 17.14G yvfvZK-Cf31-j75k-dECm-0RZ3-0dGW-tUqkCS You can use the --segments argument of the pvs command to display information about each physical volume segment. A segment is a group of extents. A segment view can be useful if you want to see whether your logical volume is fragmented. The pvs --segments command displays the following fields by default: pv_name , vg_name , pv_fmt , pv_attr , pv_size , pv_free , pvseg_start , pvseg_size . The display is sorted by pv_name and pvseg_size within the physical volume. # pvs --segments PV VG Fmt Attr PSize PFree Start SSize /dev/hda2 VolGroup00 lvm2 a- 37.16G 32.00M 0 1172 /dev/hda2 VolGroup00 lvm2 a- 37.16G 32.00M 1172 16 /dev/hda2 VolGroup00 lvm2 a- 37.16G 32.00M 1188 1 /dev/sda1 vg lvm2 a- 17.14G 16.75G 0 26 /dev/sda1 vg lvm2 a- 17.14G 16.75G 26 24 /dev/sda1 vg lvm2 a- 17.14G 16.75G 50 26 /dev/sda1 vg lvm2 a- 17.14G 16.75G 76 24 /dev/sda1 vg lvm2 a- 17.14G 16.75G 100 26 /dev/sda1 vg lvm2 a- 17.14G 16.75G 126 24 /dev/sda1 vg lvm2 a- 17.14G 16.75G 150 22 /dev/sda1 vg lvm2 a- 17.14G 16.75G 172 4217 /dev/sdb1 vg lvm2 a- 17.14G 17.14G 0 4389 /dev/sdc1 vg lvm2 a- 17.14G 17.14G 0 4389 /dev/sdd1 vg lvm2 a- 17.14G 17.14G 0 4389 /dev/sde1 vg lvm2 a- 17.14G 17.14G 0 4389 /dev/sdf1 vg lvm2 a- 17.14G 17.14G 0 4389 /dev/sdg1 vg lvm2 a- 17.14G 17.14G 0 4389 You can use the pvs -a command to see devices detected by LVM that have not been initialized as LVM physical volumes. # pvs -a PV VG Fmt Attr PSize PFree /dev/VolGroup00/LogVol01 -- 0 0 /dev/new_vg/lvol0 -- 0 0 /dev/ram -- 0 0 /dev/ram0 -- 0 0 /dev/ram2 -- 0 0 /dev/ram3 -- 0 0 /dev/ram4 -- 0 0 /dev/ram5 -- 0 0 /dev/ram6 -- 0 0 /dev/root -- 0 0 /dev/sda -- 0 0 /dev/sdb -- 0 0 /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G /dev/sdc -- 0 0 /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G /dev/sdd -- 0 0 /dev/sdd1 new_vg lvm2 a- 17.14G 17.14G Table 4.3, "vgs Display Fields" lists the display arguments of the vgs command, along with the field name as it appears in the header display and a description of the field. Table 4.3. vgs Display Fields Argument | Header | Description |
---|
lv_count | #LV | The number of logical volumes the volume group contains | max_lv | MaxLV | The maximum number of logical volumes allowed in the volume group (0 if unlimited) | max_pv | MaxPV | The maximum number of physical volumes allowed in the volume group (0 if unlimited) | pv_count | #PV | The number of physical volumes that define the volume group | snap_count | #SN | The number of snapshots the volume group contains | vg_attr | Attr | Status of the volume group: (w)riteable, (r)eadonly, resi(z)eable, e(x)ported, (p)artial and (c)lustered. | vg_extent_count | #Ext | The number of physical extents in the volume group | vg_extent_size | Ext | The size of the physical extents in the volume group | vg_fmt | Fmt | The metadata format of the volume group (lvm2 or lvm1 ) | vg_free | VFree | Size of the free space remaining in the volume group | vg_free_count | Free | Number of free physical extents in the volume group | vg_name | VG | The volume group name | vg_seqno | Seq | Number representing the revision of the volume group | vg_size | VSize | The size of the volume group | vg_sysid | SYS ID | LVM1 System ID | vg_tags | VG Tags | LVM tags attached to the volume group | vg_uuid | VG UUID | The UUID of the volume group |
The vgs command displays the following fields by default: vg_name , pv_count , lv_count , snap_count , vg_attr , vg_size , vg_free . The display is sorted by vg_name . # vgs VG #PV #LV #SN Attr VSize VFree new_vg 3 1 1 wz--n- 51.42G 51.36G Using the -v argument with the vgs command adds the following fields to the default display: vg_extent_size , vg_uuid . # vgs -v Finding all volume groups Finding volume group "new_vg" VG Attr Ext #PV #LV #SN VSize VFree VG UUID new_vg wz--n- 4.00M 3 1 1 51.42G 51.36G jxQJ0a-ZKk0-OpMO-0118-nlwO-wwqd-fD5D32 Table 4.4, "lvs Display Fields" lists the display arguments of the lvs command, along with the field name as it appears in the header display and a description of the field. Table 4.4. lvs Display Fields Argument | Header | Description |
---|
| Chunk | Unit size in a snapshot volume | copy_percent | Copy% | The synchronization percentage of a mirrored logical volume; also used when physical extents are being moved with the pv_move command | devices | Devices | The underlying devices that make up the logical volume: the physical volumes, logical volumes, and start physical extents and logical extents | lv_attr | Attr | The status of the logical volume. The logical volume attribute bits are as follows: Bit 1: Volume type: (m)irrored, (M)irrored without initial sync, (o)rigin, (O)rigin with merging snapshot, (r)aid, (R)aid without initial sync, (s)napshot, merging (S)napshot, (p)vmove, (v)irtual, mirror or raid (i)mage, mirror or raid (I)mage out-of-sync, mirror (l)og device, under (c)onversion, thin (V)olume, (t)hin pool, (T)hin pool data, raid or thin pool m(e)tadata | Bit 2: Permissions: (w)riteable, (r)ead-only, (R)ead-only activation of non-read-only volume | Bit 3: Allocation policy: (c)ontiguous, c(l)ing, (n)ormal, (a)nywhere, (i)nherited. This is capitalized if the volume is currently locked against allocation changes, for example while executing the pvmove command. | Bit 4: fixed (m)inor | Bit 5: State: (a)ctive, (s)uspended, (I)nvalid snapshot, invalid (S)uspended snapshot, snapshot (m)erge failed, suspended snapshot (M)erge failed, mapped (d)evice present without tables, mapped device present with (i)nactive table | Bit 6: device (o)pen | Bit 7: Target type: (m)irror, (r)aid, (s)napshot, (t)hin, (u)nknown, (v)irtual. This groups logical volumes related to the same kernel target together. So, for example, mirror images, mirror logs as well as mirrors themselves appear as (m) if they use the original device-mapper mirror kernel driver, whereas the raid equivalents using the md raid kernel driver all appear as (r). Snapshots using the original device-mapper driver appear as (s), whereas snapshots of thin volumes using the thin provisioning driver appear as (t). | Bit 8: Newly-allocated data blocks are overwritten with blocks of (z)eroes before use. |
| lv_kernel_major | KMaj | Actual major device number of the logical volume (-1 if inactive) | lv_kernel_minor | KMIN | Actual minor device number of the logical volume (-1 if inactive) | lv_major | Maj | The persistent major device number of the logical volume (-1 if not specified) | lv_minor | Min | The persistent minor device number of the logical volume (-1 if not specified) | lv_name | LV | The name of the logical volume | lv_size | LSize | The size of the logical volume | lv_tags | LV Tags | LVM tags attached to the logical volume | lv_uuid | LV UUID | The UUID of the logical volume. | mirror_log | Log | Device on which the mirror log resides | modules | Modules | Corresponding kernel device-mapper target necessary to use this logical volume | move_pv | Move | Source physical volume of a temporary logical volume created with the pvmove command | origin | Origin | The origin device of a snapshot volume | | Region | The unit size of a mirrored logical volume | seg_count | #Seg | The number of segments in the logical volume | seg_size | SSize | The size of the segments in the logical volume | seg_start | Start | Offset of the segment in the logical volume | seg_tags | Seg Tags | LVM tags attached to the segments of the logical volume | segtype | Type | The segment type of a logical volume (for example: mirror, striped, linear) | snap_percent | Snap% | Current percentage of a snapshot volume that is in use | stripes | #Str | Number of stripes or mirrors in a logical volume | | Stripe | Unit size of the stripe in a striped logical volume |
The lvs command displays the following fields by default: lv_name , vg_name , lv_attr , lv_size , origin , snap_percent , move_pv , mirror_log , copy_percent , convert_lv . The default display is sorted by vg_name and lv_name within the volume group. # lvs LV VG Attr LSize Origin Snap% Move Log Copy% Convert lvol0 new_vg owi-a- 52.00M newvgsnap1 new_vg swi-a- 8.00M lvol0 0.20 Using the -v argument with the lvs command adds the following fields to the default display: seg_count , lv_major , lv_minor , lv_kernel_major , lv_kernel_minor , lv_uuid . # lvs -v Finding all logical volumes LV VG #Seg Attr LSize Maj Min KMaj KMin Origin Snap% Move Copy% Log Convert LV UUID lvol0 new_vg 1 owi-a- 52.00M -1 -1 253 3 LBy1Tz-sr23-OjsI-LT03-nHLC-y8XW-EhCl78 newvgsnap1 new_vg 1 swi-a- 8.00M -1 -1 253 5 lvol0 0.20 1ye1OU-1cIu-o79k-20h2-ZGF0-qCJm-CfbsIx You can use the --segments argument of the lvs command to display information with default columns that emphasize the segment information. When you use the segments argument, the seg prefix is optional. The lvs --segments command displays the following fields by default: lv_name , vg_name , lv_attr , stripes , segtype , seg_size . The default display is sorted by vg_name , lv_name within the volume group, and seg_start within the logical volume. If the logical volumes were fragmented, the output from this command would show that. # lvs --segments LV VG Attr #Str Type SSize LogVol00 VolGroup00 -wi-ao 1 linear 36.62G LogVol01 VolGroup00 -wi-ao 1 linear 512.00M lv vg -wi-a- 1 linear 104.00M lv vg -wi-a- 1 linear 104.00M lv vg -wi-a- 1 linear 104.00M lv vg -wi-a- 1 linear 88.00M Using the -v argument with the lvs --segments command adds the following fields to the default display: seg_start , stripesize , chunksize . # lvs -v --segments Finding all logical volumes LV VG Attr Start SSize #Str Type Stripe Chunk lvol0 new_vg owi-a- 0 52.00M 1 linear 0 0 newvgsnap1 new_vg swi-a- 0 8.00M 1 linear 0 8.00K The following example shows the default output of the lvs command on a system with one logical volume configured, followed by the default output of the lvs command with the segments argument specified. # lvs LV VG Attr LSize Origin Snap% Move Log Copy% lvol0 new_vg -wi-a- 52.00M# lvs --segments LV VG Attr #Str Type SSize lvol0 new_vg -wi-a- 1 linear 52.00M 4.8.3. Sorting LVM ReportsNormally the entire output of the lvs , vgs , or pvs command has to be generated and stored internally before it can be sorted and columns aligned correctly. You can specify the --unbuffered argument to display unsorted output as soon as it is generated. To specify an alternative ordered list of columns to sort on, use the -O argument of any of the reporting commands. It is not necessary to include these fields within the output itself. The following example shows the output of the pvs command that displays the physical volume name, size, and free space. # pvs -o pv_name,pv_size,pv_free PV PSize PFree /dev/sdb1 17.14G 17.14G /dev/sdc1 17.14G 17.09G /dev/sdd1 17.14G 17.14G The following example shows the same output, sorted by the free space field. # pvs -o pv_name,pv_size,pv_free -O pv_free PV PSize PFree /dev/sdc1 17.14G 17.09G /dev/sdd1 17.14G 17.14G /dev/sdb1 17.14G 17.14G The following example shows that you do not need to display the field on which you are sorting. # pvs -o pv_name,pv_size -O pv_free PV PSize /dev/sdc1 17.14G /dev/sdd1 17.14G /dev/sdb1 17.14G To display a reverse sort, precede a field you specify after the -O argument with the - character. # pvs -o pv_name,pv_size,pv_free -O -pv_free PV PSize PFree /dev/sdd1 17.14G 17.14G /dev/sdb1 17.14G 17.14G /dev/sdc1 17.14G 17.09G To specify the unit for the LVM report display, use the --units argument of the report command. You can specify (b)ytes, (k)ilobytes, (m)egabytes, (g)igabytes, (t)erabytes, (e)xabytes, (p)etabytes, and (h)uman-readable. The default display is human-readable. You can override the default by setting the units parameter in the global section of the lvm.conf file. The following example specifies the output of the pvs command in megabytes rather than the default gigabytes. # pvs --units m PV VG Fmt Attr PSize PFree /dev/sda1 lvm2 -- 17555.40M 17555.40M /dev/sdb1 new_vg lvm2 a- 17552.00M 17552.00M /dev/sdc1 new_vg lvm2 a- 17552.00M 17500.00M /dev/sdd1 new_vg lvm2 a- 17552.00M 17552.00M By default, units are displayed in powers of 2 (multiples of 1024). You can specify that units be displayed in multiples of 1000 by capitalizing the unit specification (B, K, M, G, T, H). The following command displays the output as a multiple of 1024, the default behavior. # pvs PV VG Fmt Attr PSize PFree /dev/sdb1 new_vg lvm2 a- 17.14G 17.14G /dev/sdc1 new_vg lvm2 a- 17.14G 17.09G /dev/sdd1 new_vg lvm2 a- 17.14G 17.14G The following command displays the output as a multiple of 1000. # pvs --units G PV VG Fmt Attr PSize PFree /dev/sdb1 new_vg lvm2 a- 18.40G 18.40G /dev/sdc1 new_vg lvm2 a- 18.40G 18.35G /dev/sdd1 new_vg lvm2 a- 18.40G 18.40G You can also specify (s)ectors (defined as 512 bytes) or custom units. The following example displays the output of the pvs command as a number of sectors. # pvs --units s PV VG Fmt Attr PSize PFree /dev/sdb1 new_vg lvm2 a- 35946496S 35946496S /dev/sdc1 new_vg lvm2 a- 35946496S 35840000S /dev/sdd1 new_vg lvm2 a- 35946496S 35946496S The following example displays the output of the pvs command in units of 4 MB. # pvs --units 4m PV VG Fmt Attr PSize PFree /dev/sdb1 new_vg lvm2 a- 4388.00U 4388.00U /dev/sdc1 new_vg lvm2 a- 4388.00U 4375.00U /dev/sdd1 new_vg lvm2 a- 4388.00U 4388.00U |