4.8. LVM 的自定义报告

可使用 pvslvsvgs 命令生成简洁且可自定义的 LVM 对象报告。这些命令生成的报告包括每行一个对象的输出结果。每行包含与该对象有关的属性字段顺序列表。有五种方法可用来选择要报告的对象:即根据物理卷、卷组、逻辑卷、物理卷片段及逻辑卷片段报告。
以下小节提供:
  • 用来控制所生成报告格式的命令参数概述。
  • 可为每个 LVM 对象选择的字段列表。
  • 可用来对生成的报告进行排序的命令参数概述。
  • 指定报告输出结果单位简介。

4.8.1. 格式控制

是否使用 pvslvs 或者 vgs 命令可决定显示字段的默认设置及排序顺序。可使用下面的参数控制这些命令的输出结果:
  • 可使用 -o 参数将显示的字段改为默认值以外的内容。例如:下面的输出结果是 pvs 命令的默认显示内容(即显示物理卷信息)。
    # 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
    下面的命令只显示物理卷名称和大小。
    # pvs -o pv_name,pv_size
      PV         PSize
      /dev/sdb1  17.14G
      /dev/sdc1  17.14G
      /dev/sdd1  17.14G
  • 可将加号(+)于 -o 参数合用,在输出结果中附加一个字段。
    下面的示例除显示默认字段外还显示该物理卷的 UUID。
    # 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
  • 在命令中添加 -v 参数可显示额外的字段。例如:pvs -v 命令会在默认字段外显示 DevSizePV 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.14G  17.14G yvfvZK-Cf31-j75k-dECm-0RZ3-0dGW-tUqkCS
  • --noheadings 参数会取消标题行。这在编写脚本时有用。
    下面的示例将 --noheadings 参数与 pv_name 参数联合使用生成所有物理卷的列表:
    # pvs --noheadings -o pv_name
      /dev/sdb1
      /dev/sdc1
      /dev/sdd1
  • --separator separator 参数使用 separator 分离各个字段。
    下面的示例使用等号(=)分离 pvs 命令的默认输出字段。
    # 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
    要在使用 separator 参数时保持字段对齐,请将 separator 参数与 --aligned 参数配合使用。
    # 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
可使用 lvs 或者 vgs 命令的 -P 参数显示有关失败卷的信息,否则该信息不会出现在输出结果中。有关这个参数字段的输出结果详情,请查看 第 6.2 节 “在失败的设备中显示信息。”
有关完整显示参数列表,请查看 pvs(8)、vgs(8) 和 lvs(8) man page。
卷组字段可与物理卷(和物理卷片段)字段或者逻辑卷(和逻辑卷片段)字段混合,但物理卷和逻辑卷字段不能混合。例如:下面的命令会每行显示一个物理卷的输出结果。
# 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

4.8.2. 对象选择

本小节提供可用来使用 pvsvgslvs 命令显示 LVM 对象信息的表格。
为方便起见,如果字段名称前缀与该命令的默认匹配,则可将其去掉。例如:在 pvs 命令中,name 的含义是 pv_name,但在 vgs 命令中,会将 name 解读为 vg_name
执行下面的命令与执行 pvs -o pv_free 等同。
# pvs -o free
  PFree
  17.14G
  17.09G
  17.14G

注意

在之后的发行本中,pvsvgslvs 输出结果中 attribute 字段中的字符数可能会增加。现有字符字段不会更改位置,但可在结尾处添加新字段。为具体属性字符编写脚本时应考虑这个因素,并根据字符与该字段起始位置的相对位置搜索字符,而不是根据其与该字段的截止位置的相对位置进行搜索。例如:要在 lv_attr 字段的第九个字节搜索字符 p,可搜索字符串 "^/........p/",但不应搜索字符串 "/*p$/"。

pvs 命令

表 4.2 “pvs Display 字段” 列出 pvs 目录的显示参数以及在标头显示中出现的字段名称及该字段的描述。

表 4.2. pvs Display 字段

参数标头描述
dev_sizeDevSize该物理卷所在底层设备的大小
pe_start1st PE底层设备中的第一个物理扩展偏差
pv_attrAttr物理卷状态:(a)可分配;或者(x)导出。
pv_fmtFmt物理卷元数据格式(lvm2 或者 lvm1
pv_freePFree物理卷中的剩余空间
pv_namePV物理卷名称
pv_pe_alloc_countAlloc已使用物理扩展数
pv_pe_countPE物理扩展数
pvseg_sizeSSize物理卷的片段大小
pvseg_start起始物理卷片段的起始物理扩展
pv_sizePSize物理卷大小
pv_tagsPV 标签附加到物理卷的 LVM 标签
pv_used已使用该物理卷中目前已使用的空间数量
pv_uuidPV UUID该物理卷的 UUID
pvs 命令默认显示以下字段:pv_name, vg_name, pv_fmt, pv_attr, pv_size, pv_free。该显示结果按 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
使用 pvs 命令的 -v 参数值默认显示中添加以下字段:dev_sizepv_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
可使用 pvs 命令的 --segments 参数显示每个物理卷片段的信息。一个片段就是一个扩展组。如果要了解逻辑卷是否碎片化,查看片段视图很有帮助。
pvs --segments 命令默认显示以下字段:pv_name, vg_name, pv_fmt, pv_attr, pv_size, pv_free, pvseg_start, pvseg_size。结果根据物理卷中的 pv_namepvseg_size 排序。
# 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
可使用 pvs -a 命令查看已被 LVM 探测到但尚未初始化为 LVM 物理卷的设备。
# 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

vgs 命令

表 4.3 “vgs Display 字段” 列出 vgs 命令的显示参数以及在标头显示中出现的字段名称及该字段的描述。

表 4.3. vgs Display 字段

参数标头描述
lv_count#LV卷组所包含逻辑卷数
max_lvMaxLV卷组允许的最大逻辑卷数(0 表示无限大)
max_pvMaxPV卷组允许的最大物理卷数(0 表示无限)
pv_count#PV定义该卷组的物理卷数
snap_count#SN卷组包含的快照数
vg_attrAttr卷组状态:(w)可写入;(r)只读;(z)可重新定义大小;(x)可导出;(p)部分;以及(c)集群。
vg_extent_count#Ext卷组中的物理扩展数
vg_extent_sizeExt卷组中的物理扩展大小
vg_fmtFmt卷组的元数据格式(lvm2 或者 lvm1
vg_freeVFree卷组中剩余的可用空间大小
vg_free_count可用卷组中的可用物理扩展数
vg_nameVG卷组名称
vg_seqnoSeq代表卷组修改的次数
vg_sizeVSize卷组大小
vg_sysidSYS IDLVM1 System ID
vg_tagsVG 标签附加到卷组的 LVM 标签
vg_uuidVG UUID卷组的 UUID
vgs 命令默认显示以下字段: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
使用 vgs 命令的 -v 参数值默认显示着添加以下字段:vg_extent_sizevg_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

lvs 命令

表 4.4 “lvs 显示字段” 列出了 lvs 命令的显示参数以及在标头显示中的字段名称以及该字段的描述。

表 4.4. lvs 显示字段

参数标头描述
chunksize
chunk_size
区块快照卷的单位大小
copy_percentCopy%镜像逻辑卷的同步百分比;也可在使用 pv_move 命令移动物理扩展时使用。
devices设备组成逻辑卷的底层设备:即物理卷、逻辑卷及起始物理扩展和逻辑扩展
lv_attrAttr逻辑卷状态。逻辑卷的属性字节如下:
字节 1:卷类型: (m)镜像卷,(M) 没有初始同步的镜像卷,(o)原始卷,(O)附带合并快照的原始卷,(r)阵列,(R)没有初始同步的阵列,(s)快照,(S)合并快照,(p)pvmove,(v)虚拟,(i)镜像或阵列映象,(I)未同步的镜像或阵列映象,(l)映象日志设备,(c)底层转换卷,(V)精简卷,(t)精简池,(T)精简池数据,(e)阵列或精简池元数据或池元数据备件,
字节 2:授权:(w)写入,(r)只读,(R)非只读卷的只读激活
字节 3:分配策略:(a)任意位置,(c)相邻,(i)继承,(l)紧邻,(n)常规。如果该卷目前锁定无法进行分配更改,则该字母会呈大写状态。例如执行 pvmove 命令时。
字节 4:(m)固定镜像
字节 5:状态:(a)激活, (s)挂起, (I) 无效快照, (S) 无效挂起快照, (m) 快照合并失败,(M) 挂起快照合并失败,(d) 显示的映射设备不包含表格,(i) 显示的映射设备中包含停用表格。
字节 6:设备 (o) 开启
字节 7:目标类型: (m)镜像,(r) RAID,(s) 快照,(t) 精简,(u)未知,(v) 虚拟。这样可将有类似内核目标的逻辑卷分在一组。比如镜像映象、镜像日志以及镜像本身分为组(m),它们使用原始设备映射器内核驱动程序,使用 md raid 内核驱动程序的类似的 raid 设备则分组为(r)。使用原始设备映射器驱动程序的快照则分组为(s),使用精简配置驱动程序的精简卷快照则分组为(t)。
字节 8:使用前,以设置为 0 的块覆盖新分配了数据的块。
字节 9:卷正常情况:(p) 部分正常,(r) 需要刷新,(m) 存在映射错误,(w) 大部分写入。(p) 部分正常表示该系统中缺少这个逻辑卷使用的一个或多个物理卷。(p) 部分正常表示这个 RAID 逻辑卷使用的一个或多个物理卷有写入错误。该写入错误可能是由于该物理卷故障造成,也可能表示该物理卷正在出现问题。应刷新或替换该设备。(m) 存在映射错误表示 RAID 逻辑卷中有阵列不一致的部分。在 RAID 逻辑卷中启动 check 操作就会发现这些不一致之处。(取消该操作,可使用 lvchange 命令在 RAID 逻辑卷中执行 checkrepair )。(w) 大部分写入表示已将 RAID 1 逻辑卷中的设备标记为大部分写入。
字节 10:(k) 跳过激活:将该卷标记为在激活过程中跳过。
lv_kernel_majorKMaj逻辑卷的实际主要设备数(若未激活则为 -1)
lv_kernel_minorKMIN逻辑卷的实际次要设备数(若未激活则为 -1)
lv_majorMaj逻辑卷的持久主要设备数(若未指定则为 -1)
lv_minorMin逻辑卷的持久次要设备数(若未指定则为 -1)
lv_nameLV逻辑卷名称
lv_sizeLSize逻辑卷大小
lv_tagsLV 标签附加到逻辑卷的 LVM 标签
lv_uuidLV UUID逻辑卷的 UUID
mirror_logLog镜像日志所在设备
modules模块需要使用这个逻辑卷的对应内核设备映射器目标
move_pv移动使用 pvmove 命令创建的临时逻辑卷之源物理卷
originOrigin快照卷的原始设备
regionsize
region_size
区域镜像逻辑卷的单元大小
seg_count#Seg逻辑卷中的片段数
seg_sizeSSize逻辑卷的片段大小
seg_start起始逻辑卷中的片段偏移
seg_tagsSeg 标签附加到逻辑卷片段的 LVM 标签
segtype类型逻辑卷的片段类型(例如:镜像、条带、线性)
snap_percentSnap%目前使用的快照卷百分比
stripes#Str逻辑卷中的条状卷或镜像卷数
stripesize
stripe_size
条带条带逻辑卷的单元大小
lvs 命令默认显示下面的字段:lv_namevg_namelv_attrlv_sizeoriginsnap_percentmove_pvmirror_logcopy_percentconvert_lv。默认根据卷组中的 vg_namelv_name 排序。
# 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
使用 lvs 命令的 -v 参数将下面的字段添加到默认显示中:seg_countlv_majorlv_minorlv_kernel_majorlv_kernel_minorlv_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
可使用 lvs 命令的 --segments 参数显示默认栏信息,并强调片段信息。使用 segments 参数后,seg 前缀为自选项。lvs --segments 命令默认显示下面的字段:lv_namevg_namelv_attrstripessegtypeseg_size。默认显示是根据卷组的 vg_namelv_name,以及该逻辑卷的 seg_start 排序。如果逻辑卷碎片化,这个命令的输出结果会体现此状态。
# 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
使用 lvs --segments 命令的 -v 参数在默认显示着添加以下字段:seg_startstripesizechunksize
# 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
下面的示例演示了在已配置逻辑卷的系统中运行 lvs 命令的输出结果,以及运行附加 segments 参数的 lvs 命令的输出结果。
# 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. 将 LVM 报告排序

通常必须生成 lvsvgs 或者 pvs 命令的整个输出结果,并在可将其排序并正确对齐前保存。可指定 --unbuffered 参数在生成后即刻显示未排序的输出结果。
要制定可替换的列排序顺序,请使用任意报告命令的 -O 参数。不一定要在输出结果中包含这些字段。
以下示例显示 pvs 命令的输出结果,其中显示内容包括物理卷名称、大小及可用空间。
# 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
以下示例显示同样的输出结果,但根据可用空间字段排序。
# 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
以下示例表示不需要显示用来排序的字段内容。
# pvs -o pv_name,pv_size -O pv_free
  PV         PSize
  /dev/sdc1  17.14G
  /dev/sdd1  17.14G
  /dev/sdb1  17.14G
要显示反向排序,请在 -O 参数前指定 的字段前添加 - 字符。
# 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

4.8.4. 指定单位

要指定 LVM 报告显示的单位,请使用该报告命令的 --units 参数。可指定 (b)、(k)、(m)、(g)、(t)、(e)xabytes、(p) 和 (h)。默认显示为 human-readable(用户可读)。可在 lvm.conf 文件的 global 部分设置 units 参数覆盖默认值。
以下示例采用 MB 指定 pvs 命令的输出结果,而不是默认的 GB。
# 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
默认情况是以 2 的次方数(1024 的倍数)显示单位。可使用大写单位(B、K、M、G、T、H)以 1000 的倍数显示单位。
下面的命令采用 1024 的倍数(即默认行为)显示命令输出结果。
# 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
下面的命令采用 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
还可以指定 (s) 扇区(默认为 512 字节)或自定义单位。
下面的示例以扇区数显示 pvs 命令的输出结果。
# 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
下面的示例以 4MB 为单位显示 pvs 命令的输出结果。
# 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

为了尽快向用户提供最新的信息,本文档可能会包括由机器自动从英文原文翻译的内容。如需更多信息,请参阅此说明。