4.3. 卷组管理
这部分描述了执行卷组管理的各个方面的命令。
4.3.1. 创建卷组
以下命令创建一个名为
vg1
的卷组,其包含物理卷 /dev/sdd1
和 /dev/sde1
。
# vgcreate vg1 /dev/sdd1 /dev/sde1
当使用物理卷创建卷组时,默认情况下它的磁盘空间被分成 4MB 扩展。这个扩展是增大或者减小逻辑卷容量的最小值。大量的扩展不会影响逻辑卷的 I/O 性能。
如果默认扩展大小不合适,您可以在 vgcreate 命令中使用
-s
选项,来指定扩展大小。您可以使用 vgcreate 命令的 -p
和 -l
参数来限制卷组的物理或者逻辑卷数量。
默认情况下,卷组根据常识分配物理扩展,比如不会将平行条带放在同一个物理卷中。这是 normal 分配策略。您可以使用 vgcreate 命令的 --alloc 参数来指定contiguous 、anywhere 或 cling 的分配策略。通常,只在特殊情况下需要指定非通常或非标准扩展分配时,才需要不同于 normal 的分配策略。有关 LVM 如何分配物理扩展的详情,请参考 第 4.3.2 节 “LVM 分配”。
LVM 卷组和底层逻辑卷包含在
/dev
目录中的设备特殊文件目录树中,包括以下布局:
/dev/vg/lv/
例如,如果您创建两个卷组
myvg1
和 myvg2
,每个卷组都有三个名为 lv01
、lv02
和 lv03
的逻辑卷,这将创建六个设备特殊文件:
/dev/myvg1/lv01 /dev/myvg1/lv02 /dev/myvg1/lv03 /dev/myvg2/lv01 /dev/myvg2/lv02 /dev/myvg2/lv03
如果相应的逻辑卷目前没有激活,则设备特殊文件不会出现。
在 64 位 CPU 上,LVM 的最大设备大小为 8 Exabytes。
4.3.2. LVM 分配
当 LVM 操作需要为一个或多个逻辑卷分配物理扩展时,分配过程如下:
- 生成卷组中的未分配物理扩展的完整集以供考虑。如果您在命令行末尾提供任意物理扩展范围,则只考虑指定物理卷中的未分配物理扩展。
- 每个分配策略依次尝试,从最严格的策略(
contiguous
)开始,以使用--alloc
选项指定的分配策略结束,或者将其设为特定逻辑卷或卷组的默认策略。对于每个策略,使用需要填充的空逻辑卷空间的最小数值逻辑扩展进行工作,并尽量根据分配策略实施的限制分配空间。如果需要更多空间,LVM 会进入下一个策略。
分配策略的限制如下:
contiguous
分配政策要求不是逻辑卷的第一个逻辑扩展的任何逻辑扩展的物理位置紧邻它前面的逻辑扩展的物理位置。当逻辑卷为条带或镜像时,contiguous
分配限制将独立应用于每个需要空间的条带或镜像(leg)。cling
分配策略要求将用于任何逻辑卷的物理卷添加到现有逻辑卷中,该逻辑卷至少已被之前那个逻辑卷中的一个逻辑扩展使用。如果定义了配置参数allocation/cling_tag_list
,那么在两个物理卷上都存在任何列出的标签,则两个物理卷将被视为匹配。这允许对有类似属性(比如其物理位置)的物理卷组进行标记并视为分配的目的。有关将 cling 策略与 LVM 标签结合使用的更多信息,以指定在扩展 LVM 卷时要使用的额外物理卷,请参阅 第 4.4.19 节 “使用cling
Allocation 策略扩展逻辑卷”。当逻辑卷是条带或镜像时,cling
分配限制将独立应用于每个需要空间的条带或镜像(leg)。normal
分配策略将不会选择共享同一物理卷的物理扩展,因为逻辑扩展已分配给了位于该并行逻辑卷内的同一偏移处的并行逻辑卷(即不同的条带或镜像/leg)。当在逻辑卷保存镜像数据时分配镜像日志,normal
分配策略首先会尝试为日志和数据选择不同的物理卷。如果这不可能,并且allocation/mirror_logs_require_separate_pvs
配置参数被设为 0,则它将允许日志与部分数据共享物理卷。同样,在分配精简池元数据时,normal
分配策略会遵循与分配镜像日志一样的考虑,具体取决于allocation/thin_pool_metadata_require_separate_pvs
配置参数。- 如果有足够的可用扩展来满足分配请求,但 normal 分配策略不使用它们,而anywhere 分配策略将使用它们,即使这样会因为在同一个物理卷上放置了两个条带而降低了性能。
可使用 vgchange 命令更改分配策略。
注意
如果您使用没有包括在此文档中的分配策略,应该注意,它们的行为在将来的版本中可能会改变。例如:如果您在命令行中提供两个空物理卷,它们有相同数量的可用物理扩展可用于分配,LVM 当前会以它们列出的顺序处理它们,但不保证在将来的版本中这个行为不会有变化。如果为特定逻辑卷获取特定的布局非常重要,然后您应该通过一系列 lvcreate 和 lvconvert 步骤来构建它,以便应用到每一步骤的分配策略不让 LVM 对布局有任何自由支配权。
要查看任何特定情况下分配过程当前的工作方式,您可以读取调试日志输出,例如,将
-vvvv
选项添加到命令中。
4.3.3. 在集群中创建卷组
您可以使用 vgcreate 命令在集群环境中创建 CLVM 卷组,就像在单一节点上创建它们一样。
注意
在 Red Hat Enterprise Linux 7 中,集群通过 Pacemaker 进行管理。集群式 LVM 逻辑卷只在与 Pacemaker 集群一起使用才被支持,且必须配置为集群资源。有关在集群中配置 LVM 卷的通用信息,请参考 第 1.4 节 “红帽高可用性集群中的 LVM 逻辑卷”。
应使用 vgcreate -cy 或 vgchange -cy 命令设置的集群属性创建由集群成员共享的卷组。如果 CLVMD 正在运行,则会自动设置集群属性。这个集群属性表示这个卷组应该由 CLVMD 管理和保护。在创建任何未由集群共享的卷组且应仅对单个主机可见时,应使用 vgcreate -cn 或 vgchange -cn 命令禁用此集群属性。
默认情况下,使用集群属性在共享存储上创建的卷组对于可以访问共享存储的所有计算机都可见。但是,可以使用 vgcreate 命令的
-cn
选项创建本地卷组,使其仅对集群中的一个节点可见。
以下命令在集群环境中执行时,会创建一个卷组,该卷组与执行命令的节点同属本地。该命令创建名为
vg1
的本地卷,其中包含物理卷 /dev/sdd1
和 /dev/sde1
。
# vgcreate -c n vg1 /dev/sdd1 /dev/sde1
您可以使用 vgs 命令检查现有卷组是否为集群卷组,如果卷是集群的集群,则会显示 c 属性。以下命令显示卷组
VolGroup00
和 testvg1
的属性。在本例中,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
4.3.4. 向卷组中添加物理卷
要向现有卷组中添加额外的物理卷,请使用 vgextend 命令。vgextend 命令通过添加一个或多个可用物理卷来增加卷组的容量。
以下命令将物理卷
/dev/sdf1
添加到卷组 vg1
中。
# vgextend vg1 /dev/sdf1
4.3.5. 显示卷组
您可以使用两个命令来显示 LVM 卷组的属性: vgs 和 vgdisplay。
vgdisplay 命令以固定格式显示卷组属性(如大小、扩展、物理卷数目等等)。以下示例显示了卷组
new_vg
的 vgdisplay 命令的输出。如果您没有指定卷组,则会显示所有现有的卷组。
# 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 命令,并在 LVM 操作过程中自动运行 vgscan 命令,比如当您执行 vgcreate 命令时,或者 LVM 检测到不一致时。
注意
当您更改硬件配置并从节点添加或删除设备时,您可能需要手动运行 vgscan 命令,从而导致系统引导时不存在的新设备可见。这可能是必要的,例如,当您向 SAN 上的系统添加新磁盘时,或热插拔一个已标记为物理卷的新磁盘时。
您可以在
/etc/lvm/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
参数,如果缺少的物理卷上没有分配逻辑卷。
如果失败的物理卷包含镜像段类型的逻辑卷的镜像,您可以使用 vgreduce --removemissing --mirrorsonly --force 命令从镜像中删除该镜像。
这样只删除从物理卷中镜像镜像的逻辑卷。
有关从 LVM 镜像故障中恢复的详情,请参考 第 6.2 节 “从 LVM 镜像故障中恢复”。有关从卷组中删除丢失的物理卷的详情,请参考 第 6.5 节 “从卷组中删除丢失的物理卷”
4.3.8. 激活和停用卷组
当您创建卷组时,默认它是激活的。这意味着,那个组中的逻辑卷是可以访问的,并可以更改。
有一些情况您需要将卷组设为非活动状态,从而不为内核所知。要取消激活或激活卷组,请使用 vgchange 命令的
-a
(--available
)参数。
以下示例将停用卷组
my_volume_group
。
# vgchange -a n my_volume_group
如果启用了集群锁定,请添加"e"来激活或停用只在一个节点上的卷组,或添加"l"来激活或/停用只在本地节点上的卷组。具有单主机快照的逻辑卷总是被专门激活,因为它们一次只能在一个节点上使用。
您可以使用 lvchange 命令取消激活独立逻辑卷,如 第 4.4.11 节 “更改逻辑卷组的参数” 所述,有关激活集群中单个节点上的逻辑卷的信息,请参阅 第 4.7 节 “激活集群中单个节点上的逻辑卷”。
4.3.9. 更改卷组的参数
vgchange 命令用于停用和激活卷组,如 第 4.3.8 节 “激活和停用卷组” 所述。您也可以使用此命令更改现有卷组的几个卷组参数。
以下命令将卷组
vg00
的最大逻辑卷数改为 128。
# vgchange -l 128 /dev/vg00
有关您可以使用 vgchange 命令更改的卷组参数的描述,请查看 vgchange (8)手册页。
4.3.10. 删除卷组
要删除不包含逻辑卷的卷组,请使用 vgremove 命令。
# vgremove officevg
Volume group "officevg" successfully removed
4.3.11. 分割卷组
要分割卷组的物理卷并创建新卷组,请使用 vgsplit 命令。
逻辑卷不能在卷组之间分割。每个现有逻辑卷都必须完全在构成旧的或新卷组的物理上。但是,您可以使用 pvmove 命令来强制进行分割。
以下示例将新卷组
smallvg
从原始卷组 bigvg
中分割。
# 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
文件中。
vgcfgrestore 命令将卷组的元数据从归档恢复到卷组中的所有物理卷。
有关使用
vgcfgrestore
命令恢复物理卷元数据的示例,请参考 第 6.3 节 “恢复物理卷元数据”。
4.3.14. 重命名卷组
使用 vgrename 命令重命名现有卷组。
以下任意一个命令将现有卷组
vg02
重命名为 my_volume_group
# vgrename /dev/vg02 /dev/my_volume_group
# vgrename vg02 my_volume_group
4.3.15. 将卷组移动到另一个系统
您可以将整个 LVM 卷组移动到另一个系统中。建议您在执行此操作时使用 vgexport 和 vgimport 命令。
注意
您可以使用 vgimport 命令的
--force
参数。这可让您导入缺少物理卷的卷组,然后运行 vgreduce --removemissing 命令。
vgexport 命令使系统无法访问不活跃的卷组,这样就可以分离其物理卷。vgimport 命令使得在 vgexport 命令使卷组不活跃后可以再次被机器访问。
要从一个系统移动卷组到另一个系统,,执行以下步骤:
- 确定没有用户正在访问卷组中激活卷中的文件,然后卸载逻辑卷。
- 使用 vgchange 命令的
-a n
参数将卷组标记为不活动状态,这样可防止对卷组进行任何进一步的活动。 - 使用 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] ...当关闭系统时,您可以拔出组成该卷组的磁盘并将其连接到新系统。 - 当磁盘插入道新系统中时,请使用 vgimport 命令来导入卷组,使其可以被新系统访问。
- 使用 vgchange 命令的
-a y
参数激活卷组。 - 挂载文件系统使其可使用。
4.3.16. 重新创建卷组目录
要重新创建卷组目录和逻辑卷特殊文件,请使用 vgmknodes 命令。这个命令检查活跃逻辑卷所需的
/dev
目录中的 LVM2 特殊文件。它会创建任何缺少的特殊文件,并删除不使用的文件。
您可以通过为 vgscan 命令指定 mknodes 参数,将 vgmknodes 命令合并到 vgscan 命令中。