4 * Copyright (C) 2002-2004 Sistina Software, Inc. All rights reserved.
5 * Copyright (C) 2004-2009 Red Hat, Inc. All rights reserved.
7 * This file is part of LVM2.
9 * This copyrighted material is made available to anyone wishing to use,
10 * modify, copy, or redistribute it subject to the terms and conditions
11 * of the GNU Lesser General Public License v.2.1.
13 * You should have received a copy of the GNU Lesser General Public License
14 * along with this program; if not, write to the Free Software Foundation,
15 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 * This file defines the fields (columns) for the reporting commands
23 * The 'FIELD' macro arguments are defined as follows:
24 * 1. report_type. An enum value that selects a specific
25 * struct dm_report_object_type in the _report_types array. The value is
26 * used to select the containing base object address (see *obj_get*
27 * functions) for any data values of any field in the report.
28 * 2. Containing struct. The structure that either contains the field data
29 * as a member or should be used to obtain the field data. The containing
30 * struct should match the base object of the report_type.
31 * 3. Field type. This must be either 'STR' or 'NUM'.
32 * 4. Report heading. This is the field heading that is displayed by the
34 * 5. Data value pointer. This argument is always a member of the
35 * containing struct. It may point directly to the data value (for example,
36 * lv_uuid - see _uuid_disp()) or may be used to derive the data value (for
37 * example, seg_count - see _lvsegcount_disp()). In the FIELD macro
38 * definition, it is used in an offset calculation to derive the offset to
39 * the data value from the containing struct base address. Note that in some
40 * cases, the argument is the first member of the struct, in which case the
41 * data value pointer points to the start of the struct itself (for example,
42 * 'lvid' field of struct 'lv').
43 * 6. Minimum display width. This is the minimum width used to display
44 * the field value, typically matching the width of the column heading.
45 * 7. Display function identifier. Used to derive the full name of the
46 * function that displays this field. Derivation is done by appending '_'
47 * then prepending this argument to '_disp'. For example, if this argument
48 * is 'uuid', the display function is _uuid_disp(). Adding a new field may
49 * require defining a new display function (for example _myfieldname_disp()),
50 * or re-use of an existing one (for example, _uint32_disp()).
51 * 8. Unique format identifier / field id. This name must be unique and is
52 * used to select fields via '-o' in the reporting commands (pvs/vgs/lvs).
53 * The string used to specify the field - the 'id' member of
54 * struct dm_report_field_type.
55 * 9. Description of field. This is a brief (ideally <= 52 chars) description
56 * of the field used in the reporting commands.
60 FIELD(LVS
, lv
, STR
, "LV UUID", lvid
.id
[1], 38, uuid
, "lv_uuid", "Unique identifier.")
61 FIELD(LVS
, lv
, STR
, "LV", lvid
, 4, lvname
, "lv_name", "Name. LVs created for internal use are enclosed in brackets.")
62 FIELD(LVS
, lv
, STR
, "Attr", lvid
, 4, lvstatus
, "lv_attr", "Various attributes - see man page.")
63 FIELD(LVS
, lv
, NUM
, "Maj", major
, 3, int32
, "lv_major", "Persistent major number or -1 if not persistent.")
64 FIELD(LVS
, lv
, NUM
, "Min", minor
, 3, int32
, "lv_minor", "Persistent minor number or -1 if not persistent.")
65 FIELD(LVS
, lv
, NUM
, "Rahead", lvid
, 6, lvreadahead
, "lv_read_ahead", "Read ahead setting in current units.")
66 FIELD(LVS
, lv
, STR
, "KMaj", lvid
, 4, lvkmaj
, "lv_kernel_major", "Currently assigned major number or -1 if LV is not active.")
67 FIELD(LVS
, lv
, STR
, "KMin", lvid
, 4, lvkmin
, "lv_kernel_minor", "Currently assigned minor number or -1 if LV is not active.")
68 FIELD(LVS
, lv
, NUM
, "KRahead", lvid
, 7, lvkreadahead
, "lv_kernel_read_ahead", "Currently-in-use read ahead setting in current units.")
69 FIELD(LVS
, lv
, NUM
, "LSize", size
, 5, size64
, "lv_size", "Size of LV in current units.")
70 FIELD(LVS
, lv
, NUM
, "#Seg", lvid
, 4, lvsegcount
, "seg_count", "Number of segments in LV.")
71 FIELD(LVS
, lv
, STR
, "Origin", lvid
, 6, origin
, "origin", "For snapshots, the origin device of this LV.")
72 FIELD(LVS
, lv
, NUM
, "OSize", lvid
, 5, originsize
, "origin_size", "For snapshots, the size of the origin device of this LV.")
73 FIELD(LVS
, lv
, NUM
, "Snap%", lvid
, 6, snpercent
, "snap_percent", "For snapshots, the percentage full if LV is active.")
74 FIELD(LVS
, lv
, NUM
, "Copy%", lvid
, 6, copypercent
, "copy_percent", "For mirrors and pvmove, current percentage in-sync.")
75 FIELD(LVS
, lv
, STR
, "Move", lvid
, 4, movepv
, "move_pv", "For pvmove, Source PV of temporary LV created by pvmove.")
76 FIELD(LVS
, lv
, STR
, "Convert", lvid
, 7, convertlv
, "convert_lv", "For lvconvert, Name of temporary LV created by lvconvert.")
77 FIELD(LVS
, lv
, STR
, "LV Tags", tags
, 7, tags
, "lv_tags", "Tags, if any.")
78 FIELD(LVS
, lv
, STR
, "Log", lvid
, 3, loglv
, "mirror_log", "For mirrors, the LV holding the synchronisation log.")
79 FIELD(LVS
, lv
, STR
, "Modules", lvid
, 7, modules
, "modules", "Kernel device-mapper modules required for this LV.")
81 FIELD(LABEL
, pv
, STR
, "Fmt", id
, 3, pvfmt
, "pv_fmt", "Type of metadata.")
82 FIELD(LABEL
, pv
, STR
, "PV UUID", id
, 38, uuid
, "pv_uuid", "Unique identifier.")
83 FIELD(LABEL
, pv
, NUM
, "DevSize", dev
, 7, devsize
, "dev_size", "Size of underlying device in current units.")
84 FIELD(LABEL
, pv
, STR
, "PV", dev
, 10, dev_name
, "pv_name", "Name.")
85 FIELD(LABEL
, pv
, NUM
, "PMdaFree", id
, 9, pvmdafree
, "pv_mda_free", "Free metadata area space on this device in current units.")
86 FIELD(LABEL
, pv
, NUM
, "PMdaSize", id
, 9, pvmdasize
, "pv_mda_size", "Size of smallest metadata area on this device in current units.")
88 FIELD(PVS
, pv
, NUM
, "1st PE", pe_start
, 7, size64
, "pe_start", "Offset to the start of data on the underlying device.")
89 FIELD(PVS
, pv
, NUM
, "PSize", id
, 5, pvsize
, "pv_size", "Size of PV in current units.")
90 FIELD(PVS
, pv
, NUM
, "PFree", id
, 5, pvfree
, "pv_free", "Total amount of unallocated space in current units.")
91 FIELD(PVS
, pv
, NUM
, "Used", id
, 4, pvused
, "pv_used", "Total amount of allocated space in current units.")
92 FIELD(PVS
, pv
, STR
, "Attr", status
, 4, pvstatus
, "pv_attr", "Various attributes - see man page.")
93 FIELD(PVS
, pv
, NUM
, "PE", pe_count
, 3, uint32
, "pv_pe_count", "Total number of Physical Extents.")
94 FIELD(PVS
, pv
, NUM
, "Alloc", pe_alloc_count
, 5, uint32
, "pv_pe_alloc_count", "Total number of allocated Physical Extents.")
95 FIELD(PVS
, pv
, STR
, "PV Tags", tags
, 7, tags
, "pv_tags", "Tags, if any.")
96 FIELD(PVS
, pv
, NUM
, "#PMda", id
, 5, pvmdas
, "pv_mda_count", "Number of metadata areas on this device.")
98 FIELD(VGS
, vg
, STR
, "Fmt", cmd
, 3, vgfmt
, "vg_fmt", "Type of metadata.")
99 FIELD(VGS
, vg
, STR
, "VG UUID", id
, 38, uuid
, "vg_uuid", "Unique identifier.")
100 FIELD(VGS
, vg
, STR
, "VG", name
, 4, string
, "vg_name", "Name.")
101 FIELD(VGS
, vg
, STR
, "Attr", cmd
, 5, vgstatus
, "vg_attr", "Various attributes - see man page.")
102 FIELD(VGS
, vg
, NUM
, "VSize", cmd
, 5, vgsize
, "vg_size", "Total size of VG in current units.")
103 FIELD(VGS
, vg
, NUM
, "VFree", cmd
, 5, vgfree
, "vg_free", "Total amount of free space in current units.")
104 FIELD(VGS
, vg
, STR
, "SYS ID", system_id
, 6, string
, "vg_sysid", "System ID indicating when and where it was created.")
105 FIELD(VGS
, vg
, NUM
, "Ext", extent_size
, 3, size32
, "vg_extent_size", "Size of Physical Extents in current units.")
106 FIELD(VGS
, vg
, NUM
, "#Ext", extent_count
, 4, uint32
, "vg_extent_count", "Total number of Physical Extents.")
107 FIELD(VGS
, vg
, NUM
, "Free", free_count
, 4, uint32
, "vg_free_count", "Total number of unallocated Physical Extents.")
108 FIELD(VGS
, vg
, NUM
, "MaxLV", max_lv
, 5, uint32
, "max_lv", "Maximum number of LVs allowed in VG or 0 if unlimited.")
109 FIELD(VGS
, vg
, NUM
, "MaxPV", max_pv
, 5, uint32
, "max_pv", "Maximum number of PVs allowed in VG or 0 if unlimited.")
110 FIELD(VGS
, vg
, NUM
, "#PV", pv_count
, 3, uint32
, "pv_count", "Number of PVs.")
111 FIELD(VGS
, vg
, NUM
, "#LV", cmd
, 3, lvcount
, "lv_count", "Number of LVs.")
112 FIELD(VGS
, vg
, NUM
, "#SN", cmd
, 3, snapcount
, "snap_count", "Number of snapshots.")
113 FIELD(VGS
, vg
, NUM
, "Seq", seqno
, 3, uint32
, "vg_seqno", "Revision number of internal metadata. Incremented whenever it changes.")
114 FIELD(VGS
, vg
, STR
, "VG Tags", tags
, 7, tags
, "vg_tags", "Tags, if any.")
115 FIELD(VGS
, vg
, NUM
, "#VMda", cmd
, 5, vgmdas
, "vg_mda_count", "Number of metadata areas in use by this VG.")
116 FIELD(VGS
, vg
, NUM
, "VMdaFree", cmd
, 9, vgmdafree
, "vg_mda_free", "Free metadata area space for this VG in current units.")
117 FIELD(VGS
, vg
, NUM
, "VMdaSize", cmd
, 9, vgmdasize
, "vg_mda_size", "Size of smallest metadata area for this VG in current units.")
119 FIELD(SEGS
, seg
, STR
, "Type", list
, 4, segtype
, "segtype", "Type of LV segment.")
120 FIELD(SEGS
, seg
, NUM
, "#Str", area_count
, 4, uint32
, "stripes", "Number of stripes or mirror legs.")
121 FIELD(SEGS
, seg
, NUM
, "Stripe", stripe_size
, 6, size32
, "stripesize", "For stripes, amount of data placed on one device before switching to the next.")
122 FIELD(SEGS
, seg
, NUM
, "Stripe", stripe_size
, 6, size32
, "stripe_size", "For stripes, amount of data placed on one device before switching to the next.")
123 FIELD(SEGS
, seg
, NUM
, "Region", region_size
, 6, size32
, "regionsize", "For mirrors, the unit of data copied when synchronising devices.")
124 FIELD(SEGS
, seg
, NUM
, "Region", region_size
, 6, size32
, "region_size", "For mirrors, the unit of data copied when synchronising devices.")
125 FIELD(SEGS
, seg
, NUM
, "Chunk", list
, 5, chunksize
, "chunksize", "For snapshots, the unit of data used when tracking changes.")
126 FIELD(SEGS
, seg
, NUM
, "Chunk", list
, 5, chunksize
, "chunk_size", "For snapshots, the unit of data used when tracking changes.")
127 FIELD(SEGS
, seg
, NUM
, "Start", list
, 5, segstart
, "seg_start", "Offset within the LV to the start of the segment in current units.")
128 FIELD(SEGS
, seg
, NUM
, "Start", list
, 5, segstartpe
, "seg_start_pe", "Offset within the LV to the start of the segment in physical extents.")
129 FIELD(SEGS
, seg
, NUM
, "SSize", list
, 5, segsize
, "seg_size", "Size of segment in current units.")
130 FIELD(SEGS
, seg
, STR
, "Seg Tags", tags
, 8, tags
, "seg_tags", "Tags, if any.")
131 FIELD(SEGS
, seg
, STR
, "PE Ranges", list
, 9, peranges
, "seg_pe_ranges", "Ranges of Physical Extents of underlying devices in command line format.")
132 FIELD(SEGS
, seg
, STR
, "Devices", list
, 7, devices
, "devices", "Underlying devices used with starting extent numbers.")
134 FIELD(PVSEGS
, pvseg
, NUM
, "Start", pe
, 5, uint32
, "pvseg_start", "Physical Extent number of start of segment.")
135 FIELD(PVSEGS
, pvseg
, NUM
, "SSize", len
, 5, uint32
, "pvseg_size", "Number of extents in segment.")