Путеводитель по Руководству Linux

  User  |  Syst  |  Libr  |  Device  |  Files  |  Other  |  Admin  |  Head  |



   lvmreport    ( 7 )

отчеты LVM и связанные функции (LVM reporting and related features)

  Name  |  Description  |    Usage    |  Examples  |  See also  |

Использование (Usage)

Categorization based on reporting facility
       Based on functionality, commands which make use of the reporting
       infrastructure are divided in two groups:

Report-oriented commands These commands inform about current LVM state and their primary role is to display this information in compendious way. To make a distinction, we will name this report as main report. The set of report-only commands include: pvs, vgs, lvs, pvdisplay, vgdisplay, lvdisplay, lvm devtypes, lvm fullreport. For further information about main report, see Main report specifics.

Processing-oriented commands These commands are responsible for changing LVM state and they do not contain any main report as identified for report-oriented commands, they only perform some kind of processing. The set of processing-oriented commands includes: pvcreate, vgcreate, lvcreate, pvchange, vgchange, lvchange, pvremove, vgremove, lvremove, pvresize, vgextend, vgreduce, lvextend, lvreduce, lvresize, lvrename, pvscan, vgscan, lvscan, pvmove, vgcfgbackup, vgck, vgconvert, vgexport, vgimport, vgmknodes.

If enabled, so called log report is either displayed solely (for processing-oriented commands) or in addition to main report (for report-oriented commands). The log report contains a log of operations, messages and per-object status with complete object identification collected during LVM command execution. See Log report specifics for more information about this report type.

Terms When describing reporting functionality and features in this text, we will use terms row and column. By row we mean series of values reported for single entity (for example single PV, VG or LV). Each value from the row then belongs to a column of certain type. The columns have column headings which are short descriptions for the columns. The columns are referenced by column names. Please note that this text is also using term field interchangeably with the term column. Most of the time the term columns is abbreviated as col in configuration.

Common report configuration settings and command line options There are common configuration settings and command line options which apply to both main report and log report. Following lists contain all of them, separated into groups based on their use.

Common configuration settings Changing report output format, composition and other output modifiers: - global/suffix - global/units - report/aligned - report/binary_values_as_numeric - report/columns_as_rows - report/compact_output - report/compact_output_cols - report/headings - report/list_item_separator - report/mark_hidden_devices - report/output_format - report/prefixes - report/quoted - report/separator - report/time_format - report/two_word_unknown_device

Special settings - report/buffered

This document does not describe these settings in more detail - if you need detailed information, including values which are accepted for the settings, please run lvmconfig --type default --withcomments <setting>. There are more configuration settings in addition to the common set listed above, but they are specific to either main report or log report, see main report specifics and log report specifics for these settings. Besides configuring reports globally by using configuration settings, there are also command line options you can use to extend, override or further specify the report configuration.

Common command line options Definition of the set of fields to use

-o|--options FieldSet Field set to use. See main report specifics and log report specifics for information about field sets configured with global configuration settings that this option overrides.

-o|--options +FieldSet Fields to include to current field set. See main report specifics and log report specifics for information about field sets configured with global configuration settings that this option extends.

-o|--options -FieldSet Fields to exclude from current field set. See main report specifics and log report specifics for information about field sets configured with global configuration settings that this option reduces.

-o|--options #FieldSet Compaction of unused fields. Overrides report/compact_output_cols configuration setting.

Sorting

-O|--sort +FieldSet Fields to sort by in ascending order. See main report specifics and log report specifics for information about field sets configured with global configuration settings that this option overrides.

-O|--sort -FieldSet Fields to sort by in descending order. See main report specifics and log report specifics for information about fields sets configured with global configuration settings that this options overrides.

Selection

-S|--select Selection Define selection criteria for report output. For log report, this also overrides log/command_log_selection configuration setting, see also log report specifics.

Changing output format and composition

--reportformat Overrides report/output_format configuration setting.

--aligned Overrides report/aligned configuration setting.

--binary Overrides report/binary_values_as_numeric configuration setting.

--nameprefixes Overrides report/prefixes configuration setting.

--noheadings Overrides report/noheadings configuration setting.

--nosuffix Overrides global/suffix configuration setting.

--rows Overrides report/columns_as_rows configuration setting.

--separator Overrides report/separator configuration setting.

--units Overrides global/units configuration setting.

--unquoted Overrides report/quoted configuration setting.

Special options

--configreport ReportName This defines the ReportName for which any subsequent -o|--columns, -O|--sort or -S|--select applies to. See also Main report specifics and Log report specifics for possible ReportName values.

--logonly When an LVM command contains both main report and log report, this option suppresses the main report output and it causes the log report output to be displayed only.

--unbuffered Overrides report/buffered configuration setting.

The FieldSet mentioned in the lists above is a set of field names where each field name is delimited by "," character. Field set definition, sorting and selection may be repeated on command line (-o+/-o- includes/excludes fields to/from current list, for all the other repeatable options, the last value typed for the option on the command line is used). The Selection is a string with selection criteria, see also Selection paragraph below for more information about constructing these criteria.

Main report specifics The main report currently encompasses these distinct subtypes, referenced by their name - ReportName as listed below. The command in parenthesis is representative command that uses the main report subtype by default. Each subtype has its own configuration setting for global field set definition as well as sort field definition (listed below each individual ReportName):

pv representing report about Physical Volumes (pvs) - report/pvs_cols - report/pvs_sort

pvseg representing report about Physical Volume Segments (pvs --segments) - report/pvseg_cols - report/pvseg_sort

vg representing report about Volume Groups (vgs) - report/vgs_cols - report/vgs_sort

lv representing report about Logical Volumes (lvs) - report/lvs_cols - report/lvs_sort

seg representing report about Logical Volume Segments (lvs --segments) - report/segs_cols - report/segs_sort

full representing report combining all of the above as a whole (lvm fullreport) - report/pvs_cols_full - report/pvs_sort_full - report/pvsegs_cols_full - report/pvseg_sort_full - report/vgs_cols_full - report/vgs_sort_full - report/lvs_cols_full - report/lvs_sort_full - report/segs_cols_full - report/segs_sort_full

devtype representing report about device types (lvm devtypes) - report/devtypes_cols - report/devtypes_sort

Use pvs, vgs, lvs -o help or lvm devtypes -o help to get complete list of fields that you can use for main report. The list of fields in the help output is separated in groups based on which report type they belong to. Note that LVM can change final report type used if fields from different groups are combined together. Some of these combinations are not allowed in which case LVM will issue an error.

For all main report subtypes except full, it's not necessary to use --configreport ReportName to denote which report any subsequent -o, -O or -S option applies to as they always apply to the single main report type. Currently, lvm fullreport is the only command that includes more than one main report subtype. Therefore, the --configreport is particularly suitable for the full report if you need to configure each of its subreports in a different way.

Log report specifics You can enable log report with log/report_command_log configuration setting - this functionality is disabled by default. The log report contains a log collected during LVM command execution and then the log is displayed just like any other report known from main report. There is only one log report subtype as shown below together with related configuration settings for fields, sorting and selection:

log representing log report - log/command_log_cols - log/command_log_sort - log/command_log_selection

You always need to use --configreport log together with -o|--options, -O|--sort or -S|--selection to override configuration settings directly on command line for log report. When compared to main report, in addition to usual configuration settings for report fields and sorting, the log report has also configuration option for selection - report/command_log_selection. This configuration setting is provided for convenience so it's not necessary to use -S|--select on command line each time an LVM command is executed and we need the same selection criteria to be applied for log report. Default selection criteria used for log report are log/command_log_selection="!(log_type=status && message=success)". This means that, by default, log report doesn't display status messages about successful operation and it displays only rows with error, warning, print-type messages and messages about failure states (for more information, see log report content below).

Log report coverage Currently, when running LVM commands directly (not in LVM shell), the log report covers command's processing stage which is the moment when LVM entities are iterated and processed one by one. It does not cover any command initialization nor command finalization stage. If there is any message issued out of log report's coverage range, such message goes directly to output, bypassing the log report. By default, that is standard error output for error and warning messages and standard output for common print-like messages.

When running LVM commands in LVM shell, the log report covers the whole LVM command's execution, including command's processing as well as initialization and finalization stage. So from this point of view, the log report coverage is complete for executed LVM commands. Note that there are still a few moments when LVM shell needs to initialize itself before it even enters the main loop in which it executes LVM commands. Also, there is a moment when LVM shell needs to prepare log report properly for next command executed in the shell and then, after the command's run, the shell needs to display the log report for that recently executed command. If there is a failure or any other message issued during this time, the LVM will bypass log report and display messages on output directly.

For these reasons and for completeness, it's not possible to rely fully on log report as the only indicator of LVM command's status and the only place where all messages issued during LVM command execution are collected. You always need to check whether the command has not failed out of log report's range by checking the non-report output too.

To help with this, LVM can separate output which you can then redirect to any custom file descriptor that you prepare before running an LVM command or LVM shell and then you make LVM to use these file descriptors for different kinds of output by defining environment variables with file descriptor numbers. See also LVM_OUT_FD, LVM_ERR_FD and LVM_REPORT_FD environment variable description in lvm(8) man page.

Also note that, by default, reports use the same file descriptor as common print-like messages, which is standard output. If you plan to use log report in your scripts or any external tool, you should use LVM_OUT_FD, LVM_ERR_FD and LVM_REPORT_FD to separate all output types to different file descriptors. For example, with bash, that would be:

LVM_OUT_FD=3 LVM_ERR_FD=4 LVM_REPORT_FD=5 <lvm command> 3>out_file 4>err_file 5>report_file

Where the <lvm_command> is either direct LVM command or LVM shell. You can collect all three types of output in particular files then.

Log report content

Each item in the log report consists of these set of fields providing various information:

Basic information (mandatory):

log_seq_num Item sequence number. The sequence number is unique for each log item and it increases in the order of the log items as they appeared during LVM command execution.

log_type Type of log for the item. Currently, these types are used:

status for any status information that is logged

print for any common message printed while the log is collected

error for any error message printed while the log is collected

warn for any warning message printed while the log is collected

log_context Context of the log for the item. Currently, two contexts are identified:

shell for the log collected in the outermost code before and after executing concrete LVM commands

processing for the log collected while processing LVM entities during LVM command execution

Message (mandatory):

log_message Any message associated with current item. For status log type, the message contains either success or failure denoting current state. For print, error and warn log types, the message contains the exact message of that type that got issued.

Object information (used only if applicable):

log_object_type field Type of the object processed. Currently, these object types are recognized:

cmd for command as a whole

orphan for processing group of PVs not in any VG yet

pv for PV processing

label for direct PV label processing (without VG metadata)

vg for VG processing

lv for LV processing

log_object_name Name of the object processed.

log_object_id ID of the object processed.

log_object_group A group where the processed object belongs to.

log_object_group_id An ID of a group where the processed object belongs to.

Numeric status (used only if applicable):

log_errno Error number associated with current item.

log_ret_code Return code associated with current item.

You can also run lvm --configreport log -o help to to display complete list of fields that you may use for the log report.

Selection Selection is used for a report to display only rows that match selection criteria. All rows are displayed with the additional selected field (-o selected) displaying 1 if the row matches the Selection and 0 otherwise. The selection criteria are a set of statements combined by logical and grouping operators. The statement consists of a field name for which a set of valid values is defined using comparison operators. For complete list of fields names that you can use in selection, see the output of lvm -S help. The help output also contains type of values that each field displays enclosed in brackets.

List of operators recognized in selection criteria

Comparison operators (cmp_op) =~ matching regular expression. !~ not matching regular expression. = equal to. != not equal to. >= greater than or equal to. > greater than <= less than or equal to. < less than.

Binary logical operators (cmp_log) && all fields must match , all fields must match || at least one field must match # at least one field must match

Unary logical operators ! logical negation

Grouping operators ( left parenthesis ) right parenthesis [ list start ] list end { list subset start } list subset end

Field types and selection operands

Field type restricts the set of operators and values that you may use with the field when defining selection criteria. You can see field type for each field if you run lvm -S help where you can find the type name enclosed in square brackets. Currently, LVM recognizes these field types in reports:

string for set of characters (for each string field type, you can use either string or regular expression - regex for the value used in selection criteria)

string list for set of strings

number for integer value

size for integer or floating point number with size unit suffix (see also lvcreate(8) man page and description for "-L|--size" option for the list of recognized suffixes)

percent for floating point number with or without % suffix (e.g. 50 or 50%)

time for time values

When using string list in selection criteria, there are several ways how LVM can match string list fields from report, depending on what list grouping operator is used and what item separator is used within that set of items. Also, note that order of items does not matter here.

matching the set strictly where all items must match - use [ ], e.g. ["a","b","c"]

matching a subset of the set - use { } with "," or "&&" as item delimiter, e.g. {"a","b","c"}

matching an intersection with the set - use { } with "#" or "||" as item delimiter, e.g. {"a" || "b" || "c"}

When using time in your selection criteria, LVM can recognize various time formats using standard, absolute or freeform expressions. For examples demonstrating time expressions in selection criteria, see EXAMPLES section.

Standard time format

- date YYYY-MM-DD YYYY-MM, auto DD=1 YYYY, auto MM=01 and DD=01

- time hh:mm:ss hh:mm, auto ss=0 hh, auto mm=0, auto ss=0

- timezone +hh:mm or -hh:mm +hh or -hh

The full date/time specification is YYYY-MM-DD hh:mm:ss. Users are able to leave date/time parts from right to left. Whenever these parts are left out, a range is assumed automatically with second granularity. For example:

"2015-07-07 9:51" means range of "2015-07-07 9:51:00" - "2015-07-07 9:51:59" "2015-07" means range of "2015-07-01 0:00:00" - "2015-07-31 23:59:59" "2015" means range of "2015-01-01 0:00:00" - "2015-12-31 23:59:59"

Absolute time format Absolute time is defined as number of seconds since the Epoch (1970:01:01 00:00 +00:00).

- @seconds

Freeform time format - weekday names ("Sunday" - "Saturday" or abbreviated as "Sun" - "Sat") - labels for points in time ("noon", "midnight") - labels for a day relative to current day ("today", "yesterday") - points back in time with relative offset from today (N is a number) "N" "seconds" / "minutes" / "hours" / "days" / "weeks" / "years" "ago" "N" "secs" / "mins" / "hrs" ... "ago" "N" "s" / "m" / "h" ... "ago" - time specification either in hh:mm:ss format or with AM/PM suffixes - month names ("January" - "December" or abbreviated as "Jan" - "Dec")

Informal grammar specification

- STATEMENT = column cmp_op VALUE | STATEMENT log_op STATEMENT | (STATEMENT) | !(STATEMENT)

- VALUE = [VALUE log_op VALUE] For list-based types: string list. Matches strictly. The log_op must always be of one type within the whole list value.

- VALUE = {VALUE log_op VALUE} For list-based types: string list. Matches a subset. The log_op must always be of one type within the whole list value.

- VALUE = value For scalar types: number, size, percent, string (or string regex).