4.3. 卷组管理

本小节论述了执行各种卷组管理的命令。

4.3.1. 创建卷组

请使用 vgcreate 命令为一个或多个物理卷创建卷组。vgcreate 命令根据名称新建卷组,并至少在其中添加一个物理卷。
以下命令创建名为 vg1,包含物理卷 /dev/sdd1/dev/sde1 的卷组。
# vgcreate vg1 /dev/sdd1 /dev/sde1
使用物理卷创建卷组时,默认将其磁盘空间分成大小为 4MB 的扩展。这个扩展是逻辑卷增大或减小的最小的量。大的扩展数目不会影响逻辑卷的 I/O 性能。
如果默认扩展大小不适合您,可使用 vgcreate 命令的 -s 选项指定扩展大小。可以使用 vgcreate 命令的 -p-l 参数设定物理卷或逻辑卷数量限制。
默认情况下,卷组会根据常识规则分配物理扩展,比如不要在同一物理卷中放置平行条带。这是 normal 分配策略。可以使用 vgcreate 命令的 --alloc 参数指定 contiguousanywhere 或者 cling 策略。通常只在特殊情况下才会需要 normal 以外的分配策略,比如或指定非常规或非标准扩展。有关 LVM 如何分配物理扩展的详情,请查看 第 4.3.2 节 “LVM 分配”
LVM 卷组及底层逻辑卷均包含在 /dev 目录的设备特殊文件目录树中,其布局为:
/dev/vg/lv/
例如:如果创建了两个卷组,即 myvg1myvg2,每个均包含名为 lv01lv02lv03 的三个逻辑卷,则会生成六个设备特殊文件,即:
/dev/myvg1/lv01
/dev/myvg1/lv02
/dev/myvg1/lv03
/dev/myvg2/lv01
/dev/myvg2/lv02
/dev/myvg2/lv03
如果对应逻辑卷目前未激活,则不会显示该设备的特殊文件。
64 位 CPU 中的最大 LVM 的设备大小为 8 EB。

4.3.2. LVM 分配

当 LVM 操作需要为一个或多个逻辑卷分配物理扩展时,分配的步骤如下:
  • 在卷组中生成一组完整的未分配物理扩展供使用。如果在命令后结尾处提供任何物理扩展范围,则只会使用指定物理卷中符合那些范围的未分配物理扩展。
  • 将依次尝试每个分配策略,从最严格的策略(即 contiguous)开始,到使用 --alloc 选项指定的分配策略结束,也可以将具体逻辑卷或卷组设定为默认选项。在每个策略中,从需要填充的空白逻辑卷空间数字最小的逻辑扩展开始,该空间填充后,则根据分配策略限制依次填充。如果需要更多空间,则 LVM 会移至下一个策略。
分配策略限制如下:
  • contiguous 分配策略要求任意逻辑扩展(不是逻辑卷的第一个逻辑扩展)的物理位置紧邻它前面一个逻辑扩展的物理位置。
    逻辑卷为条带或镜像时,contiguous 分配限制可独立应用于每个需要空间的条带或镜像(leg)。
  • cling 分配策略要求将要添加到现有逻辑卷中的任意逻辑扩展使用的物理卷条件到任意逻辑扩展使用的物理卷条件到之前已经由那个逻辑卷中的一个逻辑扩展使用的现有逻辑卷中。如果已定义配置参数 allocation/cling_tag_list,则在两个物理卷中出现任何一个列出的标签时,就将这两个物理卷视为匹配。这样就可以分配为目的,标记有相似属性(比如其物理位置)的物理卷,并将其视为对等。有关与 LVM 标签一同使用 cling 策略指定扩展 LVM 卷时要附加物理卷的详情,请查看 第 4.4.15.3 节 “使用 cling 分配策略扩展逻辑卷”
    逻辑卷为条带或镜像时,cling 分配限制可独立应用于每个需要空间的条带或镜像(leg)。
  • normal 分配策略不会在平行逻辑卷中使用相同的偏移选择与分配给该平行逻辑卷(即不同的条带或镜像映象/分支)的逻辑扩展共享同一物理卷的物理扩展。
    分配镜像日志的同时分配逻辑卷以保留镜像数据时,normal 分配策略会首先尝试为该日志和数据选择不同类型的物理卷。如果无法实现,且将 allocation/mirror_logs_require_separate_pvs 配置参数设定为 0,它就会允许将部分数据记录到共享物理卷中。
    同样,分配精简池元数据时,normal 分配策略会与考虑镜像日志分配一样根据 allocation/thin_pool_metadata_require_separate_pvs 配置参数做决定。
  • 如果有足够的剩余扩展满足分配要求,但 normal 分配策略不会使用它们,则 anywhere 会使用,即使出现将两个条带放到同一物理卷,从而降低性能的情况。
可使用 vgchange 命令更改分配策略。

注意

如果根据定义的分配策略需要使用本小节外的任意布局行为,则应注意在以后的版本中可能有所变化。例如:如果在命令行中提供两个有相同可用剩余物理扩展数供分配的空物理卷,LVM 目前考虑使用每个卷以便将其列出;不保证今后的发行本仍保留这个属性。如果获取某个具体逻辑卷的特定布局很重要,则应使用 lvcreatelvconvert 步骤顺序构建,以便在每个步骤中应用分配策略,让 LVM 不会在布局上自由裁量。
要查看目前在任意具体示例中的分配进度方法,可查看 debug 日志输出结果,例如在命令中添加 -vvvv 选项。

4.3.3. 在集群中创建卷组

可使用 vgcreate 命令在集群环境中创建卷组,这与在单一节点中创建卷组是一样的。
默认情况下,所有可访问共享存储的计算机都可以看到使用 CLVM 在共享存储中创建的卷组。但也可以 使用 vgcreate 命令的 -c n 选项创建只能在该集群的一个节点中本地看到的卷组。
在集群环境中执行以下命令可在执行该命令节点中创建本地卷组。该命令创建名为 vg1,包含物理卷 /dev/sdd1/dev/sde1 的卷组。
# vgcreate -c n vg1 /dev/sdd1 /dev/sde1
可使用 vgchange 命令的 -c 选项指定现有卷组是本地卷组还是集群卷组,如 第 4.3.8 节 “更改卷组参数” 所述。
可使用 vgs 命令查看现有卷组是否为集群的卷组,如果是集群的卷组,则会显示 c 属性。下面的命令显示卷组 VolGroup00testvg1 属性。在这个示例中,VolGroup00 不是集群的卷组,而 testvg1 是集群的卷组,如 Attr 标题下的 c 属性所示。
# vgs
  VG            #PV #LV #SN Attr   VSize  VFree
  VolGroup00      1   2   0 wz--n- 19.88G    0
  testvg1         1   1   0 wz--nc 46.00G 8.00M
有关 vgs 命令的详情,请查看 第 4.3.5 节 “显示卷组” 第 4.8 节 “LVM 的自定义报告” 以及 vgs man page。

4.3.4. 在卷组中添加物理卷

请使用 vgextend 命令在现有卷组中添加额外的物理卷。vgextend 命令通过添加一个或多个可用物理卷增大卷组容量。
下面的命令在卷组 vg1 中添加物理卷 /dev/sdf1
# vgextend vg1 /dev/sdf1

4.3.5. 显示卷组

有两个命令可显示 LVM 卷组的属性:即 vgsvgdisplay
vgscan 命令扫描卷组的所有磁盘,并重新构建 LVM 缓存文件,同时显示卷组。有关 vgscan 命令的详情,请查看 第 4.3.6 节 “为卷组扫描磁盘以构建缓存文件”
vgs 命令使用可配置格式提供卷组信息,每行表示一个卷组。vgs 命令提供大量的格式控制,有助于脚本编写。有关使用 vgs 命令自定义输出结果的详情,请查看 第 4.8 节 “LVM 的自定义报告”
vgdisplay 命令采用固定格式显示卷组属性(比如大小、扩展、物理卷数等等)。下面的示例显示使用 vgdisplay 命令显示卷组 new_vg 的输出结果。如果无法指定卷组,则会显示当前所有卷组。
# vgdisplay new_vg
  --- Volume group ---
  VG Name               new_vg
  System ID
  Format                lvm2
  Metadata Areas        3
  Metadata Sequence No  11
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                3
  Act PV                3
  VG Size               51.42 GB
  PE Size               4.00 MB
  Total PE              13164
  Alloc PE / Size       13 / 52.00 MB
  Free  PE / Size       13151 / 51.37 GB
  VG UUID               jxQJ0a-ZKk0-OpMO-0118-nlwO-wwqd-fD5D32

4.3.6. 为卷组扫描磁盘以构建缓存文件

vgscan 命令扫描系统中的所有支持的磁盘设备以查找 LVM 物理卷和卷组。这样可在 /etc/lvm/cache/.cache 文件中构建缓存,以保持当前 LVM 设备列表。
LVM 会在系统启动及执行 LVM 操作时自动运行 vgscan 命令,比如当您执行 vgcreate 命令或 LVM 探测到非一致性时。

注意

更改硬件配置以及在某个节点中添加或删除设备时,可能需要手动运行 vgscan 命令,以便系统可以识别系统启动时不存在的新设备。这是必需的,例如当在 SAN 中的系统中添加新磁盘,或热插拔标记为物理卷的新磁盘时。
可在 lvm.conf 文件中定义过滤器进行限制以避免扫描具体设备。有关使用过滤器限制要扫描设备的详情,请查看 第 4.5 节 “使用过滤器控制 LVM 设备扫描”
以下是 vgscan 命令的输出结果示例。
# vgscan
  Reading all physical volumes.  This may take a while...
  Found volume group "new_vg" using metadata type lvm2
  Found volume group "officevg" using metadata type lvm2

4.3.7. 从卷组中删除物理卷

使用 vgreduce 命令从卷组中删除未使用的物理卷。vgreduce 命令通过删除一个或多个空物理卷来缩小卷组容量。这样可释放那些不同卷组中要使用的物理卷,或者将其从该系统中删除。
从卷组中删除物理卷前,可使用 pvdisplay 命令确定任何逻辑卷都没有使用该物理卷。
# pvdisplay /dev/hda1

-- Physical volume ---
PV Name               /dev/hda1
VG Name               myvg
PV Size               1.95 GB / NOT usable 4 MB [LVM: 122 KB]
PV#                   1
PV Status             available
Allocatable           yes (but full)
Cur LV                1
PE Size (KByte)       4096
Total PE              499
Free PE               0
Allocated PE          499
PV UUID               Sd44tK-9IRw-SrMC-MOkn-76iP-iftz-OVSen7
如果该物理卷仍被使用,则必须使用 pvmove 命令将该数据迁移到另一个物理卷中。然后使用 vgreduce 命令删除该物理卷。
下面的命令从卷组 my_volume_group 中删除物理卷 /dev/hda1
# vgreduce my_volume_group /dev/hda1
如果逻辑卷包含失败的物理卷,则不能使用那个逻辑卷。要从卷组中删除物理卷,如果没有在缺少的物理卷中分配逻辑卷,则可以使用 vgreduce 命令的 --removemissing 参数。
如果失败的物理卷包含 mirror 片段类型的逻辑卷镜像映像,则可以使用 vgreduce --removemissing --mirrorsonly --force 命令从镜像中删除该映像。这样只会删除该物理卷映像镜像的逻辑卷。
有关从 LVM 镜像失败中进行恢复的详情,请查看 第 6.3 节 “恢复 LVM 镜像错误”。有关从卷组中删除丢失的物理卷的详情,请查看 第 6.6 节 “从卷组中删除丢失的物理卷。”

4.3.8. 更改卷组参数

vgchange 命令是用来停用和激活卷组,如 第 4.3.9 节 “激活和停用卷组” 所述。还可以使用这个命令为现有卷组更改几个卷组参数。
下面的命令将卷组 vg00 的最大逻辑卷数改为 128。
# vgchange -l 128 /dev/vg00
有关可使用 vgchange 命令更改卷组参数的论述,请查看 vgchange(8) man page。

4.3.9. 激活和停用卷组

创建卷组时,默认为激活状态。就是说可访问该组中的逻辑卷,并可进行更改。
在有些情况下需要让卷组处于不活跃状态,并因此无法被内核所识别。要停用或激活卷组,则请使用 vgchange 命令的 -a--available)参数。
下面的示例停用卷组 my_volume_group
# vgchange -a n my_volume_group
如果启用集群的锁定,添加 ‘e’ 只在一个节点中激活或停用卷组;而添加 ‘l’ 则只可在本地节点中激活或停用卷组。使用单主机快照的逻辑卷总是独占激活,因为一次只能在一个节点中使用它们。
可使用 lvchange 命令停用独立逻辑卷,如 第 4.4.11 节 “更改逻辑卷组的参数” 所述。有关在集群内的独立节点中激活逻辑卷的详情,请查看 第 4.7 节 “在集群的独立节点中激活逻辑卷”

4.3.10. 删除卷组

请使用 vgremove 命令删除不包含逻辑卷的卷组。
# vgremove officevg
  Volume group "officevg" successfully removed

4.3.11. 分割卷组

请使用 vgsplit 命令拆分卷组的物理卷,并创建新卷组。
不能在卷组间拆分逻辑卷。每个现有逻辑卷必须全部位于物理卷中,构成旧的或新的卷组。但必要时,也可使用 pvmove 命令强制拆分。
下面的示例从卷组 bigvg 中拆分新卷组 smallvg
# vgsplit bigvg smallvg /dev/ram15
  Volume group "smallvg" successfully split from "bigvg"

4.3.12. 组合卷组

可使用 vgmerge 命令将两个卷组组合为一个卷组。如果卷的物理扩展大小相等,且两个卷组的物理卷和逻辑卷概述均在目的卷组的限制范围内,则可将不活跃“源”卷与活跃或不活跃“目的”卷合并。
下面的命令将不活跃卷组 my_vg 与活跃或不活跃卷组 databases 合并,并给出详细运行时信息。
# vgmerge -v databases my_vg

4.3.13. 备份卷组元数据

每次卷组和逻辑卷配置更改后都会自从生成元数据备份和归档,除非在 lvm.conf 文件中禁用了此功能。默认情况下是在 /etc/lvm/backup 文件中保存元数据备份,在 /etc/lvm/archive 文件中保存元数据归档。可使用 vgcfgbackup 命令手动将元数据备份到 /etc/lvm/backup 文件中。
vgcfrestore 命令使用归档在所有物理卷中恢复卷组元数据。
有关使用 vgcfgrestore 命令恢复物理卷元数据的详情,请查看 第 6.4 节 “恢复物理卷元数据”

4.3.14. 重新命名卷组

使用 vgrename 命令重命名现有卷组。
使用下面的命令将现有卷组 vg02 重命名为 my_volume_group
# vgrename /dev/vg02 /dev/my_volume_group
# vgrename vg02 my_volume_group

4.3.15. 将卷组移动到其他系统

可将 LVM 卷组移动到另一个系统。建议使用 vgexportvgimport 命令进行操作。

注意

可使用 vgimport 命令的 --force 参数。这样可导入缺少物理卷的卷组,并随后运行 vgreduce --removemissing 命令。
vgexport 可让不活跃的卷组服务访问该系统,以便拆离其物理卷。vgimport 命令可让机器在使用 vgexport 命令时期不活跃后重新可以访问该卷组。
请执行以下步骤将卷组从一个系统移动到另一个系统:
  1. 确定没有用户访问卷组活跃卷中的文件,然后卸载该逻辑卷。
  2. 使用 vgchange 命令的 -a n 参数将该卷组标记为不活跃,这样可防止卷组的进一步活动。
  3. 使用 vgexport 命令导出卷组。这样可防止要从中删除卷组的系统访问该卷组。
    导出卷组后,执行 pvscan 命令时,会在导出的卷组中显示该物理卷,如下面的示例所示。
    # pvscan
      PV /dev/sda1    is in exported VG myvg [17.15 GB / 7.15 GB free]
      PV /dev/sdc1    is in exported VG myvg [17.15 GB / 15.15 GB free]
      PV /dev/sdd1   is in exported VG myvg [17.15 GB / 15.15 GB free]
      ...
    下次关闭系统时,可拔出组成该卷组的磁盘,并将其连接到新系统中。
  4. 将磁盘插入新系统后,使用 vgimport 命令导入卷组,以便新系统可以访问该卷组。
  5. 使用 vgchange 命令的 -a y 参数激活卷组。
  6. 挂载该文件系统使其可用。

4.3.16. 重新创建卷组目录

请使用 vgmknodes 命令重新创建卷组和逻辑卷特殊文件。这个命令检查 /dev 目录中用来激活逻辑卷的 LVM2 特殊文件。它会创建所有缺少的特殊文件,并删除不使用的文件。
可在 vgscan 命令中指定 mknodes 参数将 vgmknodes 命令整合至 vgscan 命令。

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