5 LVM 配置 #
本章介绍逻辑卷管理器 (LVM) 的原理,以及令其在许多情况下都能发挥效用的基本功能。YaST LVM 配置可以通过 YaST 专家分区程序完成。此分区工具用于编辑和删除现有分区并创建用于 LVM 的新分区。
使用 LVM 可能会增加一些风险,例如数据丢失。这些风险还包括应用程序崩溃、电源故障及有问题的命令。在实施 LVM 或重配置卷前,请保存数据。决不要在没有备份的情况下工作。
5.1 了解逻辑卷管理器 #
LVM 支持在多个物理卷(硬盘、分区、LUN)之间弹性分配硬盘空间。开发逻辑卷管理器是因为可能只有在安装期间初始分区完成后才需要更改硬盘空间的分段。因为在正在运行的系统中修改分区比较困难,LVM 提供了储存空间的虚拟池(卷组或 VG),如果需要,可以从中生成逻辑卷 (LV)。操作系统访问这些逻辑卷而不是物理分区。卷组可以跨多个磁盘,这样多个磁盘或部分磁盘可以构成一个 VG。LVM 以这种方式提供了一种对物理磁盘空间的抽象,从而能够以比物理分区更方便、更安全的方式更改硬盘空间的分段。
Figure 5.1, “物理分区与 LVM”比较物理分区(左)和 lvm 分段(右)。在左侧,将一个磁盘分成 3 个物理分区 (PART),每个分区指派了一个安装点 (MP),以便操作系统可以访问它们。在右侧,有两个磁盘,一个磁盘分为 2 个物理分区,另一个磁盘分为 3 个物理分区。定义了两个 LVM 卷组(VG1 和 VG2)。VG 1 包含 DISK 1 中的两个分区和 DISK 2 中的一个分区。VG 2 包含 DISK 2 中的其余两个分区。
在 LVM 中,合并到卷组的物理磁盘分区称为物理卷 (PV)。在Figure 5.1, “物理分区与 LVM”的卷组中,定义了四个逻辑卷(LV 1 至 LV 4),操作系统可以通过关联的安装点 (MP) 来使用这些逻辑卷。不同逻辑卷之间的边界不一定是任何分区边界。请参见本示例中 LV 1 和 LV 2 之间的边界。
LVM 功能:
可以将多块硬盘或多个分区合并为一个较大的逻辑卷。
如果配置合适,当可用空间用完后,可以扩大 LV(例如
/usr
)。通过使用 LVM,可以在正在运行的系统中添加硬盘或 LV。但这需要支持此类操作的可热插拔的硬件。
可激活分段方式,此方式将通过若干物理卷来分发逻辑卷的数据流。如果这些物理卷位于不同的磁盘上,则可提高读写性能(类似于 RAID 0)。
使用快照功能可以在正在运行的系统中执行一致的备份(尤其适合服务器)。
尽管 LVM 也支持 0/1/4/5/6 级别的 RAID,但建议使用 MD RAID(请参见第 7 章 “软件 RAID 配置”)。不过,LVM 可以与 RAID 0 和 1 搭配使用,因为 RAID 0 类似于通用逻辑卷管理(各个逻辑块将映射到物理设备上的块)。在 RAID 1 基础上使用的 LVM 可以跟踪镜像同步,并完全能够管理同步过程。使用更高的 RAID 级别时,需要借助一个管理守护程序来监视挂接的磁盘的状态,并在磁盘阵列出现问题时通知管理员。LVM 包含这种守护程序,但在异常情况下(例如设备故障),该守护程序无法正常工作。
如果您在 LVM 或软件 RAID 阵列中为系统配置了根文件系统,则必须将 /boot
置于单独的非 LVM 或非 RAID 分区上,否则系统将无法引导。此类分区的建议大小为 500 MB,建议的文件系统为 Ext4。
通过这些功能,使用 LVM 还对频繁使用的家用 PC 或小型服务器有用。如果您的数据储存量(如数据库、音乐存档或用户目录)不断增长,则 LVM 尤其有用。它支持您使用大于物理硬盘的文件系统。但是,请记住,使用 LVM 与使用传统的分区截然不同。
您可以使用 YaST 分区程序管理新的或现有的 LVM 储存对象。有关配置 LVM 的指示及详细信息,请参见官方的 LVM HOWTO。
5.2 创建卷组 #
LVM 卷组 (VG) 会将 Linux LVM 分区组织到一个逻辑空间池中。您可以从组的可用空间中划分出逻辑卷。组中的 Linux LVM 分区可以在相同或不同磁盘上。您可以添加分区或整个磁盘来扩大组的大小。
要使用整个磁盘,该磁盘不得包含任何分区。使用分区时,不得装入分区。在将分区添加到 VG 时,YaST 会自动将它们的分区类型更改为 0x8E Linux LVM
。
起动 YaST 并打开
。如果您需要重新配置现有分区设置,请执行下面操作。有关细节,请参见第 10.1 节 “使用专家分区程序”。如果您只想使用未使用的磁盘或已存在的分区,请跳过此步骤。
Warning: 未分区磁盘上的物理卷可以使用某个未分区的磁盘作为物理卷 (PV),前提是该磁盘不是安装操作系统的磁盘,也不是操作系统从中引导的磁盘。
由于未分区的磁盘在系统级别显示为未使用,因此很容易被覆盖或被不正确地访问。
要使用已包含分区的整个硬盘,请删除该磁盘上的所有分区。
要使用当前已装入的分区,请将其卸载。
在左侧面板中,选择
。右侧面板中即会打开现有卷组的列表。
在“卷管理”页的左下角,单击
。按如下所示定义卷组:
指定
。如果在安装时创建卷组,建议对将包含 SUSE Linux Enterprise Server 文件系统的卷组采用名称
system
。指定
。在 LVM1 中,4 MB 物理区域允许的最大 LV 大小为 256 GB,因为它仅支持每个 LV 最多 65534 个区域。SUSE Linux Enterprise Server 上使用的 LVM2 不会限制物理区域的数量。区域数过多不会影响逻辑卷的 I/O 性能,但会降低 LVM 工具的速度。
Important: 物理区域大小单个 VG 中不应混合有不同的物理区域大小。区域在初始设置后不应修改。
在
列表中,选择要成为此卷组一部分的 Linux LVM 分区,然后单击 将它们移动到 列表。单击
。新组将出现在
列表中。
在“卷管理”页上,单击
,验证是否列出了新卷组,然后单击 。要检查哪些物理设备属于卷组的一部分,可随时在运行的系统中打开 YaST 分区程序,然后单击
› › 。单击 离开此屏幕。Figure 5.2: 名为 DATA 的卷组中的物理卷 #
5.3 创建逻辑卷 #
逻辑卷提供一个空间池,此空间池与硬盘提供的空间池类似。要让此空间可用,需要定义逻辑卷。逻辑卷类似于一个普通分区 - 您可以进行格式化并将其装入系统。
使用 YaST 分区程序从现有卷组创建逻辑卷。请为每个卷组至少指派一个逻辑卷。您可以根据需要创建新的逻辑卷,直到卷组中的所有可用空间都用完为止。可以选择性地精简配置一个 LVM 逻辑卷,以便创建大小超出可用空间的逻辑卷(有关详细信息,请参见Section 5.3.1, “精简配置的逻辑卷”)。
普通卷:. (默认)系统会立即分配卷的空间。
瘦池:. 逻辑卷是预留供瘦卷使用的空间池。瘦卷可以按需从瘦池分配它们所需的空间。
瘦卷:. 该卷会被创建为稀疏卷。瘦卷会按需从瘦池分配所需的空间。
镜像卷:. 创建的卷中包含定义数目的镜像。
起动 YaST 并打开
。在左侧面板中,选择
。右侧面板中即会打开现有卷组的列表。选择要在其中创建卷的卷组,然后选择
› 。提供卷的Section 5.3.1, “精简配置的逻辑卷”)。单击 继续。
,然后选择 (有关设置精简配置卷的相关信息,请参见指定卷的大小和是否使用多个分段。
使用带区卷时,将在多个物理卷之间分配数据。如果这些物理卷驻留在不同的硬盘上,则通常会提高读写性能(与 RAID 0 类似)。可用带区卷的最大数量为物理卷的数量。默认值 (
1
) 表示不使用多个带区卷。选择卷的
。您在此处所做选择只会影响将要打开的对话框的默认值。这些值可在下一个步骤中更改。如果不确定,请选择 。在
下,选择 ,然后选择 。 菜单的内容取决于文件系统。通常不需要更改默认值。在
下,选择 ,然后选择安装点。单击 ,为卷添加特殊装入选项。单击
。单击
,验证是否列出了所做的更改,然后单击 。
5.3.1 精简配置的逻辑卷 #
LVM 逻辑卷可选择进行精简配置。精简配置可让您创建大小超出可用空间的逻辑卷。您创建包含未使用空间(预留供任意数目的瘦卷使用)的瘦池。瘦卷会被创建为稀疏卷,并会根据需要从瘦池分配空间。瘦池可以根据需要动态扩大,以实现储存空间的高效分配。精简配置的卷还支持快照(可以使用 Snapper 进行管理)— 有关详细信息,请参见第 7 章 “通过 Snapper 进行系统恢复和快照管理”。
要设置精简配置的逻辑卷,请按Procedure 5.1, “设置逻辑卷”中所述步骤操作。选择卷类型时,不要选择 ,而要选择 或 。
逻辑卷是预留供瘦卷使用的空间池。瘦卷可以按需从瘦池分配它们所需的空间。
该卷会被创建为稀疏卷。瘦卷会按需从瘦池分配所需的空间。
要使用群集中的精简配置卷,使用它的瘦池和瘦卷必须在单个群集资源中管理。如此可使瘦卷和瘦池始终在同一个节点上以独占方式装入。
5.3.2 创建镜像卷 #
可以创建包含多个镜像的逻辑卷。LVM 会确保将写入底层物理卷的数据镜像到不同的物理卷。因此,即使某个物理卷崩溃,您仍可访问逻辑卷上的数据。LVM 还会保留一个日志文件用于管理同步过程。日志中包含有关哪些卷区域当前正在与镜像同步的信息。默认情况下,日志储存在磁盘上,当情况允许时,会储存在与镜像不同的磁盘上。不过,您可以为日志指定一个不同的位置,例如,指定易失性内存。
目前可以使用两种类型的镜像实施:“正常”的(非 raid)镜像
逻辑卷和 raid1
逻辑卷。
创建镜像逻辑卷后,可对这些卷执行标准操作,例如激活、扩展和去除。
5.3.2.1 设置镜像非 raid 逻辑卷 #
要创建镜像卷,请使用 lvcreate
命令。下面的示例将创建一个 500 GB 大小使用卷组 vg1 的逻辑卷,其中包含两个名为 lv1 的镜像。
tux >
sudo
lvcreate -L 500G -m 2 -n lv1 vg1
此类逻辑卷是一种线性卷(无分段),可提供文件系统的三个副本。m
选项指定镜像的计数。L
选项指定逻辑卷的大小。
逻辑卷会划分为几个默认大小为 512 KB 的区域。如果需要不同大小的区域,请使用 -R
选项并后接所需的区域大小(以 MB 为单位)。或者,可以在 lvm.conf
文件中编辑 mirror_region_size
选项来配置首选的区域大小。
5.3.2.2 设置 raid1
逻辑卷 #
由于 LVM 支持 RAID,您可以使用 RAID1 来实施镜像。与非 raid 镜像相比,这种实施具有以下优点:
LVM 会为每个镜像映像维护一个完全冗余的位图区,从而提高了其故障处理能力。
可以暂时从阵列中分割出镜像映像,然后将它们重新合并。
阵列可以处理暂时性故障。
LVM RAID 1 实施支持快照。
但在另一方面,这种类型的镜像实施不允许在群集卷组中创建逻辑卷。
要使用 RAID 创建镜像卷,请发出以下命令:
tux >
sudo
lvcreate --type raid1 -m 1 -L 1G -n lv1 vg1
其中的各选项/参数的含义如下:
--type
- 需要指定raid1
,否则该命令将使用隐式分段类型mirror
并创建非 raid 镜像。-m
- 指定镜像的计数。-L
- 指定逻辑卷的大小。-n
- 使用此选项指定逻辑卷的名称。vg1
- 逻辑卷使用的卷组的名称。
LVM 将为阵列中的每个数据卷创建一个区域大小的逻辑卷。如果您有两个镜像卷,LVM 将另外创建两个卷用于储存元数据。
创建 RAID 逻辑卷后,您可以像使用普通的逻辑卷一样使用该卷。您可以将它激活、扩展,等等。
5.4 自动激活非 root LVM 卷组 #
非根 LVM 卷组的激活行为由 /etc/lvm/lvm.conf
文件中的
auto_activation_volume_list 参数控制。默认情况下,该参数为空,也就是说,会激活所有卷。如果只想激活某些卷组,请将名称括在引号中,并用逗号分隔各名称,例如:
auto_activation_volume_list = [ "vg1", "vg2/lvol1", "@tag1", "@*" ]
如果在 auto_activation_volume_list 参数中定义了列表,将发生以下情况:
首先会根据此列表检查每个逻辑卷。
如果两者不匹配,则不激活该逻辑卷。
默认情况下,在 Dracut 重启动系统时,非根 LVM 卷组会自动激活。您可以使用此参数在系统重启时激活所有卷组,或仅激活指定的非根 LVM 卷组。
5.5 调整现有卷组的大小 #
您随时都可在正在运行的系统中添加物理卷来扩展卷组提供的空间,而不会导致服务中断。这可让您将逻辑卷添加到组中,或如Section 5.6, “调整逻辑卷的大小”中所述扩大现有卷的大小。
还可以通过删除物理卷来缩小卷组的大小。YaST 只允许删除当前未使用的物理卷。要了解哪些物理卷当前正在使用,请运行下列命令。PE Ranges
列中列出的分区(物理卷)即是使用中的分区:
tux >
sudo
pvs -o vg_name,lv_name,pv_name,seg_pe_ranges root's password: VG LV PV PE Ranges /dev/sda1 DATA DEVEL /dev/sda5 /dev/sda5:0-3839 DATA /dev/sda5 DATA LOCAL /dev/sda6 /dev/sda6:0-2559 DATA /dev/sda7 DATA /dev/sdb1 DATA /dev/sdc1
5.6 调整逻辑卷的大小 #
如果卷组中有未使用的可用空间,则您可以增大逻辑卷以提供更多可用空间。您还可以将卷的大小减少为其他逻辑卷可使用的卷组的可用空间。
减少卷的大小时,YaST 会同时自动调整其文件系统的大小。当前已装入的卷是否可以“联机”(即保持已装入状态)调整大小取决于其文件系统。Btrfs、XFS、Ext3 和 Ext4 支持联机扩展文件系统。
仅 Btrfs 支持联机缩小文件系统。要缩小 Ext2/3/4 文件系统,需要将其卸载。无法缩小以 XFS 格式化的卷,因为 XFS 不支持文件系统缩小。
5.7 删除卷组或逻辑卷 #
删除卷组会清空其每个成员分区中的所有数据。删除逻辑卷会损坏该卷上储存的所有数据。
起动 YaST 并打开
。在左侧面板中,选择
。右侧面板中即会打开现有卷组的列表。选择要删除的卷组或逻辑卷,然后单击
。根据您的选择,系统会显示警告对话框。单击
以确认对话框。单击
,校验是否列出了删除的卷组(用红色字体表示删除),然后单击 。
5.8 使用 LVM 命令 #
有关使用 LVM 命令的信息,请参见下表中所述的命令的手册页。所有命令都需要拥有 root
权限才能执行。请使用 sudo
COMMAND(建议采用此方式),或者直接以 root
身份执行这些命令。
pvcreate 设备
初始化设备(例如
/dev/sdb1
),供 LVM 用作物理卷。如果指定的设备上有任何文件系统,将出现警告。请记住,仅当已安装blkid
时(默认已安装),pvcreate
才会检查现有文件系统。如果blkid
不可用,pvcreate
不会生成任何警告,因此您可能会丢失文件系统却看不到任何警告。pvdisplay 设备
显示 LVM 物理卷的相关信息,例如当前它是否正在逻辑卷中使用。
-
vgcreate -c y VG_NAME DEV1 [DEV2...]
使用一个或多个指定的设备创建群集卷组。
-
vgcreate --activationmode ACTIVATION_MODE VG_NAME
配置卷组激活模式。可以指定下列值之一:
complete
- 只能激活不受缺失物理卷影响的逻辑卷,即使特定的逻辑卷能够容许这种故障也如此。degraded
- 默认的激活模式。如果有足够的冗余级别来激活某个逻辑卷,则即使缺少某些物理卷,也能激活该逻辑卷。partial
- 即使缺少某些物理卷,LVM 也会尝试激活卷组。如果某个非冗余逻辑卷缺少重要的物理卷,则通常无法激活该逻辑卷,并会将它作为错误目标进行处理。
-
vgchange -a [ey|n] 卷组名称
激活 (
-a ey
) 或停用 (-a n
) 卷组及其逻辑卷的输入/输出。激活群集中的某个卷时,请务必使用
ey
选项。此选项默认在装载脚本中使用。vgremove 卷组名称
删除卷组。请在使用此命令之前删除逻辑卷,然后停用卷组。
-
vgdisplay 卷组名称
显示指定卷组的相关信息。
要了解卷组的物理区域总大小,请输入
tux >
vgdisplay VG_NAME | grep "Total PE"-
lvcreate -L SIZE -n LV_NAME VG_NAME
创建具有指定大小的逻辑卷。
-
lvcreate -L SIZE --thinpool POOL_NAME VG_NAME
基于卷组 VG_NAME 创建具有指定大小的瘦池
myPool
。下面的示例会从卷组
LOCAL
创建大小为 5 GB 的瘦池:tux >
sudo
lvcreate -L 5G --thinpool myPool LOCAL-
lvcreate -T VG_NAME/POOL_NAME -V SIZE -n LV_NAME
在池 POOL_NAME 中创建瘦逻辑卷。下面的示例会从卷组
LOCAL
上的池myPool
创建名为myThin1
的 1GB 瘦卷:tux >
sudo
lvcreate -T LOCAL/myPool -V 1G -n myThin1-
lvcreate -T VG_NAME/POOL_NAME -V SIZE -L SIZE -n LV_NAME
还可以通过一条命令同时创建瘦池和瘦逻辑卷:
tux >
sudo
lvcreate -T LOCAL/myPool -V 1G -L 5G -n myThin1-
lvcreate --activationmode ACTIVATION_MODE LV_NAME
配置逻辑卷激活模式。可以指定下列值之一:
complete
- 仅当逻辑卷的所有物理卷都处于活动状态时才能激活该逻辑卷。degraded
- 默认的激活模式。如果有足够的冗余级别来激活某个逻辑卷,则即使缺少某些物理卷,也能激活该逻辑卷。partial
- 即使缺少某些物理卷,LVM 也会尝试激活卷。如果逻辑卷有一部分不可用,使用此选项可能会导致数据丢失。通常不使用此选项,但在恢复数据时,它可能会有用。
您可以通过在
/etc/lvm/lvm.conf
中指定activation_mode
配置选项的上述值之一,来指定激活模式。-
lvcreate -s [-L SIZE] -n SNAP_VOLUME SOURCE_VOLUME_PATH VG_NAME
创建指定逻辑卷的快照卷。如果未包含大小选项(
-L
或--size
),则快照会被创建为瘦快照。-
lvremove /dev/VG_NAME/LV_NAME
删除逻辑卷。
使用此命令之前,请先使用
umount
命令卸载逻辑卷以将其关闭。-
lvremove SNAP_VOLUME_PATH
删除快照卷。
-
lvconvert --merge SNAP_VOLUME_PATH
将逻辑卷还原为快照的版本。
-
vgextend VG_NAME DEVICE
将指定的设备(物理卷)添加到现有卷组。
-
vgreduce VG_NAME DEVICE
从现有卷组中删除指定的物理卷。
确保物理卷当前未被逻辑卷使用。如果正在使用中,则必须使用
pvmove
命令将数据移至另一个物理卷。-
lvextend -L SIZE /dev/VG_NAME/LV_NAME
扩大指定逻辑卷的大小。随后,您还必须相应地扩大文件系统以充分利用新扩充的空间。有关详细信息,请参见第 2 章 “调整文件系统大小”。
-
lvreduce -L SIZE /dev/VG_NAME/LV_NAME
减少指定逻辑卷的大小。
在缩小卷之前,请确保先减少文件系统的大小,否则可能会丢失数据。有关详细信息,请参见第 2 章 “调整文件系统大小”。
-
lvrename /dev/VG_NAME/LV_NAME /dev/VG_NAME/NEW_LV_NAME
重命名现有 LVM 逻辑卷。此操作不会更改卷组名。
如果您想使用 LVM 而不是 udev 规则来管理 LV 设备节点和符号链接,可以使用下列方法之一来禁止 udev 发出通知:
在
/etc/lvm/lvm.conf
中配置activation/udev_rules = 0
和activation/udev_sync = 0
。请注意,结合
lvcreate
命令指定--nodevsync
的效果与设置activation/udev_sync = 0
相同;仍需设置activation/udev_rules = 0
。设置环境变量
DM_DISABLE_UDEV
:export DM_DISABLE_UDEV=1
这样也会禁止 udev 发出通知。此外,
/etc/lvm/lvm.conf
中所有 udev 相关设置将被忽略。
5.8.1 用命令调整逻辑卷大小 #
lvresize
、lvextend
和 lvreduce
命令用于调整逻辑卷大小。有关语法和选项信息,请参见每个命令的手册页。要扩展 LV,VG 上必须有足够的可用未分配空间。
建议使用 YaST 分区程序来增大或缩小逻辑卷。使用 YaST 时,卷中文件系统的大小也会相应进行自动调整。
LV 可以在使用中状态下进行手动增大或缩小,但是其上的文件系统无法随之调整。扩展或收缩 LV 不会自动修改卷中文件系统的大小。随后必须使用其他命令增大文件系统。有关调整文件系统大小的信息,请参见第 2 章 “调整文件系统大小”。
手动调整 LV 大小时,请确保使用正确的顺序:
如果扩展逻辑卷,则必须在试图增大文件系统之前扩展逻辑卷。
如果缩小逻辑卷,则必须在试图缩小逻辑卷之前缩小文件系统。
扩展逻辑卷的大小:
打开一个终端控制台。
如果逻辑卷包含 Ext2 或 Ext4 文件系统,则不支持联机增大,请将其卸下。如果它包含为虚拟机(例如 Xen VM)托管的文件系统,请先关闭该 VM。
在终端控制台提示时,输入以下命令以增加逻辑卷大小:
tux >
sudo
lvextend -L +SIZE /dev/VG_NAME/LV_NAME对于 SIZE,请指定要添加到逻辑卷的空间容量,例如 10 GB。将
/dev/VG_NAME/LV_NAME
替换为逻辑卷的 Linux 路径,例如/dev/LOCAL/DATA
。例如:tux >
sudo
lvextend -L +10GB /dev/vg1/v1调整文件系统的大小。有关详细信息,请参见第 2 章 “调整文件系统大小”。
如果卸下了文件系统,请将其重新装入。
例如,将带有(已装入并激活)Btrfs 的 LV 扩大 10GB:
tux >
sudo
lvextend −L +10G /dev/LOCAL/DATAtux >
sudo
btrfs filesystem resize +10G /dev/LOCAL/DATA
要缩小逻辑卷的大小,请执行以下操作:
打开一个终端控制台。
如果逻辑卷不包含 Btrfs 文件系统,请将其卸下。如果它包含为虚拟机(例如 Xen VM)托管的文件系统,请先关闭该 VM。请注意,带有 XFS 文件系统的卷不能减少大小。
调整文件系统的大小。有关详细信息,请参见第 2 章 “调整文件系统大小”。
在终端控制台提示符中,输入下列命令以将逻辑卷的大小缩小为文件系统的大小:
tux >
sudo
lvreduce /dev/VG_NAME/LV_NAME如果卸载了文件系统,请将其重新装入。
例如,将带有 Btrfs 的 LV 缩减 5GB:
tux >
sudo
btrfs filesystem resize -size 5G /dev/LOCAL/DATA sudo lvreduce /dev/LOCAL/DATA
从 SUSE Linux Enterprise Server 12 SP1 开始,lvextend
、lvresize
和 lvreduce
支持 --resizefs
选项,该选项不仅可以更改卷的大小,而且还能调整文件系统的大小。因此,上面所示的 lvextend
和 lvreduce
示例也可以改编为:
tux >
sudo
lvextend --resizefs −L +10G /dev/LOCAL/DATAtux >
sudo
lvreduce --resizefs -L -5G /dev/LOCAL/DATA
请注意,以下文件系统支持 --resizefs
:ext2/3/4、Btrfs 和 XFS。目前只能在 SUSE Linux Enterprise Server 上使用此选项调整 Btrfs 的大小,因为上游尚未接受此选项。
5.8.2 通过 lvmetad
动态汇总 LVM 元数据 #
大部分 LVM 命令都需要准确查看储存在系统的磁盘设备上的 LVM 元数据。对于当前的 LVM 设计,如果此信息不可用,则 LVM 必须扫描系统中的所有物理磁盘设备。在具有许多磁盘的系统中,这需要大量的 I/O 操作。如果磁盘无法响应,LVM 命令可能是在等待磁盘时发生超时。
通过 lvmetad
动态汇总 LVM 元数据可解决此问题。lvmetad
守护程序通过在每次设备状态更改时动态汇总元数据信息,来减少此扫描的需要。这些事件通过 udev 规则向 lvmetad
发出信号。如果守护程序未运行,则 LVM 会如常执行扫描。
默认情况下会启用此选项。如果该选项已在您的系统上已禁用,可执行以下操作来启用它:
打开一个终端控制台。
停止
lvmetad
守护程序:tux >
sudo
systemctl stop lvm2-lvmetad编辑
/etc/lvm/lvm.conf
并将use_lvmetad
设置为1
:use_lvmetad = 1
重启动
lvmetad
守护程序:tux >
sudo
systemctl start lvm2-lvmetad
如果 lvmetad
守护程序正在运行,则在执行 pvscan --cache device
命令时,不会应用 /etc/lvm/lvm.conf
文件中的 filter =
设置。要过滤设备,必须使用 the global_filter =
设置。LVM 不会打开全局过滤器跳过的设备,也永远不会扫描这些设备。
要检查确切的行为,请运行 lvmconfig -l | grep global_filter_compat
命令。如果结果显示 global_filter_compat
选项存在且设置为 0
,则会应用上述行为。如果该选项不存在或设置为 1
,则行为保持不变。
5.8.3 使用 LVM 超速缓存卷 #
LVM 支持使用高速块设备(例如 SSD 设备)作为较低速大型块设备的写回或直写超速缓存。该超速缓存逻辑卷类型使用小型高速 LV 来提高大型慢速 LV 的性能。
要设置 LVM 超速缓存,需在超速缓存设备上创建两个逻辑卷。较大的卷用于超速缓存本身,较小的卷用于储存超速缓存元数据。这两个卷需属于原始卷所在的同一个卷组。创建这些卷后,需要将其转换为超速缓存池,并将该池挂接到原始卷:
在慢速设备上创建原始卷(如果尚不存在)。
将物理卷(从快速设备)添加到原始卷所属的同一个卷组,然后在物理卷上创建超速缓存数据卷。
创建超速缓存元数据卷。该卷的大小应为超速缓存数据卷大小的 1/1000,最小大小为 8 MB。
将超速缓存数据卷和元数据卷组合成一个超速缓存池卷:
tux >
sudo
lvconvert --type cache-pool --poolmetadata VOLUME_GROUP/METADATA_VOLUME VOLUME_GROUP/CACHING_VOLUME将超速缓存池挂接到原始卷:
tux >
sudo
lvconvert --type cache --cachepool VOLUME_GROUP/CACHING_VOLUME VOLUME_GROUP/ORIGINAL_VOLUME
有关 LVM 超速缓存的详细信息,请参见 lvmcache(7) 手册页。
5.9 标记 LVM2 储存对象 #
标记是无序的关键字或指派给储存对象元数据的术语。使用标记功能可以采用您认为有用的方式将无序的标记列表附加到 LVM 储存对象元数据,从而对储存对象集合进行分类。
5.9.1 使用 LVM2 标记 #
标记 LVM2 储存对象后,可以在命令中使用标记来完成以下任务:
根据有或无特定标记选择要处理的 LVM 对象。
使用配置文件中的标记,控制在服务器上激活哪些卷组和逻辑卷。
通过在命令中指定标记,覆盖全局配置中的设置。
可以使用标记代替接受以下项的任何命令行 LVM 对象参考:
对象列表
单个对象,只要标记扩展到单个对象
目前,在任何位置都不支持将对象名称替换为标记。扩展自变量后,列表中的重复自变量将通过删除重复自变量而保留每个自变量的第一个实例来解决。
只要是自变量类型可能不明确的位置,都必须在标记前面加上商业性 (@) 字符,比如 @mytag
。在其他位置是否使用 “@” 前缀是可选的。
5.9.2 创建 LVM2 标记的要求 #
对 LVM 使用标记时,请注意以下要求:
- 支持的字符
LVM 标记单词可以包含 ASCII 大写字符 A 到 Z、小写字符 a 到 z、数字 0 到 9、下划线 (_)、加号 (+)、连字符 (-) 和句点 (.)。单词不能以连字符开头。最大长度为 128 个字符。
- 支持的储存对象
可以标记 LVM2 物理卷、卷组、逻辑卷和逻辑卷分段。PV 标记将储存在其卷组的元数据中。删除卷组时也删除孤立的物理卷中的标记。快照不能标记,但快照源可以标记。
LVM1 对象不能标记,因为磁盘格式不支持此功能。
5.9.3 命令行标记语法 #
--addtag
标记信息将标记添加到(或标记)LVM2 储存对象。示例:
tux >
sudo
vgchange --addtag @db1 vg1--deltag
标记信息删除(或取消标记)LVM2 储存对象中的标记。示例:
tux >
sudo
vgchange --deltag @db1 vg1--tag
标记信息指定用于缩小要激活或停用的卷组列表或逻辑卷的标记。
如果卷的标记与提供的标记匹配,则输入以下命令将其激活(示例):
tux >
sudo
lvchange -ay --tag @db1 vg1/vol2
5.9.4 配置文件语法 #
以下几节显示了特定用例的示例配置。
5.9.4.1 在 lvm.conf
文件中启用主机名标记 #
将下面的代码添加到 /etc/lvm/lvm.conf
文件中,以启用主机上 /etc/lvm/lvm_<HOSTNAME>.conf
文件中单独定义的主机标记。
tags { # Enable hostname tags hosttags = 1 }
您将激活代码置于主机上的 /etc/lvm/lvm_<HOSTNAME>.conf
文件中。请参见 Section 5.9.4.3, “定义激活”。
5.9.4.2 在 lvm.conf 文件中为主机名定义标记 #
tags { tag1 { } # Tag does not require a match to be set. tag2 { # If no exact match, tag is not set. host_list = [ "hostname1", "hostname2" ] } }
5.9.4.3 定义激活 #
您可以修改 /etc/lvm/lvm.conf
文件,以根据标记激活 LVM 逻辑卷。
在文本编辑器中,将以下代码添加到文件中:
activation { volume_list = [ "vg1/lvol0", "@database" ] }
用您的标记替换 @database
。使用 "@*"
根据主机上设置的任何标记匹配此标记。
激活命令会匹配卷组和逻辑卷的元数据中设置的 VGNAME、VGNAME/LVNAME 或 @TAG。只有元数据标记匹配时,才激活卷组或逻辑卷。默认情况下,如果不匹配则不会激活。
如果 volume_list
不存在,且主机上已定义标记,则只有主机标记与元数据标记匹配时,才会激活卷组或逻辑卷。
如果 volume_list
已定义但为空,并且主机上未定义任何标记,则不会激活。
如果未定义 volume_list,则不会施加任何 LV 激活限制(允许所有情况)。
5.9.4.4 在多个主机名配置文件中定义激活 #
在 lvm.conf
文件中启用主机标记后,便可在主机配置文件 (/etc/lvm/lvm_<HOST_TAG>.conf
) 中使用激活代码。例如,一个服务器在 /etc/lvm/
目录中有两个配置文件:
lvm.conf
|
lvm_<HOST_TAG>.conf
|
启动时,会装载 /etc/lvm/lvm.conf
文件,并处理该文件中的任何标记设置。如果定义了任何主机标记,它会装载相关的 /etc/lvm/lvm_<HOST_TAG>.conf
文件。搜索特定配置文件项目时,将会先搜索主机标记文件,然后搜索 lvm.conf
文件,并在找到第一个匹配项时停止搜索。在 lvm_<HOST_TAG>.conf
文件中,使用与所设标记顺序相反的顺序。这样就可以先搜索最后设置标记的文件。主机标记文件中设置的新标记将会触发额外的配置文件装载。
5.9.5 将标记用于群集中的简单激活控制 #
您可以通过在 /etc/lvm/lvm.conf
文件中启用 hostname_tags
选项来设置简单主机名激活控制。将相同文件用于群集中的每一台计算机上,以便建立全局设置。
在文本编辑器中,将以下代码添加到
/etc/lvm/lvm.conf
文件中:tags { hostname_tags = 1 }
将文件复制到群集中的所有主机上。
从群集中的任何计算机上,将
db1
添加到将激活vg1/lvol2
的计算机列表中:tux >
sudo
lvchange --addtag @db1 vg1/lvol2在
db1
服务器上,输入以下内容以激活它:tux >
sudo
lvchange -ay vg1/vol2
5.9.6 使用标记激活群集中首选主机上的卷组 #
本部分中的示例展示了完成以下任务的两种方法:
仅激活数据库主机
db1
和db2
上的卷组vg1
。仅激活文件服务器主机
fs1
上的卷组vg2
。最初在文件服务器备份主机
fsb1
上不激活任何卷组,但对其进行准备以从文件服务器主机fs1
接管卷组。
5.9.6.1 选项 1:集中化管理和主机间静态配置复制 #
在以下解决方案中,单个配置文件复制到多台主机中。
将
@database
标记添加到卷组vg1
的元数据中。在终端控制台上,输入tux >
sudo
vgchange --addtag @database vg1将
@fileserver
标记添加到卷组vg2
的元数据中。在终端控制台上,输入tux >
sudo
vgchange --addtag @fileserver vg2在文本编辑器中,用以下代码修改
/etc/lvm/lvm.conf
文件,以定义@database
、@fileserver
和@fileserverbackup
标记。tags { database { host_list = [ "db1", "db2" ] } fileserver { host_list = [ "fs1" ] } fileserverbackup { host_list = [ "fsb1" ] } } activation { # Activate only if host has a tag that matches a metadata tag volume_list = [ "@*" ] }
将修改后的
/etc/lvm/lvm.conf
文件复制到四台主机中:db1
、db2
、fs1
和fsb1
。如果文件服务器主机出现故障,则在终端控制台的任何节点上输入以下命令即可在
fsb1
上启动vg2
:tux >
sudo
vgchange --addtag @fileserverbackup vg2tux >
sudo
vgchange -ay vg2
5.9.6.2 选项 2: 本地化管理和配置 #
在以下解决方案中,每台主机在本地保存有关激活哪些类别的卷的信息。
将
@database
标记添加到卷组vg1
的元数据中。在终端控制台上,输入tux >
sudo
vgchange --addtag @database vg1将
@fileserver
标记添加到卷组vg2
的元数据中。在终端控制台上,输入tux >
sudo
vgchange --addtag @fileserver vg2在
/etc/lvm/lvm.conf
文件中启用主机标记:在文本编辑器中,用以下代码修改
/etc/lvm/lvm.conf
文件,以启用主机标记配置文件。tags { hosttags = 1 }
将修改后的
/etc/lvm/lvm.conf
文件复制到四台主机上:db1
、db2
、fs1
和fsb1
。
在主机
db1
上,创建数据库主机db1
的激活配置文件。在文本编辑器中,创建/etc/lvm/lvm_db1.conf
文件并添加以下代码:activation { volume_list = [ "@database" ] }
在主机
db2
上,创建数据库主机db2
的激活配置文件。在文本编辑器中,创建/etc/lvm/lvm_db2.conf
文件并添加以下代码:activation { volume_list = [ "@database" ] }
在主机 fs1 上,创建文件服务器主机
fs1
的激活配置文件。在文本编辑器中,创建/etc/lvm/lvm_fs1.conf
文件并添加以下代码:activation { volume_list = [ "@fileserver" ] }
如果文件服务器主机
fs1
出现故障,要启动备用文件服务器主机 fsb1 作为文件服务器:在主机
fsb1
上,创建主机fsb1
的激活配置文件。在文本编辑器中,创建/etc/lvm/lvm_fsb1.conf
文件并添加以下代码:activation { volume_list = [ "@fileserver" ] }
在终端控制台上,输入以下命令之一:
tux >
sudo
vgchange -ay vg2tux >
sudo
vgchange -ay @fileserver