2002-12-12 23:55:49 +03:00
/*
2009-04-23 20:27:58 +04:00
* Copyright ( C ) 2002 - 2004 Sistina Software , Inc . All rights reserved .
2019-10-04 18:02:20 +03:00
* Copyright ( C ) 2004 - 2019 Red Hat , Inc . All rights reserved .
2002-12-12 23:55:49 +03:00
*
2004-03-30 23:35:44 +04:00
* This file is part of LVM2 .
*
* This copyrighted material is made available to anyone wishing to use ,
* modify , copy , or redistribute it subject to the terms and conditions
2007-08-21 00:55:30 +04:00
* of the GNU Lesser General Public License v .2 .1 .
2004-03-30 23:35:44 +04:00
*
2007-08-21 00:55:30 +04:00
* You should have received a copy of the GNU Lesser General Public License
2004-03-30 23:35:44 +04:00
* along with this program ; if not , write to the Free Software Foundation ,
2016-01-21 13:49:46 +03:00
* Inc . , 51 Franklin Street , Fifth Floor , Boston , MA 02110 - 1301 USA
2002-12-12 23:55:49 +03:00
*/
2009-04-23 20:27:58 +04:00
/*
* This file defines the fields ( columns ) for the reporting commands
* ( pvs / vgs / lvs ) .
2013-07-19 04:30:02 +04:00
*
* The preferred order of the field descriptions in the help text
* determines the order the entries appear in this file .
*
* When adding new entries take care to use the existing style .
2016-12-01 16:39:21 +03:00
*
* Do not interleave fields from different report types - for example ,
* if you have a field of type " LVS " add it in between " LVS type fields "
* and " End of LVS type fields " comment . If you interleaved fields of
* different types here in this file , they would end up interleaved in
* the < reporting_command > - o help output too which may be confusing
* for users .
*
2013-07-19 04:30:02 +04:00
* Displayed fields names normally have a type prefix and use underscores .
2016-12-01 16:39:21 +03:00
*
2013-07-19 04:30:02 +04:00
* Field - specific internal functions names normally match the displayed
* field names but without underscores .
2016-12-01 16:39:21 +03:00
*
2013-07-19 04:30:02 +04:00
* Help text ends with a full stop .
2009-04-23 20:27:58 +04:00
*/
2010-08-20 16:44:03 +04:00
2014-07-08 14:40:45 +04:00
/*
2016-03-08 22:50:22 +03:00
* FIELD ( report_object_type , structure , sort_type , heading , structure_field , output_width , reporting_function , field_id , description , settable_via_lib )
2014-07-08 14:40:45 +04:00
*/
2003-04-02 23:14:43 +04:00
/* *INDENT-OFF* */
2016-12-01 16:39:21 +03:00
/*
* LVS type fields
*/
2016-03-01 17:23:23 +03:00
FIELD ( LVS , lv , STR , " LV UUID " , lvid , 38 , lvuuid , lv_uuid , " Unique identifier. " , 0 )
2010-08-20 16:44:17 +04:00
FIELD ( LVS , lv , STR , " LV " , lvid , 4 , lvname , lv_name , " Name. LVs created for internal use are enclosed in brackets. " , 0 )
2014-07-02 20:24:05 +04:00
FIELD ( LVS , lv , STR , " LV " , lvid , 4 , lvfullname , lv_full_name , " Full name of LV including its VG, namely VG/LV. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LVS , lv , STR , " Path " , lvid , 0 , lvpath , lv_path , " Full pathname for LV. Blank for internal LVs. " , 0 )
FIELD ( LVS , lv , STR , " DMPath " , lvid , 0 , lvdmpath , lv_dm_path , " Internal device-mapper pathname for LV (in /dev/mapper directory). " , 0 )
FIELD ( LVS , lv , STR , " Parent " , lvid , 0 , lvparent , lv_parent , " For LVs that are components of another LV, the parent LV. " , 0 )
Add lv_layout_and_type fn, lv_layout and lv_type reporting fields.
The lv_layout and lv_type fields together help with LV identification.
We can do basic identification using the lv_attr field which provides
very condensed view. In contrast to that, the new lv_layout and lv_type
fields provide more detialed information on exact layout and type used
for LVs.
For top-level LVs which are pure types not combined with any
other LV types, the lv_layout value is equal to lv_type value.
For non-top-level LVs which may be combined with other types,
the lv_layout describes the underlying layout used, while the
lv_type describes the use/type/usage of the LV.
These two new fields are both string lists so selection (-S/--select)
criteria can be defined using the list operators easily:
[] for strict matching
{} for subset matching.
For example, let's consider this:
$ lvs -a -o name,vg_name,lv_attr,layout,type
LV VG Attr Layout Type
[lvol1_pmspare] vg ewi------- linear metadata,pool,spare
pool vg twi-a-tz-- pool,thin pool,thin
[pool_tdata] vg rwi-aor--- level10,raid data,pool,thin
[pool_tdata_rimage_0] vg iwi-aor--- linear image,raid
[pool_tdata_rimage_1] vg iwi-aor--- linear image,raid
[pool_tdata_rimage_2] vg iwi-aor--- linear image,raid
[pool_tdata_rimage_3] vg iwi-aor--- linear image,raid
[pool_tdata_rmeta_0] vg ewi-aor--- linear metadata,raid
[pool_tdata_rmeta_1] vg ewi-aor--- linear metadata,raid
[pool_tdata_rmeta_2] vg ewi-aor--- linear metadata,raid
[pool_tdata_rmeta_3] vg ewi-aor--- linear metadata,raid
[pool_tmeta] vg ewi-aor--- level1,raid metadata,pool,thin
[pool_tmeta_rimage_0] vg iwi-aor--- linear image,raid
[pool_tmeta_rimage_1] vg iwi-aor--- linear image,raid
[pool_tmeta_rmeta_0] vg ewi-aor--- linear metadata,raid
[pool_tmeta_rmeta_1] vg ewi-aor--- linear metadata,raid
thin_snap1 vg Vwi---tz-k thin snapshot,thin
thin_snap2 vg Vwi---tz-k thin snapshot,thin
thin_vol1 vg Vwi-a-tz-- thin thin
thin_vol2 vg Vwi-a-tz-- thin multiple,origin,thin
Which is a situation with thin pool, thin volumes and thin snapshots.
We can see internal 'pool_tdata' volume that makes up thin pool has
actually a level10 raid layout and the internal 'pool_tmeta' has
level1 raid layout. Also, we can see that 'thin_snap1' and 'thin_snap2'
are both thin snapshots while 'thin_vol1' is thin origin (having
multiple snapshots).
Such reporting scheme provides much better base for selection criteria
in addition to providing more detailed information, for example:
$ lvs -a -o name,vg_name,lv_attr,layout,type -S 'type=metadata'
LV VG Attr Layout Type
[lvol1_pmspare] vg ewi------- linear metadata,pool,spare
[pool_tdata_rmeta_0] vg ewi-aor--- linear metadata,raid
[pool_tdata_rmeta_1] vg ewi-aor--- linear metadata,raid
[pool_tdata_rmeta_2] vg ewi-aor--- linear metadata,raid
[pool_tdata_rmeta_3] vg ewi-aor--- linear metadata,raid
[pool_tmeta] vg ewi-aor--- level1,raid metadata,pool,thin
[pool_tmeta_rmeta_0] vg ewi-aor--- linear metadata,raid
[pool_tmeta_rmeta_1] vg ewi-aor--- linear metadata,raid
(selected all LVs which are related to metadata of any type)
lvs -a -o name,vg_name,lv_attr,layout,type -S 'type={metadata,thin}'
LV VG Attr Layout Type
[pool_tmeta] vg ewi-aor--- level1,raid metadata,pool,thin
(selected all LVs which hold metadata related to thin)
lvs -a -o name,vg_name,lv_attr,layout,type -S 'type={thin,snapshot}'
LV VG Attr Layout Type
thin_snap1 vg Vwi---tz-k thin snapshot,thin
thin_snap2 vg Vwi---tz-k thin snapshot,thin
(selected all LVs which are thin snapshots)
lvs -a -o name,vg_name,lv_attr,layout,type -S 'layout=raid'
LV VG Attr Layout Type
[pool_tdata] vg rwi-aor--- level10,raid data,pool,thin
[pool_tmeta] vg ewi-aor--- level1,raid metadata,pool,thin
(selected all LVs with raid layout, any raid layout)
lvs -a -o name,vg_name,lv_attr,layout,type -S 'layout={raid,level1}'
LV VG Attr Layout Type
[pool_tmeta] vg ewi-aor--- level1,raid metadata,pool,thin
(selected all LVs with raid level1 layout exactly)
And so on...
2014-08-13 12:03:45 +04:00
FIELD ( LVS , lv , STR_LIST , " Layout " , lvid , 10 , lvlayout , lv_layout , " LV layout. " , 0 )
2014-08-25 11:07:03 +04:00
FIELD ( LVS , lv , STR_LIST , " Role " , lvid , 10 , lvrole , lv_role , " LV role. " , 0 )
2014-07-09 15:41:25 +04:00
FIELD ( LVS , lv , BIN , " InitImgSync " , lvid , 10 , lvinitialimagesync , lv_initial_image_sync , " Set if mirror/RAID images underwent initial resynchronization. " , 0 )
FIELD ( LVS , lv , BIN , " ImgSynced " , lvid , 10 , lvimagesynced , lv_image_synced , " Set if mirror/RAID image is synchronized. " , 0 )
FIELD ( LVS , lv , BIN , " Merging " , lvid , 10 , lvmerging , lv_merging , " Set if snapshot LV is being merged to origin. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LVS , lv , BIN , " Converting " , lvid , 0 , lvconverting , lv_converting , " Set if LV is being converted. " , 0 )
2014-07-02 13:09:14 +04:00
FIELD ( LVS , lv , STR , " AllocPol " , lvid , 10 , lvallocationpolicy , lv_allocation_policy , " LV allocation policy. " , 0 )
2014-07-09 15:41:25 +04:00
FIELD ( LVS , lv , BIN , " AllocLock " , lvid , 10 , lvallocationlocked , lv_allocation_locked , " Set if LV is locked against allocation changes. " , 0 )
FIELD ( LVS , lv , BIN , " FixMin " , lvid , 10 , lvfixedminor , lv_fixed_minor , " Set if LV has fixed minor number assigned. " , 0 )
FIELD ( LVS , lv , BIN , " SkipAct " , lvid , 15 , lvskipactivation , lv_skip_activation , " Set if LV is skipped on activation. " , 0 )
2015-01-21 12:43:40 +03:00
FIELD ( LVS , lv , STR , " WhenFull " , lvid , 15 , lvwhenfull , lv_when_full , " For thin pools, behavior when full. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LVS , lv , STR , " Active " , lvid , 0 , lvactive , lv_active , " Active state of the LV. " , 0 )
2014-07-11 13:15:06 +04:00
FIELD ( LVS , lv , BIN , " ActLocal " , lvid , 10 , lvactivelocally , lv_active_locally , " Set if the LV is active locally. " , 0 )
FIELD ( LVS , lv , BIN , " ActRemote " , lvid , 10 , lvactiveremotely , lv_active_remotely , " Set if the LV is active remotely. " , 0 )
FIELD ( LVS , lv , BIN , " ActExcl " , lvid , 10 , lvactiveexclusively , lv_active_exclusively , " Set if the LV is active exclusively. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LVS , lv , SNUM , " Maj " , major , 0 , int32 , lv_major , " Persistent major number or -1 if not persistent. " , 0 )
FIELD ( LVS , lv , SNUM , " Min " , minor , 0 , int32 , lv_minor , " Persistent minor number or -1 if not persistent. " , 0 )
FIELD ( LVS , lv , SIZ , " Rahead " , lvid , 0 , lvreadahead , lv_read_ahead , " Read ahead setting in current units. " , 0 )
2017-03-07 20:47:20 +03:00
FIELD ( LVS , lv , SIZ , " LSize " , lvid , 0 , lv_size , lv_size , " Size of LV in current units. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LVS , lv , SIZ , " MSize " , lvid , 0 , lvmetadatasize , lv_metadata_size , " For thin and cache pools, the size of the LV that holds the metadata. " , 0 )
FIELD ( LVS , lv , NUM , " #Seg " , lvid , 0 , lvsegcount , seg_count , " Number of segments in LV. " , 0 )
2016-05-25 17:26:10 +03:00
FIELD ( LVS , lv , STR , " Origin " , lvid , 0 , origin , origin , " For snapshots and thins, the origin device of this LV. " , 0 )
FIELD ( LVS , lv , STR , " Origin UUID " , lvid , 38 , originuuid , origin_uuid , " For snapshots and thins, the UUID of origin device of this LV. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LVS , lv , SIZ , " OSize " , lvid , 0 , originsize , origin_size , " For snapshots, the size of the origin device of this LV. " , 0 )
FIELD ( LVS , lv , STR_LIST , " Ancestors " , lvid , 0 , lvancestors , lv_ancestors , " LV ancestors ignoring any stored history of the ancestry chain. " , 0 )
FIELD ( LVS , lv , STR_LIST , " FAncestors " , lvid , 0 , lvfullancestors , lv_full_ancestors , " LV ancestors including stored history of the ancestry chain. " , 0 )
FIELD ( LVS , lv , STR_LIST , " Descendants " , lvid , 0 , lvdescendants , lv_descendants , " LV descendants ignoring any stored history of the ancestry chain. " , 0 )
FIELD ( LVS , lv , STR_LIST , " FDescendants " , lvid , 0 , lvfulldescendants , lv_full_descendants , " LV descendants including stored history of the ancestry chain. " , 0 )
FIELD ( LVS , lv , NUM , " Mismatches " , lvid , 0 , raidmismatchcount , raid_mismatch_count , " For RAID, number of mismatches found or repaired. " , 0 )
FIELD ( LVS , lv , STR , " SyncAction " , lvid , 0 , raidsyncaction , raid_sync_action , " For RAID, the current synchronization action being performed. " , 0 )
FIELD ( LVS , lv , NUM , " WBehind " , lvid , 0 , raidwritebehind , raid_write_behind , " For RAID1, the number of outstanding writes allowed to writemostly devices. " , 0 )
FIELD ( LVS , lv , NUM , " MinSync " , lvid , 0 , raidminrecoveryrate , raid_min_recovery_rate , " For RAID1, the minimum recovery I/O load in kiB/sec/disk. " , 0 )
FIELD ( LVS , lv , NUM , " MaxSync " , lvid , 0 , raidmaxrecoveryrate , raid_max_recovery_rate , " For RAID1, the maximum recovery I/O load in kiB/sec/disk. " , 0 )
2020-09-01 22:39:34 +03:00
FIELD ( LVS , lv , STR , " IntegMode " , lvid , 0 , raidintegritymode , raidintegritymode , " The integrity mode " , 0 )
FIELD ( LVS , lv , NUM , " IntegBlkSize " , lvid , 0 , raidintegrityblocksize , raidintegrityblocksize , " The integrity block size " , 0 )
2020-09-02 00:15:31 +03:00
FIELD ( LVS , lv , NUM , " IntegMismatches " , lvid , 0 , integritymismatches , integritymismatches , " The number of integrity mismatches. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LVS , lv , STR , " Move " , lvid , 0 , movepv , move_pv , " For pvmove, Source PV of temporary LV created by pvmove. " , 0 )
2015-09-21 15:01:41 +03:00
FIELD ( LVS , lv , STR , " Move UUID " , lvid , 38 , movepvuuid , move_pv_uuid , " For pvmove, the UUID of Source PV of temporary LV created by pvmove. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LVS , lv , STR , " Convert " , lvid , 0 , convertlv , convert_lv , " For lvconvert, Name of temporary LV created by lvconvert. " , 0 )
FIELD ( LVS , lv , STR , " Convert UUID " , lvid , 38 , convertlvuuid , convert_lv_uuid , " For lvconvert, UUID of temporary LV created by lvconvert. " , 0 )
FIELD ( LVS , lv , STR , " Log " , lvid , 0 , loglv , mirror_log , " For mirrors, the LV holding the synchronisation log. " , 0 )
2015-09-21 14:16:48 +03:00
FIELD ( LVS , lv , STR , " Log UUID " , lvid , 38 , loglvuuid , mirror_log_uuid , " For mirrors, the UUID of the LV holding the synchronisation log. " , 0 )
2019-09-30 16:29:01 +03:00
FIELD ( LVS , lv , STR , " Data " , lvid , 0 , datalv , data_lv , " For cache/thin/vdo pools, the LV holding the associated data. " , 0 )
FIELD ( LVS , lv , STR , " Data UUID " , lvid , 38 , datalvuuid , data_lv_uuid , " For cache/thin/vdo pools, the UUID of the LV holding the associated data. " , 0 )
FIELD ( LVS , lv , STR , " Meta " , lvid , 0 , metadatalv , metadata_lv , " For cache/thin pools, the LV holding the associated metadata. " , 0 )
FIELD ( LVS , lv , STR , " Meta UUID " , lvid , 38 , metadatalvuuid , metadata_lv_uuid , " For cache/thin pools, the UUID of the LV holding the associated metadata. " , 0 )
FIELD ( LVS , lv , STR , " Pool " , lvid , 0 , poollv , pool_lv , " For cache/thin/vdo volumes, the cache/thin/vdo pool LV for this volume. " , 0 )
FIELD ( LVS , lv , STR , " Pool UUID " , lvid , 38 , poollvuuid , pool_lv_uuid , " For cache/thin/vdo volumes, the UUID of the cache/thin/vdo pool LV for this volume. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LVS , lv , STR_LIST , " LV Tags " , tags , 0 , tags , lv_tags , " Tags, if any. " , 0 )
FIELD ( LVS , lv , STR , " LProfile " , lvid , 0 , lvprofile , lv_profile , " Configuration profile attached to this LV. " , 0 )
FIELD ( LVS , lv , STR , " LLockArgs " , lvid , 0 , lvlockargs , lv_lockargs , " Lock args of the LV used by lvmlockd. " , 0 )
2016-03-01 17:23:23 +03:00
FIELD ( LVS , lv , TIM , " CTime " , lvid , 26 , lvtime , lv_time , " Creation time of the LV, if known " , 0 )
FIELD ( LVS , lv , TIM , " RTime " , lvid , 26 , lvtimeremoved , lv_time_removed , " Removal time of the LV, if known " , 0 )
2012-01-19 19:34:32 +04:00
FIELD ( LVS , lv , STR , " Host " , lvid , 10 , lvhost , lv_host , " Creation host of the LV, if known. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LVS , lv , STR_LIST , " Modules " , lvid , 0 , modules , lv_modules , " Kernel device-mapper modules required for this LV. " , 0 )
FIELD ( LVS , lv , BIN , " Historical " , lvid , 0 , lvhistorical , lv_historical , " Set if the LV is historical. " , 0 )
2016-12-01 16:39:21 +03:00
/*
* End of LVS type fields
*/
2002-12-12 23:55:49 +03:00
2016-12-01 16:39:21 +03:00
/*
* LVSINFO type fields
*/
2016-03-08 22:50:22 +03:00
FIELD ( LVSINFO , lv , SNUM , " KMaj " , lvid , 0 , lvkmaj , lv_kernel_major , " Currently assigned major number or -1 if LV is not active. " , 0 )
FIELD ( LVSINFO , lv , SNUM , " KMin " , lvid , 0 , lvkmin , lv_kernel_minor , " Currently assigned minor number or -1 if LV is not active. " , 0 )
FIELD ( LVSINFO , lv , SIZ , " KRahead " , lvid , 0 , lvkreadahead , lv_kernel_read_ahead , " Currently-in-use read ahead setting in current units. " , 0 )
2014-07-02 13:09:14 +04:00
FIELD ( LVSINFO , lv , STR , " LPerms " , lvid , 8 , lvpermissions , lv_permissions , " LV permissions. " , 0 )
2014-07-09 15:41:25 +04:00
FIELD ( LVSINFO , lv , BIN , " Suspended " , lvid , 10 , lvsuspended , lv_suspended , " Set if LV is suspended. " , 0 )
FIELD ( LVSINFO , lv , BIN , " LiveTable " , lvid , 20 , lvlivetable , lv_live_table , " Set if LV has live table present. " , 0 )
FIELD ( LVSINFO , lv , BIN , " InactiveTable " , lvid , 20 , lvinactivetable , lv_inactive_table , " Set if LV has inactive table present. " , 0 )
FIELD ( LVSINFO , lv , BIN , " DevOpen " , lvid , 10 , lvdeviceopen , lv_device_open , " Set if LV device is open. " , 0 )
2016-12-01 16:39:21 +03:00
/*
* End of LVSINFO type fields
*/
2014-07-02 16:31:39 +04:00
2016-12-01 16:39:21 +03:00
/*
* LVSSTATUS type fields
*/
FIELD ( LVSSTATUS , lv , PCT , " Data% " , lvid , 6 , datapercent , data_percent , " For snapshot, cache and thin pools and volumes, the percentage full if LV is active. " , 0 )
FIELD ( LVSSTATUS , lv , PCT , " Snap% " , lvid , 6 , snpercent , snap_percent , " For snapshots, the percentage full if LV is active. " , 0 )
FIELD ( LVSSTATUS , lv , PCT , " Meta% " , lvid , 6 , metadatapercent , metadata_percent , " For cache and thin pools, the percentage of metadata full if LV is active. " , 0 )
FIELD ( LVSSTATUS , lv , PCT , " Cpy%Sync " , lvid , 0 , copypercent , copy_percent , " For Cache, RAID, mirrors and pvmove, current percentage in-sync. " , 0 )
FIELD ( LVSSTATUS , lv , PCT , " Cpy%Sync " , lvid , 0 , copypercent , sync_percent , " For Cache, RAID, mirrors and pvmove, current percentage in-sync. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LVSSTATUS , lv , NUM , " CacheTotalBlocks " , lvid , 0 , cache_total_blocks , cache_total_blocks , " Total cache blocks. " , 0 )
2014-10-24 15:39:56 +04:00
FIELD ( LVSSTATUS , lv , NUM , " CacheUsedBlocks " , lvid , 16 , cache_used_blocks , cache_used_blocks , " Used cache blocks. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LVSSTATUS , lv , NUM , " CacheDirtyBlocks " , lvid , 0 , cache_dirty_blocks , cache_dirty_blocks , " Dirty cache blocks. " , 0 )
2014-10-24 15:39:56 +04:00
FIELD ( LVSSTATUS , lv , NUM , " CacheReadHits " , lvid , 16 , cache_read_hits , cache_read_hits , " Cache read hits. " , 0 )
FIELD ( LVSSTATUS , lv , NUM , " CacheReadMisses " , lvid , 16 , cache_read_misses , cache_read_misses , " Cache read misses. " , 0 )
FIELD ( LVSSTATUS , lv , NUM , " CacheWriteHits " , lvid , 16 , cache_write_hits , cache_write_hits , " Cache write hits. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LVSSTATUS , lv , NUM , " CacheWriteMisses " , lvid , 0 , cache_write_misses , cache_write_misses , " Cache write misses. " , 0 )
FIELD ( LVSSTATUS , lv , STR_LIST , " KCacheSettings " , lvid , 18 , kernel_cache_settings , kernel_cache_settings , " Cache settings/parameters as set in kernel, including default values (cached segments only). " , 0 )
FIELD ( LVSSTATUS , lv , STR , " KCachePolicy " , lvid , 18 , kernel_cache_policy , kernel_cache_policy , " Cache policy used in kernel. " , 0 )
2017-02-23 19:41:59 +03:00
FIELD ( LVSSTATUS , lv , NUM , " KMFmt " , lvid , 0 , kernelmetadataformat , kernel_metadata_format , " Cache metadata format used in kernel. " , 0 )
2015-01-20 15:14:16 +03:00
FIELD ( LVSSTATUS , lv , STR , " Health " , lvid , 15 , lvhealthstatus , lv_health_status , " LV health status. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LVSSTATUS , lv , STR , " KDiscards " , lvid , 0 , kdiscards , kernel_discards , " For thin pools, how discards are handled in kernel. " , 0 )
2016-05-25 17:26:10 +03:00
FIELD ( LVSSTATUS , lv , BIN , " CheckNeeded " , lvid , 15 , lvcheckneeded , lv_check_needed , " For thin pools and cache volumes, whether metadata check is needed. " , 0 )
2016-12-01 19:58:06 +03:00
FIELD ( LVSSTATUS , lv , BIN , " MergeFailed " , lvid , 15 , lvmergefailed , lv_merge_failed , " Set if snapshot merge failed. " , 0 )
FIELD ( LVSSTATUS , lv , BIN , " SnapInvalid " , lvid , 15 , lvsnapshotinvalid , lv_snapshot_invalid , " Set if snapshot LV is invalid. " , 0 )
2019-10-04 18:02:20 +03:00
FIELD ( LVSSTATUS , lv , STR , " VDOOperatingMode " , lvid , 0 , vdo_operating_mode , vdo_operating_mode , " For vdo pools, its current operating mode. " , 0 )
FIELD ( LVSSTATUS , lv , STR , " VDOCompressionState " , lvid , 0 , vdo_compression_state , vdo_compression_state , " For vdo pools, whether compression is running. " , 0 )
FIELD ( LVSSTATUS , lv , STR , " VDOIndexState " , lvid , 0 , vdo_index_state , vdo_index_state , " For vdo pools, state of index for deduplication. " , 0 )
FIELD ( LVSSTATUS , lv , NUM , " VDOUsedSize " , lvid , 0 , vdo_used_size , vdo_used_size , " For vdo pools, currently used space. " , 0 )
FIELD ( LVSSTATUS , lv , NUM , " VDOSaving% " , lvid , 0 , vdo_saving_percent , vdo_saving_percent , " For vdo pools, percentage of saved space. " , 0 )
2020-01-31 20:52:49 +03:00
FIELD ( LVSSTATUS , lv , NUM , " WCacheTotalBlocks " , lvid , 0 , writecache_total_blocks , writecache_total_blocks , " Total writecache blocks. " , 0 )
FIELD ( LVSSTATUS , lv , NUM , " WCacheFreeBlocks " , lvid , 0 , writecache_free_blocks , writecache_free_blocks , " Total writecache free blocks. " , 0 )
FIELD ( LVSSTATUS , lv , NUM , " WCacheWritebackBlocks " , lvid , 0 , writecache_writeback_blocks , writecache_writeback_blocks , " Total writecache writeback blocks. " , 0 )
FIELD ( LVSSTATUS , lv , NUM , " WCacheErrors " , lvid , 0 , writecache_error , writecache_error , " Total writecache errors. " , 0 )
2016-12-01 16:39:21 +03:00
/*
* End of LVSSTATUS type fields
*/
2014-10-24 15:39:56 +04:00
2016-12-01 16:39:21 +03:00
/*
* LVSINFOSTATUS type fields
*/
FIELD ( LVSINFOSTATUS , lv , STR , " Attr " , lvid , 0 , lvstatus , lv_attr , " Various attributes - see man page. " , 0 )
/*
* End of LVSINFOSTATUS type fields
*/
/*
* LABEL type fields
*/
2016-03-08 22:50:22 +03:00
FIELD ( LABEL , label , STR , " Fmt " , type , 0 , pvfmt , pv_fmt , " Type of metadata. " , 0 )
2013-07-29 21:15:31 +04:00
FIELD ( LABEL , label , STR , " PV UUID " , type , 38 , pvuuid , pv_uuid , " Unique identifier. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LABEL , label , SIZ , " DevSize " , dev , 0 , devsize , dev_size , " Size of underlying device in current units. " , 0 )
2013-07-29 21:05:28 +04:00
FIELD ( LABEL , label , STR , " PV " , dev , 10 , dev_name , pv_name , " Name. " , 0 )
2016-03-22 03:12:08 +03:00
FIELD ( LABEL , label , STR , " Maj " , dev , 0 , devmajor , pv_major , " Device major number. " , 0 )
FIELD ( LABEL , label , STR , " Min " , dev , 0 , devminor , pv_minor , " Device minor number. " , 0 )
2014-05-29 11:37:22 +04:00
FIELD ( LABEL , label , SIZ , " PMdaFree " , type , 9 , pvmdafree , pv_mda_free , " Free metadata area space on this device in current units. " , 0 )
FIELD ( LABEL , label , SIZ , " PMdaSize " , type , 9 , pvmdasize , pv_mda_size , " Size of smallest metadata area on this device in current units. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( LABEL , label , NUM , " PExtVsn " , type , 0 , pvextvsn , pv_ext_vsn , " PV header extension version. " , 0 )
2016-12-01 16:39:21 +03:00
/*
* End of LABEL type fields
*/
2009-02-09 12:45:49 +03:00
2016-12-01 16:39:21 +03:00
/*
* PVS type fields
*/
2010-08-20 16:44:17 +04:00
FIELD ( PVS , pv , NUM , " 1st PE " , pe_start , 7 , size64 , pe_start , " Offset to the start of data on the underlying device. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( PVS , pv , SIZ , " PSize " , id , 0 , pvsize , pv_size , " Size of PV in current units. " , 0 )
FIELD ( PVS , pv , SIZ , " PFree " , id , 0 , pvfree , pv_free , " Total amount of unallocated space in current units. " , 0 )
FIELD ( PVS , pv , SIZ , " Used " , id , 0 , pvused , pv_used , " Total amount of allocated space in current units. " , 0 )
FIELD ( PVS , pv , STR , " Attr " , id , 0 , pvstatus , pv_attr , " Various attributes - see man page. " , 0 )
FIELD ( PVS , pv , BIN , " Allocatable " , id , 0 , pvallocatable , pv_allocatable , " Set if this device can be used for allocation. " , 0 )
2014-07-09 15:41:25 +04:00
FIELD ( PVS , pv , BIN , " Exported " , id , 10 , pvexported , pv_exported , " Set if this device is exported. " , 0 )
FIELD ( PVS , pv , BIN , " Missing " , id , 10 , pvmissing , pv_missing , " Set if this device is missing in system. " , 0 )
2010-08-20 16:44:17 +04:00
FIELD ( PVS , pv , NUM , " PE " , pe_count , 3 , uint32 , pv_pe_count , " Total number of Physical Extents. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( PVS , pv , NUM , " Alloc " , pe_alloc_count , 0 , uint32 , pv_pe_alloc_count , " Total number of allocated Physical Extents. " , 0 )
FIELD ( PVS , pv , STR_LIST , " PV Tags " , tags , 0 , tags , pv_tags , " Tags, if any. " , 0 )
FIELD ( PVS , pv , NUM , " #PMda " , id , 0 , pvmdas , pv_mda_count , " Number of metadata areas on this device. " , 0 )
FIELD ( PVS , pv , NUM , " #PMdaUse " , id , 0 , pvmdasused , pv_mda_used_count , " Number of metadata areas in use on this device. " , 0 )
FIELD ( PVS , pv , SIZ , " BA Start " , ba_start , 0 , size64 , pv_ba_start , " Offset to the start of PV Bootloader Area on the underlying device in current units. " , 0 )
FIELD ( PVS , pv , SIZ , " BA Size " , ba_size , 0 , size64 , pv_ba_size , " Size of PV Bootloader Area in current units. " , 0 )
FIELD ( PVS , pv , BIN , " PInUse " , id , 0 , pvinuse , pv_in_use , " Set if PV is used. " , 0 )
2016-04-29 22:42:14 +03:00
FIELD ( PVS , pv , BIN , " Duplicate " , id , 0 , pvduplicate , pv_duplicate , " Set if PV is an unchosen duplicate. " , 0 )
device usage based on devices file
The LVM devices file lists devices that lvm can use. The default
file is /etc/lvm/devices/system.devices, and the lvmdevices(8)
command is used to add or remove device entries. If the file
does not exist, or if lvm.conf includes use_devicesfile=0, then
lvm will not use a devices file. When the devices file is in use,
the regex filter is not used, and the filter settings in lvm.conf
or on the command line are ignored.
LVM records devices in the devices file using hardware-specific
IDs, such as the WWID, and attempts to use subsystem-specific
IDs for virtual device types. These device IDs are also written
in the VG metadata. When no hardware or virtual ID is available,
lvm falls back using the unstable device name as the device ID.
When devnames are used, lvm performs extra scanning to find
devices if their devname changes, e.g. after reboot.
When proper device IDs are used, an lvm command will not look
at devices outside the devices file, but when devnames are used
as a fallback, lvm will scan devices outside the devices file
to locate PVs on renamed devices. A config setting
search_for_devnames can be used to control the scanning for
renamed devname entries.
Related to the devices file, the new command option
--devices <devnames> allows a list of devices to be specified for
the command to use, overriding the devices file. The listed
devices act as a sort of devices file in terms of limiting which
devices lvm will see and use. Devices that are not listed will
appear to be missing to the lvm command.
Multiple devices files can be kept in /etc/lvm/devices, which
allows lvm to be used with different sets of devices, e.g.
system devices do not need to be exposed to a specific application,
and the application can use lvm on its own set of devices that are
not exposed to the system. The option --devicesfile <filename> is
used to select the devices file to use with the command. Without
the option set, the default system devices file is used.
Setting --devicesfile "" causes lvm to not use a devices file.
An existing, empty devices file means lvm will see no devices.
The new command vgimportdevices adds PVs from a VG to the devices
file and updates the VG metadata to include the device IDs.
vgimportdevices -a will import all VGs into the system devices file.
LVM commands run by dmeventd not use a devices file by default,
and will look at all devices on the system. A devices file can
be created for dmeventd (/etc/lvm/devices/dmeventd.devices) If
this file exists, lvm commands run by dmeventd will use it.
Internal implementaion:
- device_ids_read - read the devices file
. add struct dev_use (du) to cmd->use_devices for each devices file entry
- dev_cache_scan - get /dev entries
. add struct device (dev) to dev_cache for each device on the system
- device_ids_match - match devices file entries to /dev entries
. match each du on cmd->use_devices to a dev in dev_cache, using device ID
. on match, set du->dev, dev->id, dev->flags MATCHED_USE_ID
- label_scan - read lvm headers and metadata from devices
. filters are applied, those that do not need data from the device
. filter-deviceid skips devs without MATCHED_USE_ID, i.e.
skips /dev entries that are not listed in the devices file
. read lvm label from dev
. filters are applied, those that use data from the device
. read lvm metadata from dev
. add info/vginfo structs for PVs/VGs (info is "lvmcache")
- device_ids_find_renamed_devs - handle devices with unstable devname ID
where devname changed
. this step only needed when devs do not have proper device IDs,
and their dev names change, e.g. after reboot sdb becomes sdc.
. detect incorrect match because PVID in the devices file entry
does not match the PVID found when the device was read above
. undo incorrect match between du and dev above
. search system devices for new location of PVID
. update devices file with new devnames for PVIDs on renamed devices
. label_scan the renamed devs
- continue with command processing
2020-06-23 21:25:41 +03:00
FIELD ( PVS , pv , STR , " DeviceID " , id , 0 , pvdeviceid , pv_device_id , " Device ID such as the WWID. " , 0 )
FIELD ( PVS , pv , STR , " DeviceIDType " , id , 0 , pvdeviceidtype , pv_device_id_type , " Type of device ID such as WWID. " , 0 )
2016-12-01 16:39:21 +03:00
/*
* End of PVS type fields
*/
2002-12-12 23:55:49 +03:00
2016-12-01 16:39:21 +03:00
/*
* VGS type fields
*/
2016-03-08 22:50:22 +03:00
FIELD ( VGS , vg , STR , " Fmt " , cmd , 0 , vgfmt , vg_fmt , " Type of metadata. " , 0 )
2010-08-20 16:44:17 +04:00
FIELD ( VGS , vg , STR , " VG UUID " , id , 38 , uuid , vg_uuid , " Unique identifier. " , 0 )
2016-03-14 12:30:51 +03:00
FIELD ( VGS , vg , STR , " VG " , name , 0 , string , vg_name , " Name. " , 0 )
2010-08-20 16:44:17 +04:00
FIELD ( VGS , vg , STR , " Attr " , cmd , 5 , vgstatus , vg_attr , " Various attributes - see man page. " , 0 )
2014-07-02 13:09:14 +04:00
FIELD ( VGS , vg , STR , " VPerms " , cmd , 10 , vgpermissions , vg_permissions , " VG permissions. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( VGS , vg , BIN , " Extendable " , cmd , 0 , vgextendable , vg_extendable , " Set if VG is extendable. " , 0 )
2014-07-09 15:41:25 +04:00
FIELD ( VGS , vg , BIN , " Exported " , cmd , 10 , vgexported , vg_exported , " Set if VG is exported. " , 0 )
FIELD ( VGS , vg , BIN , " Partial " , cmd , 10 , vgpartial , vg_partial , " Set if VG is partial. " , 0 )
2014-07-02 13:09:14 +04:00
FIELD ( VGS , vg , STR , " AllocPol " , cmd , 10 , vgallocationpolicy , vg_allocation_policy , " VG allocation policy. " , 0 )
2014-07-09 15:41:25 +04:00
FIELD ( VGS , vg , BIN , " Clustered " , cmd , 10 , vgclustered , vg_clustered , " Set if VG is clustered. " , 0 )
2018-05-31 18:23:03 +03:00
FIELD ( VGS , vg , BIN , " Shared " , cmd , 7 , vgshared , vg_shared , " Set if VG is shared. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( VGS , vg , SIZ , " VSize " , cmd , 0 , vgsize , vg_size , " Total size of VG in current units. " , 0 )
FIELD ( VGS , vg , SIZ , " VFree " , cmd , 0 , vgfree , vg_free , " Total amount of free space in current units. " , 0 )
FIELD ( VGS , vg , STR , " SYS ID " , cmd , 0 , vgsystemid , vg_sysid , " System ID of the VG indicating which host owns it. " , 0 )
FIELD ( VGS , vg , STR , " System ID " , cmd , 0 , vgsystemid , vg_systemid , " System ID of the VG indicating which host owns it. " , 0 )
FIELD ( VGS , vg , STR , " LockType " , cmd , 0 , vglocktype , vg_lock_type , " Lock type of the VG used by lvmlockd. " , 0 )
FIELD ( VGS , vg , STR , " VLockArgs " , cmd , 0 , vglockargs , vg_lock_args , " Lock args of the VG used by lvmlockd. " , 0 )
FIELD ( VGS , vg , SIZ , " Ext " , extent_size , 0 , size32 , vg_extent_size , " Size of Physical Extents in current units. " , 0 )
FIELD ( VGS , vg , NUM , " #Ext " , extent_count , 0 , uint32 , vg_extent_count , " Total number of Physical Extents. " , 0 )
FIELD ( VGS , vg , NUM , " Free " , free_count , 0 , uint32 , vg_free_count , " Total number of unallocated Physical Extents. " , 0 )
FIELD ( VGS , vg , NUM , " MaxLV " , max_lv , 0 , uint32 , max_lv , " Maximum number of LVs allowed in VG or 0 if unlimited. " , 0 )
FIELD ( VGS , vg , NUM , " MaxPV " , max_pv , 0 , uint32 , max_pv , " Maximum number of PVs allowed in VG or 0 if unlimited. " , 0 )
FIELD ( VGS , vg , NUM , " #PV " , pv_count , 0 , uint32 , pv_count , " Number of PVs in VG. " , 0 )
FIELD ( VGS , vg , NUM , " #PV Missing " , cmd , 0 , vgmissingpvcount , vg_missing_pv_count , " Number of PVs in VG which are missing. " , 0 )
FIELD ( VGS , vg , NUM , " #LV " , cmd , 0 , lvcount , lv_count , " Number of LVs. " , 0 )
FIELD ( VGS , vg , NUM , " #SN " , cmd , 0 , snapcount , snap_count , " Number of snapshots. " , 0 )
FIELD ( VGS , vg , NUM , " Seq " , seqno , 0 , uint32 , vg_seqno , " Revision number of internal metadata. Incremented whenever it changes. " , 0 )
FIELD ( VGS , vg , STR_LIST , " VG Tags " , tags , 0 , tags , vg_tags , " Tags, if any. " , 0 )
FIELD ( VGS , vg , STR , " VProfile " , cmd , 0 , vgprofile , vg_profile , " Configuration profile attached to this VG. " , 0 )
FIELD ( VGS , vg , NUM , " #VMda " , cmd , 0 , vgmdas , vg_mda_count , " Number of metadata areas on this VG. " , 0 )
FIELD ( VGS , vg , NUM , " #VMdaUse " , cmd , 0 , vgmdasused , vg_mda_used_count , " Number of metadata areas in use on this VG. " , 0 )
2014-05-29 11:37:22 +04:00
FIELD ( VGS , vg , SIZ , " VMdaFree " , cmd , 9 , vgmdafree , vg_mda_free , " Free metadata area space for this VG in current units. " , 0 )
FIELD ( VGS , vg , SIZ , " VMdaSize " , cmd , 9 , vgmdasize , vg_mda_size , " Size of smallest metadata area for this VG in current units. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( VGS , vg , NUM , " #VMdaCps " , cmd , 0 , vgmdacopies , vg_mda_copies , " Target number of in use metadata areas in the VG. " , 1 )
2016-12-01 16:39:21 +03:00
/*
* End of VGS type fields
*/
2002-12-12 23:55:49 +03:00
2016-12-01 16:39:21 +03:00
/*
* SEGS type fields
*/
2016-03-08 22:50:22 +03:00
FIELD ( SEGS , seg , STR , " Type " , list , 0 , segtype , segtype , " Type of LV segment. " , 0 )
2017-03-03 00:21:23 +03:00
FIELD ( SEGS , seg , NUM , " #Str " , list , 0 , seg_stripes , stripes , " Number of stripes or mirror/raid1 legs. " , 0 )
2017-03-01 20:50:35 +03:00
FIELD ( SEGS , seg , NUM , " #DStr " , list , 0 , seg_data_stripes , data_stripes , " Number of data stripes or mirror/raid1 legs. " , 0 )
2017-03-04 00:29:50 +03:00
FIELD ( SEGS , seg , SIZ , " RSize " , list , 0 , seg_reshape_len , reshape_len , " Size of out-of-place reshape space in current units. " , 0 )
FIELD ( SEGS , seg , NUM , " RSize " , list , 0 , seg_reshape_len_le , reshape_len_le , " Size of out-of-place reshape space in logical extents. " , 0 )
2017-03-01 20:50:35 +03:00
FIELD ( SEGS , seg , NUM , " #Cpy " , list , 0 , seg_data_copies , data_copies , " Number of data copies. " , 0 )
FIELD ( SEGS , seg , NUM , " DOff " , list , 0 , seg_data_offset , data_offset , " Data offset on each image device. " , 0 )
FIELD ( SEGS , seg , NUM , " NOff " , list , 0 , seg_new_data_offset , new_data_offset , " New data offset after any reshape on each image device. " , 0 )
FIELD ( SEGS , seg , NUM , " #Par " , list , 0 , seg_parity_chunks , parity_chunks , " Number of (rotating) parity chunks. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( SEGS , seg , SIZ , " Stripe " , stripe_size , 0 , size32 , stripe_size , " For stripes, amount of data placed on one device before switching to the next. " , 0 )
2017-03-03 00:21:23 +03:00
FIELD ( SEGS , seg , SIZ , " Region " , region_size , 0 , size32 , region_size , " For mirrors/raids, the unit of data per leg when synchronizing devices. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( SEGS , seg , SIZ , " Chunk " , list , 0 , chunksize , chunk_size , " For snapshots, the unit of data used when tracking changes. " , 0 )
FIELD ( SEGS , seg , NUM , " #Thins " , list , 0 , thincount , thin_count , " For thin pools, the number of thin volumes in this pool. " , 0 )
FIELD ( SEGS , seg , STR , " Discards " , list , 0 , discards , discards , " For thin pools, how discards are handled. " , 0 )
2017-02-23 19:41:59 +03:00
FIELD ( SEGS , seg , NUM , " CMFmt " , list , 0 , cachemetadataformat , cache_metadata_format , " For cache, metadata format in use. " , 0 )
FIELD ( SEGS , seg , STR , " CacheMode " , list , 0 , cachemode , cache_mode , " For cache, how writes are cached. " , 0 )
2016-04-23 22:08:46 +03:00
FIELD ( SEGS , seg , BIN , " Zero " , list , 0 , thinzero , zero , " For thin pools and volumes, if zeroing is enabled. " , 0 )
FIELD ( SEGS , seg , NUM , " TransId " , list , 0 , transactionid , transaction_id , " For thin pools, the transaction id and creation transaction id for thins. " , 0 )
2016-03-08 22:50:22 +03:00
FIELD ( SEGS , seg , NUM , " ThId " , list , 0 , thinid , thin_id , " For thin volume, the thin device id. " , 0 )
FIELD ( SEGS , seg , SIZ , " Start " , list , 0 , segstart , seg_start , " Offset within the LV to the start of the segment in current units. " , 0 )
FIELD ( SEGS , seg , NUM , " Start " , list , 0 , segstartpe , seg_start_pe , " Offset within the LV to the start of the segment in physical extents. " , 0 )
FIELD ( SEGS , seg , SIZ , " SSize " , list , 0 , segsize , seg_size , " Size of segment in current units. " , 0 )
FIELD ( SEGS , seg , SIZ , " SSize " , list , 0 , segsizepe , seg_size_pe , " Size of segment in physical extents. " , 0 )
FIELD ( SEGS , seg , STR_LIST , " Seg Tags " , tags , 0 , tags , seg_tags , " Tags, if any. " , 0 )
FIELD ( SEGS , seg , STR_LIST , " PE Ranges " , list , 0 , peranges , seg_pe_ranges , " Ranges of Physical Extents of underlying devices in command line format (deprecated, use seg_le_ranges for common format). " , 0 )
FIELD ( SEGS , seg , STR_LIST , " LE Ranges " , list , 0 , leranges , seg_le_ranges , " Ranges of Logical Extents of underlying devices in command line format. " , 0 )
FIELD ( SEGS , seg , STR_LIST , " Metadata LE Ranges " , list , 0 , metadataleranges , seg_metadata_le_ranges , " Ranges of Logical Extents of underlying metadata devices in command line format. " , 0 )
FIELD ( SEGS , seg , STR_LIST , " Devices " , list , 0 , devices , devices , " Underlying devices used with starting extent numbers. " , 0 )
FIELD ( SEGS , seg , STR_LIST , " Metadata Devs " , list , 0 , metadatadevices , metadata_devices , " Underlying metadata devices used with starting extent numbers. " , 0 )
FIELD ( SEGS , seg , STR , " Monitor " , list , 0 , segmonitor , seg_monitor , " Dmeventd monitoring status of the segment. " , 0 )
FIELD ( SEGS , seg , STR , " CachePolicy " , list , 0 , cache_policy , cache_policy , " The cache policy (cached segments only). " , 0 )
FIELD ( SEGS , seg , STR_LIST , " CacheSettings " , list , 0 , cache_settings , cache_settings , " Cache settings/parameters (cached segments only). " , 0 )
2019-10-04 18:02:20 +03:00
FIELD ( SEGS , seg , BIN , " VDOCompression " , list , 0 , vdo_compression , vdo_compression , " Set for compressed LV (vdopool). " , 0 )
FIELD ( SEGS , seg , BIN , " VDODeduplication " , list , 0 , vdo_deduplication , vdo_deduplication , " Set for deduplicated LV (vdopool). " , 0 )
FIELD ( SEGS , seg , BIN , " VDOMetadataHints " , list , 0 , vdo_use_metadata_hints , vdo_use_metadata_hints , " Use REQ_SYNC for writes (vdopool). " , 0 )
FIELD ( SEGS , seg , NUM , " VDOMinimumIOSize " , list , 0 , vdo_minimum_io_size , vdo_minimum_io_size , " Minimum acceptable IO size (vdopool). " , 0 )
FIELD ( SEGS , seg , SIZ , " VDOBlockMapCacheSize " , list , 0 , vdo_block_map_cache_size , vdo_block_map_cache_size , " Allocated caching size (vdopool). " , 0 )
FIELD ( SEGS , seg , NUM , " VDOBlockMapEraLength " , list , 0 , vdo_block_map_era_length , vdo_block_map_era_length , " Speed of cache writes (vdopool). " , 0 )
FIELD ( SEGS , seg , BIN , " VDOSparseIndex " , list , 0 , vdo_use_sparse_index , vdo_use_sparse_index , " Sparse indexing (vdopool). " , 0 )
FIELD ( SEGS , seg , SIZ , " VDOIndexMemorySize " , list , 0 , vdo_index_memory_size , vdo_index_memory_size , " Allocated indexing memory (vdopool). " , 0 )
FIELD ( SEGS , seg , SIZ , " VDOSlabSize " , list , 0 , vdo_slab_size , vdo_slab_size , " Increment size for growing (vdopool). " , 0 )
FIELD ( SEGS , seg , NUM , " VDOAckThreads " , list , 0 , vdo_ack_threads , vdo_ack_threads , " Acknowledging threads (vdopool). " , 0 )
FIELD ( SEGS , seg , NUM , " VDOBioThreads " , list , 0 , vdo_bio_threads , vdo_bio_threads , " IO submitting threads (vdopool). " , 0 )
FIELD ( SEGS , seg , NUM , " VDOBioRotation " , list , 0 , vdo_bio_rotation , vdo_bio_rotation , " IO enqueue (vdopool). " , 0 )
FIELD ( SEGS , seg , NUM , " VDOCPUThreads " , list , 0 , vdo_cpu_threads , vdo_cpu_threads , " CPU threads for compression and hashing (vdopool). " , 0 )
FIELD ( SEGS , seg , NUM , " VDOHashZoneThreads " , list , 0 , vdo_hash_zone_threads , vdo_hash_zone_threads , " Threads for subdivide parts (vdopool). " , 0 )
FIELD ( SEGS , seg , NUM , " VDOLogicalThreads " , list , 0 , vdo_logical_threads , vdo_logical_threads , " Logical threads for subdivide parts (vdopool). " , 0 )
FIELD ( SEGS , seg , NUM , " VDOPhysicalThreads " , list , 0 , vdo_physical_threads , vdo_physical_threads , " Physical threads for subdivide parts (vdopool). " , 0 )
FIELD ( SEGS , seg , NUM , " VDOMaxDiscard " , list , 0 , vdo_max_discard , vdo_max_discard , " Maximum discard size volume can recieve (vdopool). " , 0 )
FIELD ( SEGS , seg , STR , " VDOWritePolicy " , list , 0 , vdo_write_policy , vdo_write_policy , " Specified write policy (vdopool). " , 0 )
FIELD ( SEGS , seg , SIZ , " VDOHeaderSize " , list , 0 , vdo_header_size , vdo_header_size , " Header size at front of vdopool. " , 0 )
2016-12-01 16:39:21 +03:00
/*
* End of SEGS type fields
*/
2005-04-20 00:58:25 +04:00
2016-12-01 16:39:21 +03:00
/*
* PVSEGS type fields
*/
2016-03-08 22:50:22 +03:00
FIELD ( PVSEGS , pvseg , NUM , " Start " , pe , 0 , uint32 , pvseg_start , " Physical Extent number of start of segment. " , 0 )
FIELD ( PVSEGS , pvseg , NUM , " SSize " , len , 0 , uint32 , pvseg_size , " Number of extents in segment. " , 0 )
2016-12-01 16:39:21 +03:00
/*
* End of PVSEGS type fields
*/
2003-04-02 23:14:43 +04:00
/* *INDENT-ON* */