配置和管理逻辑卷
配置和管理 LVM
摘要
对红帽文档提供反馈 复制链接链接已复制到粘贴板!
我们感谢您对我们文档的反馈。让我们了解如何改进它。
通过 Jira 提交反馈(需要帐户)
- 登录到 Jira 网站。
- 点顶部导航栏中的 Create
- 在 Summary 字段中输入描述性标题。
- 在 Description 字段中输入您的改进建议。包括文档相关部分的链接。
- 点对话框底部的 Create。
第 1 章 逻辑卷管理概述 复制链接链接已复制到粘贴板!
逻辑卷管理器(LVM)在物理存储上创建一个抽象层,帮助您创建逻辑存储卷。与直接物理存储用法相比,这提供了更大的灵活性。
另外,硬件存储配置对软件是隐藏的,因此您可以在不停止应用程序或卸载文件系统的情况下调整其大小和移动它。这可降低操作成本。
1.1. LVM 构架 复制链接链接已复制到粘贴板!
以下是 LVM 组件:
- 物理卷
- 物理卷(PV)是指定为 LVM 使用的分区或整个磁盘。如需更多信息,请参阅管理 LVM 物理卷。
- 卷组
- 卷组(VG)是物理卷(PV)的一个集合,它创建一个磁盘空间池,您可以从中分配逻辑卷。如需更多信息,请参阅管理 LVM 卷组。
- 逻辑卷
- 一个逻辑卷代表一个可用的存储设备。如需更多信息,请参阅 基本逻辑卷管理 和 高级逻辑卷管理。
下图显示了 LVM 的组件:
图 1.1. LVM 逻辑卷组件
1.2. LVM 的优点 复制链接链接已复制到粘贴板!
与直接使用物理存储相比,逻辑卷具有以下优势:
- 灵活的容量
- 使用逻辑卷时,您可以将设备和分区聚合到一个逻辑卷中。借助此功能,文件系统可以扩展到多个设备中,就像它们是一个单一的大型设备一样。
- 方便设备命名
- 逻辑卷可以使用用户定义的名称和自定义名称进行管理。
- 存储卷大小
- 您可以使用简单的软件命令扩展逻辑卷或减小逻辑卷大小,而无需重新格式化和重新分区基础设备。如需更多信息,请参阅 重新调整逻辑卷大小。
- 在线数据重新定位
要部署更新、更快或更弹性的存储子系统,您可以使用
pvmove
命令在系统处于活动状态时移动数据。在磁盘处于使用状态时可以重新分配磁盘。例如,您可以在删除热插拔磁盘前将其清空。有关如何迁移数据的更多信息,请参阅
pvmove
手册页,以及 从卷组中删除物理卷。- 条带化卷
- 您可以创建一个在两个或者多个设备间条带化分布数据的逻辑卷。这可显著提高吞吐量。如需更多信息,请参阅 创建条带逻辑卷。
- RAID 卷
- 逻辑卷为您对数据配置 RAID 提供了一种便捷的方式。这可防止设备故障并提高性能。如需更多信息,请参阅 配置 RAID 逻辑卷。
- 卷快照
- 您可以对数据进行快照(逻辑卷在一个特点时间点上的副本)用于一致性备份或测试更改的影响,而不影响实际数据。如需更多信息,请参阅 管理逻辑卷快照。
- 精简卷
- 逻辑卷可以是精简调配的。这可让您创建大于可用物理空间的逻辑卷。如需更多信息,请参阅 创建精简逻辑卷。
- Caching
- 缓存使用 SSD 等快速设备来缓存逻辑卷中的数据,从而提高性能。如需更多信息,请参阅 缓存逻辑卷。
第 2 章 管理 LVM 物理卷 复制链接链接已复制到粘贴板!
物理卷(PV)是物理存储设备或者 LVM 使用的存储设备上的一个分区。
在初始化过程中,LVM 磁盘标签和元数据被写入设备,这允许 LVM 作为逻辑卷管理方案的一部分来跟踪和管理设备。
在初始化后,您无法增加元数据的大小。如果您需要较大的元数据,您必须在初始化过程中设置合适的大小。
初始化过程完成后,您可以将 PV 分配给卷组(VG)。您可以将这个 VG 分成逻辑卷(LV),后者是操作系统和应用程序可用于存储的虚拟块设备。
为确保最佳性能,将整个磁盘分区为一个 PV ,以供 LVM 使用。
2.1. 创建 LVM 物理卷 复制链接链接已复制到粘贴板!
您可以使用 pvcreate
命令初始化 LVM 使用的物理卷。
先决条件
- 管理访问权限.
-
已安装
lvm2
软件包。
流程
确定您要用作物理卷的存储设备。要列出所有可用存储设备,请使用:
lsblk
$ lsblk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 LVM 物理卷:
pvcreate /dev/sdb
# pvcreate /dev/sdb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要初始化为物理卷的设备的名称替换 /dev/sdb。
验证步骤
显示创建的物理卷:
pvs
# pvs PV VG Fmt Attr PSize PFree /dev/sdb lvm2 a-- 28.87g 13.87g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.2. 使用 storage RHEL 系统角色调整物理卷大小 复制链接链接已复制到粘贴板!
使用 storage
系统角色,您可以在从主机外部重新调整底层存储或磁盘的大小后重新调整 LVM 物理卷大小。例如:您增加了虚拟磁盘的大小,并希望在现有 LVM 中使用额外的空间。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。 - 底层块存储的大小已被更改。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示新物理卷大小:
ansible managed-node-01.example.com -m command -a 'pvs'
$ ansible managed-node-01.example.com -m command -a 'pvs' PV VG Fmt Attr PSize PFree /dev/sdf1 myvg lvm2 a-- 1,99g 1,99g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.3. 删除 LVM 物理卷 复制链接链接已复制到粘贴板!
您可以使用 pvremove
命令删除物理卷,以供 LVM 使用。
先决条件
- 管理访问权限.
流程
列出物理卷,以识别您要删除的设备:
pvs
# pvs PV VG Fmt Attr PSize PFree /dev/sdb1 lvm2 --- 28.87g 28.87g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除物理卷:
pvremove /dev/sdb1
# pvremove /dev/sdb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /dev/sdb1 替换为与物理卷关联的设备的名称。
如果您的物理卷是卷组的一部分,则您需要首先将其从卷组中删除。
如果卷组包含多个物理卷,请使用
vgreduce
命令:vgreduce VolumeGroupName /dev/sdb1
# vgreduce VolumeGroupName /dev/sdb1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。将 /dev/sdb1 替换为设备的名称。
如果您的卷组只包含一个物理卷,请使用
vgremove
命令:vgremove VolumeGroupName
# vgremove VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。
验证
验证物理卷是否已删除:
pvs
# pvs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4. 在 web 控制台中创建逻辑卷 复制链接链接已复制到粘贴板!
逻辑卷作为物理驱动器使用。您可以使用 RHEL 9 web 控制台在卷组中创建 LVM 逻辑卷。
先决条件
- 您已安装了 RHEL 9 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged
软件包已安装在您的系统上。 - 已创建卷组。
流程
登录到 RHEL 9 web 控制台。
详情请参阅 登录到 web 控制台。
- 点 Storage。
- 在 Storage 表中,点您要在其中创建逻辑卷的卷组。
- 在 Logical volume group 页面中,滚动到 LVM2 logical volumes 部分,然后点击 。
- 在 Name 字段中输入新逻辑卷的名称。不要在名称中包含空格。
在 Block device for filesystems。
下拉菜单中,选择此配置允许您创建一个逻辑卷,其最大卷大小等于卷组中所含所有驱动器的总和。
定义逻辑卷的大小。考虑:
- 使用这个逻辑卷的系统所需的空间。
- 您要创建的逻辑卷数量。
您可以选择不使用整个空间。如果需要,您可以稍后增大逻辑卷。
点
。逻辑卷被创建。要使用逻辑卷,您必须格式化并挂载卷。
验证
在 Logical volume 页面中,滚动到 LVM2 logical volumes 部分,并验证是否列出了新逻辑卷。
2.5. 在 web 控制台中格式化逻辑卷 复制链接链接已复制到粘贴板!
逻辑卷作为物理驱动器使用。要使用它们,您必须使用文件系统格式化它们。
格式化逻辑卷会删除卷上的所有数据。
您选择的文件系统决定了可用于逻辑卷的配置参数。例如,XFS 文件系统不支持缩小卷。
先决条件
- 您已安装了 RHEL 9 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged
软件包已安装在您的系统上。 - 逻辑卷已创建。
- 您有对系统的 root 访问权限。
流程
登录到 RHEL 9 web 控制台。
详情请参阅 登录到 web 控制台。
- 点 。
- 在 Storage 表中,点创建了逻辑卷的卷组。
- 在 Logical volume group 页面中,滚动到 LVM2 logical volumes 部分。
- 点击您要格式的卷组旁的菜单按钮 。
从下拉菜单中选择
。- 在 Name 字段中输入文件系统的名称。
在 Mount Point 字段中添加挂载路径。
在
下拉菜单中选择一个文件系统:XFS 文件系统支持大的逻辑卷,在不停止工作的情况下在线切换物理驱动器,并可以增大现有的文件系统。如果您没有不同的首选项,请保留这个文件系统。
XFS 不支持缩小使用 XFS 文件系统格式的卷大小
ext4 文件系统支持:
- 逻辑卷
- 在不中断的情况下在线切换物理驱动器
- 增大文件系统
- 缩小文件系统
如果您希望 RHEL web 控制台使用零重写整个磁盘,请选择 Overwrite existing data with zeros 复选框。使用这个选项较慢,因为程序必须经过整个磁盘,但它更为安全。如果磁盘包含任何数据且需要覆盖数据,则使用这个选项。
如果您没有选择 Overwrite existing data with zeros 复选框,RHEL web 控制台只重写磁盘头。这提高了格式化速度。
如果要在逻辑卷上启用它,请在
下拉菜单中选择加密的类型。您可以选择具有 LUKS1 (Linux Unified Key Setup)或 LUKS2 加密的版本,其允许您使用密码短语加密卷。
- 在 下拉菜单中,选择您希望逻辑卷在系统引导后何时挂载。
- 选择所需的 挂载选项。
格式化逻辑卷:
- 如果要格式化卷并立即挂载它,请单击 。
如果要格式化卷,而不挂载它,请单击
。根据卷大小以及选择格式化选项,格式化可能需要几分钟。
验证
在 Logical volume group 页面中,滚动到 LVM2 logical volumes 部分,然后点逻辑卷,来检查详情和其它选项。
- 如果您选择了 选项,点逻辑卷行末尾的菜单按钮,然后选择 来使用逻辑卷。
2.6. 在 web 控制台中重新定义逻辑卷大小 复制链接链接已复制到粘贴板!
您可以在 RHEL 9 web 控制台中扩展或减少逻辑卷。示例流程演示了如何在不使卷离线的情况下增大和缩小逻辑卷的大小。
您不能减少包含 GFS2 或者 XFS 文件系统的卷。
先决条件
- 您已安装了 RHEL 9 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged
软件包已安装在您的系统上。 - 现有逻辑卷包含支持调整逻辑卷大小的文件系统。
流程
- 登录到 RHEL web 控制台。
- 点 。
- 在 Storage 表中,点创建了逻辑卷的卷组。
在 Logical Volume group 页面中,滚动到 LVM2 logical volumes 部分,然后点击您要调整其大小的卷组旁的菜单按钮 。
在菜单中,选择 Grow 或 Shrink 来调整卷的大小:
增大卷:
- 选择 来增加卷的大小。
在 Grow logical volume 对话框中调整逻辑卷的大小。
点
。LVM 增大逻辑卷,而不会导致系统中断。
缩小卷:
- 选择 以减少卷的大小。
在 Shrink logical volume 对话框中调整逻辑卷的大小。
点
。LVM 缩小逻辑卷,而不会导致系统中断。
第 3 章 管理 LVM 卷组 复制链接链接已复制到粘贴板!
您可以创建并使用卷组(VG)来管理组合到单个存储实体中的多个物理卷(PV),并调整其大小。
扩展是您可以在 LVM 中分配的最小空间单位。物理扩展(PE)和逻辑扩展(LE)的默认大小为 4 MiB,您可以进行配置。所有扩展都有同样的大小。
当您在 VG 中创建逻辑卷(LV)时,LVM 会对 PV 分配物理扩展。LV 中的逻辑扩展与 VG 中的物理扩展一一对应。您不需要指定创建 LV 的 PE。LVM 将找到可用的 PE,并将它们拼凑在一起,来创建所需大小的LV。
在 VG 中,您可以创建多个 LV,每个 LV 就像一个传统的分区,但可以跨物理卷,并可以动态调整大小。VG 可以自动管理磁盘空间的分配。
3.1. 创建 LVM 卷组 复制链接链接已复制到粘贴板!
您可以使用 vgcreate
命令创建卷组(VG)。您可以为非常大或非常小的卷调整扩展的大小,以优化性能和存储效率。您可以在创建 VG 时指定扩展的大小。要更改扩展的大小,您必须重新创建卷组。
先决条件
- 管理访问权限.
-
已安装
lvm2
软件包。 - 创建一个或多个物理卷。有关创建物理卷的更多信息,请参阅 创建 LVM 物理卷。
流程
列出并识别您要包含在 VG 中的 PV:
pvs
# pvs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 VG:
vgcreate VolumeGroupName PhysicalVolumeName1 PhysicalVolumeName2
# vgcreate VolumeGroupName PhysicalVolumeName1 PhysicalVolumeName2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要创建的卷组的名称替换 VolumeGroupName。将 PhysicalVolumeName 替换为 PV 的名称。
要在创建 VG 时指定扩展的大小,请使用
-s ExtentSize
选项。将 ExtentSize 替换为扩展的大小。如果没有提供大小的后缀,命令默认使用 MB。
验证
验证 VG 是否已创建:
vgs
# vgs VG #PV #LV #SN Attr VSize VFree VolumeGroupName 1 0 0 wz--n- 28.87g 28.87g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2. 在 web 控制台中创建卷组 复制链接链接已复制到粘贴板!
从一个或多个物理驱动器或者其它存储设备创建卷组。
从卷组创建逻辑卷。每个卷组都可以包括多个逻辑卷。
先决条件
- 您已安装了 RHEL 9 web 控制台。
- 您已启用了 cockpit 服务。
您的用户帐户被允许登录到 web 控制台。
具体步骤请参阅安装并启用 Web 控制台。
-
cockpit-storaged
软件包已安装在您的系统上。 - 要创建卷组的物理驱动器或其他类型的存储设备。
流程
登录到 RHEL 9 web 控制台。
详情请参阅 登录到 web 控制台。
- 点 。
- 在 Storage 表中,点菜单按钮。
从下拉菜单中选择 Create LVM2 volume group。
- 在 Name 字段中输入卷组的名称。名称不得包含空格。
选择您要组合的驱动器来创建卷组。
RHEL web 控制台仅显示未使用的块设备。如果您没有在列表中看到设备,请确保它没有被系统使用,或者将其格式化为空且未使用。使用的设备包括,例如:
- 使用文件系统格式化的设备
- 另一个卷组中的物理卷
- 物理卷是另一个软件 RAID 设备的成员
点
。已创建卷组。
验证
- 在 Storage 页面中,检查新卷组是否列在 Storage 表中。
3.3. 重命名 LVM 卷组 复制链接链接已复制到粘贴板!
您可以使用 vgrename
命令重命名卷组(VG)。
先决条件
- 管理访问权限.
-
已安装
lvm2
软件包。 - 创建一个或多个物理卷。有关创建物理卷的更多信息,请参阅 创建 LVM 物理卷。
- 已创建卷组。有关创建卷组的详情,请参考 第 3.1 节 “创建 LVM 卷组”。
流程
列出并识别您要重命名的 VG:
vgs
# vgs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重命名 VG:
vgrename OldVolumeGroupName NewVolumeGroupName
# vgrename OldVolumeGroupName NewVolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 OldVolumeGroupName 替换为 VG 的名称。将 NewVolumeGroupName 替换为 VG 的新名称。
验证
验证 VG 是否有新名称:
vgs
# vgs VG #PV #LV #SN Attr VSize VFree NewVolumeGroupName 1 0 0 wz--n- 28.87g 28.87g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4. 扩展 LVM 卷组 复制链接链接已复制到粘贴板!
您可以使用 vgextend
命令将物理卷(PV)添加到卷组(VG)中。
先决条件
- 管理访问权限.
-
已安装
lvm2
软件包。 - 创建一个或多个物理卷。有关创建物理卷的更多信息,请参阅 创建 LVM 物理卷。
- 已创建卷组。有关创建卷组的详情,请参考 第 3.1 节 “创建 LVM 卷组”。
流程
列出并识别您要扩展的 VG:
vgs
# vgs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出并识别您要添加到 VG 中的 PV:
pvs
# pvs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 扩展 VG:
vgextend VolumeGroupName PhysicalVolumeName
# vgextend VolumeGroupName PhysicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为 VG 的名称。将 PhysicalVolumeName 替换为 PV 的名称。
验证
验证 VG 现在是否包含新 PV:
pvs
# pvs PV VG Fmt Attr PSize PFree /dev/sda VolumeGroupName lvm2 a-- 28.87g 28.87g /dev/sdd VolumeGroupName lvm2 a-- 1.88g 1.88g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.5. 合并 LVM 卷组 复制链接链接已复制到粘贴板!
您可以使用 vgmerge
命令将两个现有的卷组(VG)合并。源卷将被合并到目标卷中。
先决条件
- 管理访问权限.
-
已安装
lvm2
软件包。 - 创建一个或多个物理卷。有关创建物理卷的更多信息,请参阅 创建 LVM 物理卷。
- 创建两个或多个卷组。有关创建卷组的详情,请参考 第 3.1 节 “创建 LVM 卷组”。
流程
列出并识别您要合并的 VG:
vgs
# vgs VG #PV #LV #SN Attr VSize VFree VolumeGroupName1 1 0 0 wz--n- 28.87g 28.87g VolumeGroupName2 1 0 0 wz--n- 1.88g 1.88g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将源 VG 合并到目标 VG 中:
vgmerge VolumeGroupName2 VolumeGroupName1
# vgmerge VolumeGroupName2 VolumeGroupName1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName2 替换为源 VG 的名称。将 VolumeGroupName1 替换为目标 VG 的名称。
验证
验证 VG 现在是否包含新 PV:
vgs
# vgs VG #PV #LV #SN Attr VSize VFree VolumeGroupName1 2 0 0 wz--n- 30.75g 30.75g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.6. 从卷组中删除物理卷 复制链接链接已复制到粘贴板!
要从卷组(VG)中删除未使用的物理卷(PV),请使用 vgreduce
命令。vgreduce
命令通过删除一个或多个空物理卷来缩小卷组的容量。这样就可以使不同的卷组自由使用那些物理卷,或者将其从系统中删除。
流程
如果物理卷仍在使用,请将数据从同一卷组迁移到另一个物理卷中:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果现有卷组中的其他物理卷上没有足够的空闲扩展:
从 /dev/vdb4 创建一个新物理卷:
pvcreate /dev/vdb4
# pvcreate /dev/vdb4 Physical volume "/dev/vdb4" successfully created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将新创建的物理卷添加到卷组中:
vgextend VolumeGroupName /dev/vdb4
# vgextend VolumeGroupName /dev/vdb4 Volume group "VolumeGroupName" successfully extended
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将数据从 /dev/vdb3 移到 /dev/vdb4 中 :
pvmove /dev/vdb3 /dev/vdb4
# pvmove /dev/vdb3 /dev/vdb4 /dev/vdb3: Moved: 33.33% /dev/vdb3: Moved: 100.00%
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
从卷组中删除物理卷 /dev/vdb3:
vgreduce VolumeGroupName /dev/vdb3
# vgreduce VolumeGroupName /dev/vdb3 Removed "/dev/vdb3" from volume group "VolumeGroupName"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证 /dev/vdb3 物理卷是否已从 VolumeGroupName 卷组中删除:
pvs
# pvs PV VG Fmt Attr PSize PFree Used /dev/vdb1 VolumeGroupName lvm2 a-- 1020.00m 0 1020.00m /dev/vdb2 VolumeGroupName lvm2 a-- 1020.00m 0 1020.00m /dev/vdb3 lvm2 a-- 1020.00m 1008.00m 12.00m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.7. 分割 LVM 卷组 复制链接链接已复制到粘贴板!
如果在物理卷中有足够的空闲空间,就可在不添加新磁盘的情况下创建新的卷组。
在初始设置中,卷组 VolumeGroupName1 由 /dev/vdb1、/dev/vdb2 和 /dev/vdb3 组成。完成此流程后,卷组 VolumeGroupName1 将包含 /dev/vdb1 和 /dev/vdb2,第二个卷组 VolumeGroupName2 将包含 /dev/vdb3。
先决条件
-
卷组中有足够的空间。使用
vgscan
命令确定卷组中当前有多少可用空间。 -
根据现有物理卷中的可用容量,使用
pvmove
命令将所有使用的物理区块移动到其他物理卷。如需更多信息,请参阅从卷组中删除物理卷。
流程
将现有卷组 VolumeGroupName1 分成新卷组 VolumeGroupName2 :
vgsplit VolumeGroupName1 VolumeGroupName2 /dev/vdb3
# vgsplit VolumeGroupName1 VolumeGroupName2 /dev/vdb3 Volume group "VolumeGroupName2" successfully split from "VolumeGroupName1"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果您使用现有卷组创建了逻辑卷,请使用以下命令取消激活逻辑卷:
lvchange -a n /dev/VolumeGroupName1/LogicalVolumeName
# lvchange -a n /dev/VolumeGroupName1/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看两个卷组的属性:
vgs
# vgs VG #PV #LV #SN Attr VSize VFree VolumeGroupName1 2 1 0 wz--n- 34.30G 10.80G VolumeGroupName2 1 0 0 wz--n- 17.15G 17.15G
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证新创建的卷组 VolumeGroupName2 是否由 /dev/vdb3 物理卷组成:
pvs
# pvs PV VG Fmt Attr PSize PFree Used /dev/vdb1 VolumeGroupName1 lvm2 a-- 1020.00m 0 1020.00m /dev/vdb2 VolumeGroupName1 lvm2 a-- 1020.00m 0 1020.00m /dev/vdb3 VolumeGroupName2 lvm2 a-- 1020.00m 1008.00m 12.00m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.8. 将卷组移动到另一个系统中 复制链接链接已复制到粘贴板!
您可以使用以下命令将整个 LVM 卷组(VG)移到另一个系统中:
vgexport
- 在现有系统上使用这个命令使系统无法访问不活跃的 VG。一旦 VG 无法访问,您就可以分离其物理卷(PV)。
vgimport
- 在其他系统上使用此命令使在旧系统中不活跃的 VG 可在新系统中访问。
先决条件
- 没有用户正在访问您要移动的卷组中活动的卷上的文件。
流程
卸载 LogicalVolumeName 逻辑卷:
umount /dev/mnt/LogicalVolumeName
# umount /dev/mnt/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 取消激活卷组中的所有逻辑卷,这可防止卷组上任何进一步的活动:
vgchange -an VolumeGroupName
# vgchange -an VolumeGroupName vgchange -- volume group "VolumeGroupName" successfully deactivated
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导出卷组,以防止其被您要删除它的系统访问:
vgexport VolumeGroupName
# vgexport VolumeGroupName vgexport -- volume group "VolumeGroupName" successfully exported
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看导出的卷组:
pvscan
# pvscan PV /dev/sda1 is in exported VG VolumeGroupName [17.15 GB / 7.15 GB free] PV /dev/sdc1 is in exported VG VolumeGroupName [17.15 GB / 15.15 GB free] PV /dev/sdd1 is in exported VG VolumeGroupName [17.15 GB / 15.15 GB free] ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 关闭您的系统,拔出组成卷组的磁盘,并将其连接到新系统。
将磁盘插入新系统,并导入卷组使其可以被新系统访问:
vgimport VolumeGroupName
# vgimport VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以使用
vgimport
命令的--force
参数导入缺少物理卷的卷组,然后运行vgreduce --removemissing
命令。激活卷组:
vgchange -ay VolumeGroupName
# vgchange -ay VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 挂载文件系统使其可用:
mkdir -p /mnt/VolumeGroupName/users mount /dev/VolumeGroupName/users /mnt/VolumeGroupName/users
# mkdir -p /mnt/VolumeGroupName/users # mount /dev/VolumeGroupName/users /mnt/VolumeGroupName/users
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
其他资源
-
您系统上的
vgimport (8)
,vgexport (8)
和vgchange (8)
手册页
3.9. 删除 LVM 卷组 复制链接链接已复制到粘贴板!
您可以使用 vgremove
命令删除现有卷组。只有不包含逻辑卷的卷组才能被删除。
先决条件
- 管理访问权限.
流程
确定卷组不包含逻辑卷:
vgs -o vg_name,lv_count VolumeGroupName
# vgs -o vg_name,lv_count VolumeGroupName VG #LV VolumeGroupName 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。
删除卷组:
vgremove VolumeGroupName
# vgremove VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。
3.10. 在集群环境中删除 LVM 卷组 复制链接链接已复制到粘贴板!
在集群环境中,LVM 使用 lockspace
<qualifier> 协调对在多个机器之间共享的卷组的访问。在删除卷组前您必须停止 lockspace
,以确保在删除过程中没有其他节点尝试访问或修改它。
先决条件
- 管理访问权限.
- 卷组没有包含逻辑卷。
流程
确定卷组不包含逻辑卷:
vgs -o vg_name,lv_count VolumeGroupName
# vgs -o vg_name,lv_count VolumeGroupName VG #LV VolumeGroupName 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。
停止所有节点上的
lockspace
,但您要删除卷组的节点除外:vgchange --lockstop VolumeGroupName
# vgchange --lockstop VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称,并等待锁停止。
删除卷组:
vgremove VolumeGroupName
# vgremove VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。
第 4 章 基本逻辑卷管理 复制链接链接已复制到粘贴板!
使用 LVM,您可以执行以下任务:
- 创建新的逻辑卷,以扩展您系统的存储能力
- 扩展现有卷和精简池,以容纳不断增长的数据
- 重命名卷以便进行更好的组织
- 缩减卷以释放未使用的空间
- 在不再需要时安全地删除卷
- 激活或停用卷,以控制系统对其数据的访问
4.1. 逻辑卷功能的概述 复制链接链接已复制到粘贴板!
使用逻辑卷管理器(LVM),您可以以一种传统分区方案无法提供的灵活、高效的方式管理磁盘存储。以下是用于存储管理和优化的重要的 LVM 功能的概述。
- 级联
- 级联涉及将一个或多个物理卷中的空间合并成一个逻辑卷,来有效地合并物理存储。
- 条带
- 条带通过将数据分布到多个物理卷上来优化数据 I/O 效率。这个方法通过允许并行 I/O 操作提高了顺序读写的性能。
- RAID
- LVM 支持 RAID 0、1、4、5、6 和 10。当您创建 RAID 逻辑卷时,LVM 会创建一个元数据子卷,它是阵列中的每个数据或奇偶校验子卷的大小的一个区块。
- 精简置备
- 精简配置允许创建比可用物理存储大的逻辑卷。通过精简配置,系统可以根据实际使用情况,而不是预先分配预定的量来动态分配存储。
- 快照
- 使用 LVM 快照,您可以创建逻辑卷的时间点副本。快照开始为空。当原始逻辑卷上发生更改时,快照会通过写时复制(CoW)捕获更改前的状态,并仅随着变化而增长,以保留原始逻辑卷的状态。
- Caching
- LVM 支持在较慢的块设备中使用快速块设备(比如 SSD 驱动器)作为写入或者写入缓存。用户可以创建缓存逻辑卷来提高其现有逻辑卷的性能,或者创建由小而快速的设备组成的新缓存逻辑卷,再加上一个大型、较慢的设备。
4.2. 创建逻辑卷 复制链接链接已复制到粘贴板!
LVM 通过将物理层抽象为可根据您的需要创建和调整的逻辑卷,来提供一种灵活的处理磁盘存储的方法。
4.2.1. 创建线性(厚)逻辑卷 复制链接链接已复制到粘贴板!
使用线性逻辑卷(LV),您可以将多个物理存储单元合并到一个虚拟存储空间中。您可以轻松地扩展或减少线性 LV,以容纳数据要求。
先决条件
- 管理访问权限.
-
已安装
lvm2
软件包。 - 已创建卷组。如需更多信息,请参阅创建 LVM 卷组。
流程
列出卷组的名称及其大小:
vgs -o vg_name,vg_size
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建线性 LV:
lvcreate --name LogicalVolumeName --size VolumeSize VolumeGroupName
# lvcreate --name LogicalVolumeName --size VolumeSize VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 LV 的名称替换 LogicalVolumeName。使用 LV 的大小替换 VolumeSize。如果没有大小的后缀,命令默认使用 MB。将 VolumeGroupName 替换为卷组的名称。
验证
验证线性 LV 是否已创建:
lvs -o lv_name,seg_type
# lvs -o lv_name,seg_type LV Type LogicalVolumeName linear
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.2. 使用 storage RHEL 系统角色创建或者调整逻辑卷大小 复制链接链接已复制到粘贴板!
使用 storage
角色执行以下任务:
- 在由多个磁盘组成的卷组中创建 LVM 逻辑卷
- 在 LVM 上调整现有文件系统大小
- 以池总大小的百分比表示 LVM 卷大小
如果卷组不存在,角色会创建它。如果逻辑卷在卷组中存在,如果其大小与 playbook 中指定的内容不匹配,则会调整其大小。
如果您要缩小逻辑卷,以避免数据丢失,则您必须确保该逻辑卷上的文件系统没有使用要缩小的逻辑卷中的空间。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例 playbook 中指定的设置包括以下内容:
size: <size>
- 您必须使用单位(如 GiB)或百分比(例如 60%)来指定大小。
有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证指定的卷是否已创建或已调整为请求的大小:
ansible managed-node-01.example.com -m command -a 'lvs myvg'
# ansible managed-node-01.example.com -m command -a 'lvs myvg'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.3. 创建条带逻辑卷 复制链接链接已复制到粘贴板!
使用条状逻辑卷(LV),您可以在多个物理卷(PV)上分发数据,从而通过同时使用多个磁盘的带宽来潜在地提高读写速度。
在创建条带 LV 时,务必要考虑条带的数量和大小。条带数是数据分布的 PV 的数量。增加条带数可以通过同时使用多个磁盘来提高性能。条带大小是在移至下一个磁盘前写入条带集中每个磁盘的数据块的大小,以 KB 为单位指定。最佳条带大小取决于您的工作负载和文件系统块大小。默认值为 64KB,可以调整。
先决条件
- 管理访问权限.
流程
列出卷组的名称及其大小:
vgs -o vg_name,vg_size
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建条带 LV:
lvcreate --stripes NumberOfStripes --stripesize StripeSize --size LogicalVolumeSize --name LogicalVolumeName VolumeGroupName
# lvcreate --stripes NumberOfStripes --stripesize StripeSize --size LogicalVolumeSize --name LogicalVolumeName VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 用条带数替换 NumberOfStripes。将 StripeSize 替换为条带大小(以 KB 为单位)。
--stripesize
不是一个必需的选项。如果没有指定条带大小,则默认为 64KB。使用 LV 的名称替换 LogicalVolumeName。将 VolumeGroupName 替换为卷组的名称。
验证
验证条状 LV 是否已创建:
lvs -o lv_name,seg_type
# lvs -o lv_name,seg_type LV Type LogicalVolumeName striped
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.4. 创建 RAID 逻辑卷 复制链接链接已复制到粘贴板!
RAID 逻辑卷可让您使用多个磁盘来实现冗余和性能。LVM 支持各种 RAID 级别,包括 RAID0、RAID1、RAID4、RAID5、RAID6 和 RAID10。
通过 LVM,您可以创建条带 RAID (RAID0、RAID4、RAID5、RAID6)、镜像 RAID (RAID1)或两者的组合(RAID10)。
RAID 4、RAID 5 和 RAID 6 通过存储奇偶校验数据来提供容错功能,这些数据可在磁盘故障时重建丢失的信息。
在创建 RAID LV 时,将每个条带放在一个单独的 PV 上。条带数等于应在卷组(VG)中的 PV 数。
RAID 级别 | 类型 | 奇偶校验 | 最小设备数 | 最小条带号 |
---|---|---|---|---|
RAID0 | Striping | None | 2 | 2 |
RAID1 | Mirroring | None | 2 | - |
RAID4 | Striping | 使用第一个设备来存储奇偶校验 | 3 | 2 |
RAID5 | Striping | 使用额外的设备来存储奇偶校验 | 3 | 2 |
RAID6 | Striping | 使用两个额外的设备来存储奇偶校验 | 5 | 3 |
RAID10 | Striping 和 mirroring | None | 4 | 2 |
先决条件
- 管理访问权限.
流程
列出卷组的名称及其大小:
vgs -o vg_name,vg_size
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 RAID LV:
要创建一个条带 raid,请使用:
lvcreate --type raidlevel --stripes NumberOfStripes --stripesize StripeSize --size Size --name LogicalVolumeName VolumeGroupName
# lvcreate --type raidlevel --stripes NumberOfStripes --stripesize StripeSize --size Size --name LogicalVolumeName VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 RAID 级别 0、4、5 或 6 替换 level。用条带数替换 NumberOfStripes。将 StripeSize 替换为条带大小(以 KB 为单位)。使用 LV 的大小替换 Size。使用 LV 的名称替换 LogicalVolumeName。
要创建镜像的 RAID,请使用:
lvcreate --type raid1 --mirrors MirrorsNumber --size Size --name LogicalVolumeName VolumeGroupName
# lvcreate --type raid1 --mirrors MirrorsNumber --size Size --name LogicalVolumeName VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 MirrorsNumber 替换为镜像的数量。使用 LV 的大小替换 Size。使用 LV 的名称替换 LogicalVolumeName。
要创建一个镜像的和条带的 RAID,请使用:
lvcreate --type raid10 --mirrors MirrorsNumber --stripes NumberOfStripes --stripesize StripeSize --size Size --name LogicalVolumeName VolumeGroupName
# lvcreate --type raid10 --mirrors MirrorsNumber --stripes NumberOfStripes --stripesize StripeSize --size Size --name LogicalVolumeName VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 MirrorsNumber 替换为镜像的数量。用条带数替换 NumberOfStripes。将 StripeSize 替换为条带大小(以 KB 为单位)。使用 LV 的大小替换 Size。使用 LV 的名称替换 LogicalVolumeName。
验证
验证 RAID LV 是否已创建:
lvs -o lv_name,seg_type
# lvs -o lv_name,seg_type LV Type LogicalVolumeName raid0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.5. 创建精简逻辑卷 复制链接链接已复制到粘贴板!
在精简配置下,从卷组(VG)分配物理扩展(PE),以创建具有特定物理大小的精简池。然后,根据虚拟大小从这个精简池分配逻辑卷(LV),不受池的物理容量的限制。这样,当所有精简 LV 的总虚拟大小超过精简池的物理容量时,每个精简 LV 的虚拟大小都可能会超过精简池的物理容量,从而导致过度配置。因此,务必要密切监控逻辑和物理使用情况,以避免耗尽空间和中断。
精简配置可根据需要分配空间来优化存储效率,降低了初始成本并提高了资源利用率。但是,在使用精简 LV 时,请注意以下缺点:
- 不当的丢弃处理可能会阻止释放未使用的存储空间,从而导致空间随着时间的推移被全部分配。
- 在带有快照的文件系统上,写时复制(CoW)操作可能会较慢。
- 数据块可以在多个文件系统之间混合,导致随机访问限制。
先决条件
- 管理访问权限.
- 您已创建了一个物理卷。如需更多信息,请参阅 创建 LVM 物理卷。
- 您已创建了一个卷组。如需更多信息,请参阅创建 LVM 卷组。
- 您已创建了一个逻辑卷。如需更多信息,请参阅 创建逻辑卷。
流程
列出卷组的名称及其大小:
vgs -o vg_name,vg_size
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建精简池:
lvcreate --type thin-pool --size PoolSize --name ThinPoolName VolumeGroupName
# lvcreate --type thin-pool --size PoolSize --name ThinPoolName VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 PoolSize 替换为精简池可以使用的最大磁盘空间量。将 ThinPoolName 替换为精简池的名称。将 VolumeGroupName 替换为卷组的名称。
创建一个精简 LV:
lvcreate --type thin --virtualsize MaxVolumeSize --name ThinVolumeName --thinpool ThinPoolName VolumeGroupName
# lvcreate --type thin --virtualsize MaxVolumeSize --name ThinVolumeName --thinpool ThinPoolName VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 MaxVolumeSize 替换为卷可在精简池中增大的最大大小。将 ThinPoolName 替换为精简池的名称。将 VolumeGroupName 替换为卷组的名称。
注意您可以在同一精简池中创建其他精简 LV。
验证
验证精简 LV 是否已创建:
lvs -o lv_name,seg_type
# lvs -o lv_name,seg_type LV Type ThinPoolName thin-pool ThinVolumeName thin
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.6. 创建一个 VDO 逻辑卷 复制链接链接已复制到粘贴板!
VDO 逻辑卷(LV)使用 Virtual Data Optimizer (VDO)技术来提高存储效率。VDO LV 同时具有虚拟大小和物理大小。虚拟大小指的是呈现给用户的总存储量。物理大小是从 VG 分配的并被 VDO 池使用的实际物理存储量。
VDO LV 的虚拟大小通常大于 VDO 池的物理大小,使其过度配置。由于过度配置,需要密切监控 VDO 池中的物理空间,并在需要时进行扩展。
VDO LV 和 VDO 池作为一对被创建,并总是作为一对存在。
先决条件
- 管理访问权限.
流程
列出卷组的名称及其大小:
vgs -o vg_name,vg_size
# vgs -o vg_name,vg_size VG VSize VolumeGroupName 30.75g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个 VDO LV:
lvcreate --type vdo --virtualsize VolumeSize --size PhysicalPoolSize --name VDOVolumeName --vdopool VDOPoolName VolumeGroupName
# lvcreate --type vdo --virtualsize VolumeSize --size PhysicalPoolSize --name VDOVolumeName --vdopool VDOPoolName VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeSize 替换为卷的大小。将 PhysicalPoolSize 替换为池的大小。将 VDOVolumeName 替换为 VDO 卷的名称。将 VDOPoolName 替换为 VDO 池的名称。将 VolumeGroupName 替换为卷组的名称。
验证
验证 VDO LV 是否已创建:
lvs -o name,seg_type,size
# lvs -o name,seg_type,size LV Type LSize VDOPoolName vdo-pool 5.00g VDOVolumeName vdo 5.00g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3. 重新调整逻辑卷大小 复制链接链接已复制到粘贴板!
使用逻辑卷管理器(LVM),您可以根据需要重新调整逻辑卷(LV)大小,而不影响其上存储的数据。
4.3.1. 扩展线性逻辑卷 复制链接链接已复制到粘贴板!
您可以使用 lvextend
命令扩展线性(厚)LV 及其快照。
先决条件
- 管理访问权限.
流程
确保您的卷组有足够的空间来扩展 LV:
lvs -o lv_name,lv_size,vg_name,vg_size,vg_free
# lvs -o lv_name,lv_size,vg_name,vg_size,vg_free LV LSize VG VSize VFree LogicalVolumeName 1.49g VolumeGroupName 30.75g 29.11g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 扩展线性 LV 并调整文件系统大小:
lvextend --size +AdditionalSize --resizefs VolumeGroupName/LogicalVolumeName
# lvextend --size +AdditionalSize --resizefs VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用要添加到 LV 的空间量来替换 AdditionalSize。默认测量单位是 MB,但您也可以指定其他单位。将 VolumeGroupName 替换为卷组的名称。使用精简卷的名称替换 LogicalVolumeName。
验证
验证线性 LV 是否已扩展:
lvs -o lv_name,lv_size
# lvs -o lv_name,lv_size LV LSize NewLogicalVolumeName 6.49g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.2. 扩展精简逻辑卷 复制链接链接已复制到粘贴板!
您可以使用 lvextend
命令扩展精简逻辑卷(LV)。
先决条件
- 管理访问权限.
流程
确保精简池有足够的空间容纳您计划添加的数据:
lvs -o lv_name,lv_size,data_percent
# lvs -o lv_name,lv_size,data_percent LV LSize Data% MyThinPool 20.10g 3.21 ThinVolumeName 1.10g 4.88
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 扩展 thin LV 并调整文件系统大小:
lvextend --size +AdditionalSize --resizefs VolumeGroupName/ThinVolumeName
# lvextend --size +AdditionalSize --resizefs VolumeGroupName/ThinVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用要添加到 LV 的空间量来替换 AdditionalSize。默认测量单位是 MB,但您也可以指定其他单位。将 VolumeGroupName 替换为卷组的名称。将 ThinVolumeName 替换为精简卷的名称。
验证
验证精简 LV 是否已扩展:
lvs -o lv_name,lv_size,data_percent
# lvs -o lv_name,lv_size,data_percent LV LSize Data% MyThinPool 20.10g 3.21 ThinVolumeName 6.10g 0.43
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.3. 扩展精简池 复制链接链接已复制到粘贴板!
精简逻辑卷的虚拟大小可以超过精简池的物理容量,导致过度配置。要防止空间不足,您必须监控并定期扩展精简池的容量。
data_percent
指标表示精简池当前使用的已分配的数据空间的百分比。metadata_percent
指标反映了用于存储元数据的空间d 百分比,这对于在精简池中管理映射非常重要。
监控这些指标对于确保有效的存储管理和避免容量问题至关重要。
LVM 提供了选项,来根据需要手动扩展数据或元数据容量。另外,您可以启用监控并自动化精简池的扩展。
4.3.3.1. 手动扩展精简池 复制链接链接已复制到粘贴板!
逻辑卷管理器(LVM)提供了选项,来手动扩展数据段、元数据段或精简池。
4.3.3.1.1. 扩展精简池 复制链接链接已复制到粘贴板!
您可以使用 lvextend
命令扩展精简池。
先决条件
- 管理访问权限.
流程
显示使用的数据和元数据空间:
lvs -o lv_name,seg_type,data_percent,metadata_percent
# lvs -o lv_name,seg_type,data_percent,metadata_percent LV Type Data% Meta% ThinPoolName thin-pool 97.66 26.86 ThinVolumeName thin 48.80
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 扩展精简池:
lvextend -L Size VolumeGroupName/ThinPoolName
# lvextend -L Size VolumeGroupName/ThinPoolName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用精简池的新大小替换 Size。将 VolumeGroupName 替换为卷组的名称。将 ThinPoolName 替换为精简池的名称。
数据大小将被扩展。如果需要,元数据大小将被扩展。
验证
验证精简池是否已扩展:
lvs -o lv_name,seg_type,data_percent,metadata_percent
# lvs -o lv_name,seg_type,data_percent,metadata_percent LV Type Data% Meta% ThinPoolName thin-pool 24.41 16.93 ThinVolumeName thin 24.41
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.3.1.2. 扩展精简池数据段 复制链接链接已复制到粘贴板!
您可以使用 lvextend
命令扩展 data_percent
段。
先决条件
- 管理访问权限.
流程
显示
data_percent
段:lvs -o lv_name,seg_type,data_percent
# lvs -o lv_name,seg_type,data_percent LV Type Data% ThinPoolName thin-pool 93.87
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 扩展
data_percent
段:lvextend -L Size VolumeGroupName/ThinPoolName_tdata
# lvextend -L Size VolumeGroupName/ThinPoolName_tdata
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Size 替换为数据段的大小。将 VolumeGroupName 替换为卷组的名称。将 ThinPoolName 替换为精简池的名称。
验证
验证
data_percent
段是否已扩展:lvs -o lv_name,seg_type,data_percent
# lvs -o lv_name,seg_type,data_percent LV Type Data% ThinPoolName thin-pool 40.23
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.3.1.3. 扩展精简池元数据段 复制链接链接已复制到粘贴板!
您可以使用 lvextend
命令扩展 metadata_percent
段。
先决条件
- 管理访问权限.
流程
显示
metadata_percent
段:lvs -o lv_name,seg_type,metadata_percent
# lvs -o lv_name,seg_type,metadata_percent LV Type Meta% ThinPoolName thin-pool 75.00
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 扩展
metadata_percent
段:lvextend -L Size VolumeGroupName/ThinPoolName_tmeta
# lvextend -L Size VolumeGroupName/ThinPoolName_tmeta
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用元数据段的大小替换 Size。将 VolumeGroupName 替换为卷组的名称。将 ThinPoolName 替换为精简池的名称。
验证
验证
metadata_percent
段是否已扩展:lvs -o lv_name,seg_type,metadata_percent
# lvs -o lv_name,seg_type,metadata_percent LV Type Meta% ThinPoolName thin-pool 0.19
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.3.2. 自动扩展精简池 复制链接链接已复制到粘贴板!
您可以通过启用监控,并设置 thin_pool_autoextend_threshold
和 thin_pool_autoextend_percent
配置参数来自动化精简池的扩展。
先决条件
- 管理访问权限.
流程
检查精简池是否已被监控:
lvs -o lv_name,vg_name,seg_monitor
# lvs -o lv_name,vg_name,seg_monitor LV VG Monitor ThinPoolName VolumeGroupName not monitored
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
dmeventd
守护进程启用精简池监控:lvchange --monitor y VolumeGroupName/ThinPoolName
# lvchange --monitor y VolumeGroupName/ThinPoolName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。将 ThinPoolName 替换为精简池的名称。
-
以
root
用户身份,在您选择的编辑器中打开/etc/lvm/lvm.conf
文件。 取消
thin_pool_autoextend_threshold
和thin_pool_autoextend_percent
行的注释,并将每个参数设置为所需的值:thin_pool_autoextend_threshold = 70 thin_pool_autoextend_percent = 20
thin_pool_autoextend_threshold = 70 thin_pool_autoextend_percent = 20
Copy to Clipboard Copied! Toggle word wrap Toggle overflow thin_pool_autoextend_threshold
决定 LVM 开始自动扩展精简池的百分比。例如,将其设置为 70 表示 LVM 会在达到 70% 容量时尝试扩展精简池。thin_pool_autoextend_percent
指定达到阈值时精简池应扩展的百分比。例如,将其设置为 20 表示精简池将增加其当前大小的 20%。- 保存更改并退出编辑器。
重启
lvm2-monitor
:systemctl restart lvm2-monitor
# systemctl restart lvm2-monitor
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.4. 扩展 VDO 池 复制链接链接已复制到粘贴板!
监控并定期扩展 VDO 池的容量以防止耗尽空间非常重要。
逻辑卷管理器(LVM)提供了选项,来根据需要手动扩展 VDO 池容量。另外,您可以启用监控并自动化 VDO 池的扩展。
4.3.4.1. 手动扩展 VDO 池 复制链接链接已复制到粘贴板!
使用 lvextend
命令扩展 VDO 池。
先决条件
- 管理访问权限.
流程
显示当前 VDO 使用情况:
lvs -o lv_name,vg_name,lv_size,data_percent VolumeGroupName/VDOPoolName
# lvs -o lv_name,vg_name,lv_size,data_percent VolumeGroupName/VDOPoolName LV VG LSize Data% VDOPoolName VolumeGroupName 5.00g 60.03
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。将 VDOPoolName 替换为 VDO 池的名称。
扩展 VDO 池:
lvextend --size PhysicalSize VolumeGroupName/VDOPoolName
# lvextend --size PhysicalSize VolumeGroupName/VDOPoolName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用新的物理大小替换 PhysicalSize。将 VolumeGroupName 替换为卷组的名称。将 VDOPoolName 替换为 VDO 池的名称。
验证
验证 VDO 池是否已扩展:
lvs -o lv_name,vg_name,lv_size,data_percent VolumeGroupName/VDOPoolName
# lvs -o lv_name,vg_name,lv_size,data_percent VolumeGroupName/VDOPoolName LV VG LSize Data% VDOPoolName VolumeGroupName 10.00g 30.02
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.4.2. 自动扩展 VDO 池 复制链接链接已复制到粘贴板!
您可以通过启用监控并设置 vdo_pool_autoextend_threshold
和 vdo_pool_autoextend_percent
参数来自动化 Virtual Data Optimizer (VDO)池的扩展。
先决条件
- 管理访问权限.
流程
检查 VDO 池是否已被监控:
lvs -o name,seg_monitor VolumeGroupName/VDOPoolName
# lvs -o name,seg_monitor VolumeGroupName/VDOPoolName LV VG Monitor VDOPoolName VolumeGroupName not monitored
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。将 VDOPoolName 替换为 VDO 池的名称。
使用
dmeventd
守护进程启用 VDO 池监控:lvchange --monitor y VolumeGroupName/VDOPoolName
# lvchange --monitor y VolumeGroupName/VDOPoolName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。将 VDOPoolName 替换为 VDO 池的名称。
-
以
root
用户身份,在您选择的编辑器中打开/etc/lvm/lvm.conf
文件。 取消
vdo_pool_autoextend_percent
和vdo_pool_autoextend_threshold
行的注释,并将每个参数设置为所需的值:vdo_pool_autoextend_threshold = 70 vdo_pool_autoextend_percent = 20
vdo_pool_autoextend_threshold = 70 vdo_pool_autoextend_percent = 20
Copy to Clipboard Copied! Toggle word wrap Toggle overflow vdo_pool_autoextend_threshold
决定 LVM 开始自动扩展 VDO 池时的百分比。例如,将其设置为 70 表示 LVM 尝试在达到 70% 容量时扩展 VDO 池。vdo_pool_autoextend_percent
指定在达到阈值时 VDO 池应扩展的百分比。例如,将其设置为 20 表示 VDO 池将增加其当前大小的 20%。- 保存更改并退出编辑器。
重启
lvm2-monitor
:systemctl restart lvm2-monitor
# systemctl restart lvm2-monitor
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.5. 缩小逻辑卷 复制链接链接已复制到粘贴板!
当 LV 的大小缩小时,释放的逻辑扩展将返回到卷组,然后可被其他 LV 使用。
存储在减少的区域中的数据会丢失。在继续操作前,始终备份数据并调整文件系统的大小。
先决条件
- 管理访问权限.
流程
列出逻辑卷及其卷组:
lvs -o lv_name,vg_name,lv_size
# lvs -o lv_name,vg_name,lv_size LV VG LSize LogicalVolumeName VolumeGroupName 6.49g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查挂载逻辑卷的位置:
findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName
# findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName SOURCE TARGET /dev/mapper/VolumeGroupName-NewLogicalVolumeName /MountPoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /dev/VolumeGroupName/LogicalVolumeName 替换为逻辑卷的路径。
卸载逻辑卷:
umount /MountPoint
# umount /MountPoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /MountPoint 替换为您的逻辑卷的挂载点。
检查并修复任何文件系统错误:
e2fsck -f /dev/VolumeGroupName/LogicalVolumeName
# e2fsck -f /dev/VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新调整 LV 和文件系统大小:
lvreduce --size TargetSize --resizefs VolumeGroupName/LogicalVolumeName
# lvreduce --size TargetSize --resizefs VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 LV 的新大小替换 TargetSize。将 VolumeGroupName/LogicalVolumeName 替换为逻辑卷的路径。
重新挂载文件系统:
mount -o remount /MountPoint
# mount -o remount /MountPoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /MountPoint 替换为您的文件系统的挂载点。
验证
验证文件系统的空间使用情况:
df -hT /MountPoint/
# df -hT /MountPoint/ Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/VolumeGroupName-NewLogicalVolumeName ext4 2.9G 139K 2.7G 1% /MountPoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /MountPoint 替换为您的逻辑卷的挂载点。
验证 LV 的大小:
lvs -o lv_name,lv_size
# lvs -o lv_name,lv_size LV LSize NewLogicalVolumeName 4.00g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.4. 重命名逻辑卷 复制链接链接已复制到粘贴板!
您可以使用 lvrename
命令重命名现有逻辑卷,包括快照。
先决条件
- 管理访问权限.
流程
列出逻辑卷及其卷组:
lvs -o lv_name,vg_name
# lvs -o lv_name,vg_name LV VG LogicalVolumeName VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重命名逻辑卷:
lvrename VolumeGroupName/LogicalVolumeName VolumeGroupName/NewLogicalVolumeName
# lvrename VolumeGroupName/LogicalVolumeName VolumeGroupName/NewLogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。使用逻辑卷的名称替换 LogicalVolumeName。使用新逻辑卷名称替换 NewLogicalVolumeName。
验证
验证逻辑卷是否已被重命名:
lvs -o lv_name
# lvs -o lv_name LV NewLogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.5. 删除逻辑卷 复制链接链接已复制到粘贴板!
您可以使用 lvremove
命令删除现有逻辑卷,包括快照。
先决条件
- 管理访问权限.
流程
列出逻辑卷及其路径:
lvs -o lv_name,lv_path
# lvs -o lv_name,lv_path LV Path LogicalVolumeName /dev/VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查挂载逻辑卷的位置:
findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName
# findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName SOURCE TARGET /dev/mapper/VolumeGroupName-LogicalVolumeName /MountPoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /dev/VolumeGroupName/LogicalVolumeName 替换为逻辑卷的路径。
卸载逻辑卷:
umount /MountPoint
# umount /MountPoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /MountPoint 替换为您的逻辑卷的挂载点。
删除逻辑卷:
lvremove VolumeGroupName/LogicalVolumeName
# lvremove VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName/LogicalVolumeName 替换为逻辑卷的路径。
4.6. 激活逻辑卷 复制链接链接已复制到粘贴板!
您可以使用 lvchange
命令激活逻辑卷。
先决条件
- 管理访问权限.
流程
列出逻辑卷、其卷组及其路径:
lvs -o lv_name,vg_name,lv_path
# lvs -o lv_name,vg_name,lv_path LV VG Path LogicalVolumeName VolumeGroupName VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 激活逻辑卷:
lvchange --activate y VolumeGroupName/LogicalVolumeName
# lvchange --activate y VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。使用逻辑卷的名称替换 LogicalVolumeName。
注意当激活作为另一个 LV 的快照创建的精简 LV 时,您可能需要使用-
ignoreactivationskip
选项来激活它。
验证
验证 LV 是否活跃:
lvdisplay VolumeGroupName/LogicalVolumeName
# lvdisplay VolumeGroupName/LogicalVolumeName ... LV Status available
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。使用逻辑卷的名称替换 LogicalVolumeName。
4.7. 停用逻辑卷 复制链接链接已复制到粘贴板!
默认情况下,当您创建逻辑卷时,它处于活动状态。您可以使用 lvchange
命令停用逻辑卷。
停用带有活跃挂载或正在使用的逻辑卷可能导致数据不一致和系统错误。
先决条件
- 管理访问权限.
流程
列出逻辑卷、其卷组及其路径:
lvs -o lv_name,vg_name,lv_path
# lvs -o lv_name,vg_name,lv_path LV VG Path LogicalVolumeName VolumeGroupName /dev/VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查挂载逻辑卷的位置:
findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName
# findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName SOURCE TARGET /dev/mapper/VolumeGroupName-LogicalVolumeName /MountPoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /dev/VolumeGroupName/LogicalVolumeName 替换为逻辑卷的路径。
卸载逻辑卷:
umount /MountPoint
# umount /MountPoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /MountPoint 替换为您的逻辑卷的挂载点。
取消激活逻辑卷:
lvchange --activate n VolumeGroupName/LogicalVolumeName
# lvchange --activate n VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。使用逻辑卷的名称替换 LogicalVolumeName。
验证
验证 LV 是否未激活:
lvdisplay VolumeGroupName/LogicalVolumeName
# lvdisplay VolumeGroupName/LogicalVolumeName ... LV Status NOT available
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。使用逻辑卷的名称替换 LogicalVolumeName。
第 5 章 高级逻辑卷管理 复制链接链接已复制到粘贴板!
LVM 包括如下高级功能:
- 快照,它们是逻辑卷(LV)的时间点副本
- 缓存,有了它您可以使用更快的存储作为较慢存储的缓存
- 创建自定义精简池
- 创建自定义 VDO LV
5.1. 管理逻辑卷快照 复制链接链接已复制到粘贴板!
快照是一个在特定时间点镜像另一个 LV 的内容的逻辑卷(LV)。
5.1.1. 了解逻辑卷快照 复制链接链接已复制到粘贴板!
当您创建快照时,您在创建一个作为另一个 LV 的时间点副本的新 LV。最初,快照 LV 不包含实际数据。而它会在创建快照时引用原始 LV 的数据块。
定期监控快照的存储使用情况非常重要。如果快照达到其分配空间的 100%,则它将无效。
必须在完全填满快照之前扩展快照。这可以通过使用 lvextend
命令手动完成,或者通过 /etc/lvm/lvm.conf
文件自动完成。
- 厚 LV 快照
- 当原始 LV 上的数据发生变化时,写时复制(CoW)系统会在更改之前将原始数据,未更改的数据复制到快照。这样,快照的大小仅在更改发生时增长,在创建快照时存储原始卷的状态。后快照是一种 LV,其需要您预先分配一些存储空间。这个数量以后可以进行扩展或减少,但您应该考虑您要对原始 LV 进行何种类型的更改。这帮助您避免由于分配太多空间而浪费资源,或者由于分配的太少而频繁增加快照大小。
- 精简 LV 快照
精简快照是从现有精简置备的 LV 创建的一种 LV 。精简快照不需要预先分配额外的空间。最初,原始 LV 及其快照共享同样的数据块。当对原始 LV 进行更改时,它会将新数据写到不同的块,而快照继续引用原始块,并在创建快照时保留 LV 数据的时间点视图。
精简配置是一种通过按需分配磁盘空间来优化和高效管理存储的方法。这意味着您可以创建多个 LV,而无需为每个 LV 预先分配大量存储。存储在精简池中的所有 LV 中共享,使精简池更有效地使用资源。精简池按需为其 LV 分配空间。
- 在厚和精简 LV 快照之间进行选择
- 厚或精简 LV 快照之间的选择直接由您在执行的快照的 LV 的类型决定。如果您的原始 LV 是厚 LV,则您的快照将是厚的。如果您的原始 LV 是精简的,则您的快照将是精简的。
5.1.2. 管理厚逻辑卷快照 复制链接链接已复制到粘贴板!
当您创建厚 LV 快照时,务必要考虑存储要求和快照的预期寿命。您需要根据原始卷的预期变化来为其分配足够的存储。在其预期的寿命内,快照必须有足够的大小来捕获更改,但它不能超过原始 LV 的大小。如果您预期更改率较低,则 10%-15% 的快照大小可能就足够了。对于高更改率的 LV,您可能需要分配 30% 或更多的空间。
必须在完全填满快照之前扩展快照。如果快照达到其分配空间的 100%,则其变为无效。您可以使用 lvs -o lv_name,data_percent,origin
命令监控快照容量。
5.1.2.1. 创建厚逻辑卷快照 复制链接链接已复制到粘贴板!
您可以使用 lvcreate
命令创建厚 LV 快照。
先决条件
- 管理访问权限.
- 您已创建了一个物理卷。如需更多信息,请参阅 创建 LVM 物理卷。
- 您已创建了一个卷组。如需更多信息,请参阅创建 LVM 卷组。
- 您已创建了一个逻辑卷。如需更多信息,请参阅 创建逻辑卷。
流程
确定您要创建快照的 LV:
lvs -o vg_name,lv_name,lv_size
# lvs -o vg_name,lv_name,lv_size VG LV LSize VolumeGroupName LogicalVolumeName 10.00g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 快照的大小不能超过 LV 的大小。
创建厚 LV 快照:
lvcreate --snapshot --size SnapshotSize --name SnapshotName VolumeGroupName/LogicalVolumeName
# lvcreate --snapshot --size SnapshotSize --name SnapshotName VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要为快照分配的大小(如 10G)替换 SnapshotSize。使用您要给快照逻辑卷取的名称替换 SnapshotName。使用包含原始逻辑卷的卷组的名称替换 VolumeGroupName。使用您要为其创建快照的逻辑卷的名称替换 LogicalVolumeName。
验证
验证快照是否已创建:
lvs -o lv_name,origin
# lvs -o lv_name,origin LV Origin LogicalVolumeName SnapshotName LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.2.2. 手动扩展逻辑卷快照 复制链接链接已复制到粘贴板!
如果快照达到其分配空间的 100%,则其变为无效。必须在完全填满快照之前扩展快照。这可以通过使用 lvextend
命令手动完成此操作。
先决条件
- 管理访问权限.
流程
列出快照的卷组、逻辑卷、源卷、它们的使用率百分比和大小:
lvs -o vg_name,lv_name,origin,data_percent,lv_size
# lvs -o vg_name,lv_name,origin,data_percent,lv_size VG LV Origin Data% LSize VolumeGroupName LogicalVolumeName 10.00g VolumeGroupName SnapshotName LogicalVolumeName 82.00 5.00g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 扩展厚配置快照:
lvextend --size +AdditionalSize VolumeGroupName/SnapshotName
# lvextend --size +AdditionalSize VolumeGroupName/SnapshotName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用要添加到快照中的空间(如 +1G)替换 AdditionalSize。将 VolumeGroupName 替换为卷组的名称。使用快照的名称替换 SnapshotName。
验证
验证 LV 是否已扩展:
lvs -o vg_name,lv_name,origin,data_percent,lv_size
# lvs -o vg_name,lv_name,origin,data_percent,lv_size VG LV Origin Data% LSize VolumeGroupName LogicalVolumeName 10.00g VolumeGroupName SnapshotName LogicalVolumeName 68.33 6.00g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.2.3. 自动扩展厚逻辑卷快照 复制链接链接已复制到粘贴板!
如果快照达到其分配空间的 100%,则其变为无效。必须在完全填满快照之前扩展快照。这可以自动完成。
先决条件
- 管理访问权限.
流程
-
以
root
用户身份,在您选择的编辑器中打开/etc/lvm/lvm.conf
文件。 取消
snapshot_autoextend_threshold
和snapshot_autoextend_percent
行的注释,并将每个参数设置为所需的值:snapshot_autoextend_threshold = 70 snapshot_autoextend_percent = 20
snapshot_autoextend_threshold = 70 snapshot_autoextend_percent = 20
Copy to Clipboard Copied! Toggle word wrap Toggle overflow snapshot_autoextend_threshold
决定 LVM 开始自动扩展快照的百分比。例如,将参数设置为 70 表示 LVM 将在达到 70% 容量时尝试扩展快照。snapshot_autoextend_percent
指定快照在达到阈值时应扩展的百分比。例如,将参数设置为 20 表示快照将增加其当前大小的 20%。- 保存更改并退出编辑器。
重启
lvm2-monitor
:systemctl restart lvm2-monitor
# systemctl restart lvm2-monitor
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.2.4. 合并厚逻辑卷快照 复制链接链接已复制到粘贴板!
您可以将厚 LV 快照合并到创建快照的原始逻辑卷中。合并过程意味着原始 LV 恢复回创建快照时所处的状态。合并完成后,快照被删除。
如果原始 LV 和快照 LV 中的任何一个处于活动状态,则它们之间的合并会被推迟。只有在 LV 被重新激活且没有使用时,才会继续。
先决条件
- 管理访问权限.
流程
列出 LV、其卷组及其路径:
lvs -o lv_name,vg_name,lv_path
# lvs -o lv_name,vg_name,lv_path LV VG Path LogicalVolumeName VolumeGroupName /dev/VolumeGroupName/LogicalVolumeName SnapshotName VolumeGroupName /dev/VolumeGroupName/SnapshotName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查挂载 LV 的位置:
findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName findmnt -o SOURCE,TARGET /dev/VolumeGroupName/SnapshotName
# findmnt -o SOURCE,TARGET /dev/VolumeGroupName/LogicalVolumeName # findmnt -o SOURCE,TARGET /dev/VolumeGroupName/SnapshotName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /dev/VolumeGroupName/LogicalVolumeName 替换为逻辑卷的路径。将 /dev/VolumeGroupName/SnapshotName 替换为快照的路径。
卸载 LV:
umount /LogicalVolume/MountPoint umount /Snapshot/MountPoint
# umount /LogicalVolume/MountPoint # umount /Snapshot/MountPoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /LogicalVolume/MountPoint 替换为逻辑卷的挂载点。将 /Snapshot/MountPoint 替换为您的快照的挂载点。
停用 LV:
lvchange --activate n VolumeGroupName/LogicalVolumeName lvchange --activate n VolumeGroupName/SnapshotName
# lvchange --activate n VolumeGroupName/LogicalVolumeName # lvchange --activate n VolumeGroupName/SnapshotName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。使用逻辑卷的名称替换 LogicalVolumeName。将 SnapshotName 替换为您的快照的名称。
将厚 LV 快照合并到原始卷中:
lvconvert --merge SnapshotName
# lvconvert --merge SnapshotName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用快照的名称替换 SnapshotName。
激活 LV:
lvchange --activate y VolumeGroupName/LogicalVolumeName
# lvchange --activate y VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。使用逻辑卷的名称替换 LogicalVolumeName。
挂载 LV:
umount /LogicalVolume/MountPoint
# umount /LogicalVolume/MountPoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /LogicalVolume/MountPoint 替换为逻辑卷的挂载点。
验证
验证快照是否已删除:
lvs -o lv_name
# lvs -o lv_name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.3. 管理精简逻辑卷快照 复制链接链接已复制到粘贴板!
当存储效率是优先考虑因素时,精简置备是合适的。存储空间动态分配减少了初始存储成本,并最大限度地利用了可用的存储资源。在具有动态工作负载或存储随时间而增长的环境中,精简配置允许灵活性。它使存储系统能够适应变化的需求,而无需预先分配大量的存储空间。使用动态分配时,有可能会过度置备,其中所有 LV 的总大小可能会超过精简池的物理大小,假设所有空间不会被同时使用。
5.1.3.1. 创建精简逻辑卷快照 复制链接链接已复制到粘贴板!
您可以使用 lvcreate
命令创建精简 LV 快照。在创建精简 LV 快照时,避免指定快照大小。包含 size 参数会导致创建厚快照。
先决条件
- 管理访问权限.
- 您已创建了一个物理卷。如需更多信息,请参阅 创建 LVM 物理卷。
- 您已创建了一个卷组。如需更多信息,请参阅创建 LVM 卷组。
- 您已创建了一个逻辑卷。如需更多信息,请参阅 创建逻辑卷。
流程
确定您要创建快照的 LV:
lvs -o lv_name,vg_name,pool_lv,lv_size
# lvs -o lv_name,vg_name,pool_lv,lv_size LV VG Pool LSize PoolName VolumeGroupName 152.00m ThinVolumeName VolumeGroupName PoolName 100.00m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建精简 LV 快照:
lvcreate --snapshot --name SnapshotName VolumeGroupName/ThinVolumeName
# lvcreate --snapshot --name SnapshotName VolumeGroupName/ThinVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用您要给快照逻辑卷取的名称替换 SnapshotName。使用包含原始逻辑卷的卷组的名称替换 VolumeGroupName。使用您要为其创建快照的精简逻辑卷的名称替换 ThinVolumeName。
验证
验证快照是否已创建:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.1.3.2. 合并精简逻辑卷快照 复制链接链接已复制到粘贴板!
您可以将精简 LV 快照合并到创建快照的原始逻辑卷中。合并过程意味着原始 LV 恢复回创建快照时所处的状态。合并完成后,快照被删除。
先决条件
- 管理访问权限.
流程
列出 LV、其卷组及其路径:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查原始 LV 挂载的位置:
findmnt -o SOURCE,TARGET /dev/VolumeGroupName/ThinVolumeName
# findmnt -o SOURCE,TARGET /dev/VolumeGroupName/ThinVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName/ThinVolumeName 替换为逻辑卷的路径。
卸载 LV:
umount /ThinLogicalVolume/MountPoint
# umount /ThinLogicalVolume/MountPoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /ThinLogicalVolume/MountPoint 替换为逻辑卷的挂载点。将 /ThinSnapshot/MountPoint 替换为您的快照的挂载点。
停用 LV:
lvchange --activate n VolumeGroupName/ThinLogicalVolumeName
# lvchange --activate n VolumeGroupName/ThinLogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。将 ThinLogicalVolumeName 替换为逻辑卷的名称。
将精简 LV 快照合并到原始逻辑卷中:
lvconvert --mergethin VolumeGroupName/ThinSnapshotName
# lvconvert --mergethin VolumeGroupName/ThinSnapshotName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。将 ThinSnapshotName 替换为快照的名称。
挂载 LV:
umount /ThinLogicalVolume/MountPoint
# umount /ThinLogicalVolume/MountPoint
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 /ThinLogicalVolume/MountPoint 替换为逻辑卷的挂载点。
验证
验证原始 LV 是否已合并:
lvs -o lv_name
# lvs -o lv_name
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2. 缓存逻辑卷 复制链接链接已复制到粘贴板!
您可以使用 dm-cache
或 dm-writecache
目标缓存逻辑卷。
dm-cache
使用更快的存储设备(SSD)作为较慢的存储设备(HDD)的缓存。它缓存读和写数据,优化频繁使用的数据的访问时间。它在混合工作负载环境中非常有用,其中增强读写操作可带来显著的性能改进。
dm-writecache
使用更快的存储介质(SSD)来在提交到主存储设备(HDD)之前临时保存写数据,来优化写操作。对于写密集型应用程序来说很有用,其中写性能可能会减缓数据传输过程。
5.2.1. 使用 dm-cache 缓存逻辑卷 复制链接链接已复制到粘贴板!
当使用 dm-cache
缓存 LV 时,会创建一个缓存池。缓存池是一个组合了缓存数据的 LV,它存储实际缓存的内容,以及缓存元数据,跟踪缓存中存储的内容。然后,这个池与特定 LV 关联,来缓存其数据。
dm-cache
以两种块类型为目标:经常访问(热)的块被移到缓存中,而不太频繁访问(冷)的块保留在较慢的设备上。
先决条件
- 管理访问权限.
流程
显示您要缓存的 LV 及其卷组:
lvs -o lv_name,vg_name
# lvs -o lv_name,vg_name LV VG LogicalVolumeName VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建缓存池:
lvcreate --type cache-pool --name CachePoolName --size Size VolumeGroupName /FastDevicePath
# lvcreate --type cache-pool --name CachePoolName --size Size VolumeGroupName /FastDevicePath
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 CachePoolName 替换为缓存池的名称。使用缓存池的大小替换 Size。将 VolumeGroupName 替换为卷组的名称。将 /FastDevicePath 替换为快速设备(如 SSD 或 NVME)的路径。
将缓存池附加到 LV:
lvconvert --type cache --cachepool VolumeGroupName/CachePoolName VolumeGroupName/LogicalVolumeName
# lvconvert --type cache --cachepool VolumeGroupName/CachePoolName VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证 LV 现在是否被缓存了:
lvs -o lv_name,pool_lv
# lvs -o lv_name,pool_lv LV Pool LogicalVolumeName [CachePoolName_cpool]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.2. 使用 dm-writecache 缓存逻辑卷 复制链接链接已复制到粘贴板!
当使用 dm-writecache
缓存 LV 时,会在逻辑卷和物理存储设备之间创建一个缓存层。dm-writecache
的运行方式是将写操作临时存储在更快速的存储介质中(如 SSD),然后最终将它们写回到主存储设备中,从而优化写密集型工作负载。
先决条件
- 管理访问权限.
流程
显示您要缓存的逻辑卷及其卷组:
lvs -o lv_name,vg_name
# lvs -o lv_name,vg_name LV VG LogicalVolumeName VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建缓存卷:
lvcreate --name CacheVolumeName --size Size VolumeGroupName /FastDevicePath
# lvcreate --name CacheVolumeName --size Size VolumeGroupName /FastDevicePath
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 CacheVolumeName 替换为缓存卷的名称。使用缓存池的大小替换 Size。将 VolumeGroupName 替换为卷组的名称。将 /FastDevicePath 替换为快速设备(如 SSD 或 NVME)的路径。
将缓存卷附加到 LV:
lvconvert --type writecache --cachevol CacheVolumeName VolumeGroupName/LogicalVolumeName
# lvconvert --type writecache --cachevol CacheVolumeName VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 CacheVolumeName 替换为缓存卷的名称。将 VolumeGroupName 替换为卷组的名称。使用逻辑卷的名称替换 LogicalVolumeName。
验证
验证 LV 现在是否被缓存了:
lvs -o lv_name,pool_lv
# lvs -o lv_name,pool_lv LV Pool LogicalVolumeName [CacheVolumeName_cvol]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.2.3. 取消逻辑卷的缓存 复制链接链接已复制到粘贴板!
使用两种主要方法从 LV 中删除缓存。
- 分割
- 您可以从 LV 中分离缓存,但保留缓存卷本身。在这种情况下,LV 将不再受益于缓存机制,但缓存卷及其数据将保持不变。虽然缓存卷被保留了,但缓存中的数据无法被重复使用,并将在下次在缓存设置中使用时被擦除。
- 取消缓存
- 您可以从 LV 中分离缓存,并完全删除缓存卷。此操作可以有效地销毁缓存,从而释放空间。
先决条件
- 管理访问权限.
流程
显示缓存的 LV:
lvs -o lv_name,pool_lv,vg_name
# lvs -o lv_name,pool_lv,vg_name LV Pool VG LogicalVolumeName [CacheVolumeName_cvol] VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 分离或删除缓存的卷:
要分离缓存的卷,请使用:
lvconvert --splitcache VolumeGroupName/LogicalVolumeName
# lvconvert --splitcache VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要分离和删除缓存的卷,请使用:
lvconvert --uncache VolumeGroupName/LogicalVolumeName
# lvconvert --uncache VolumeGroupName/LogicalVolumeName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VolumeGroupName 替换为卷组的名称。使用逻辑卷的名称替换 LogicalVolumeName。
验证
验证 LV 是否没有被缓存:
lvs -o lv_name,pool_lv
# lvs -o lv_name,pool_lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.3. 创建自定义精简池 复制链接链接已复制到粘贴板!
您可以创建自定义精简池来更好地控制存储。
先决条件
- 管理访问权限.
流程
显示可用的卷组:
vgs -o vg_name
# vgs -o vg_name VG VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 列出可用的设备:
lsblk
# lsblk
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建 LV 来保存精简池数据:
lvcreate --name ThinPoolDataName --size Size VolumeGroupName /DevicePath
# lvcreate --name ThinPoolDataName --size Size VolumeGroupName /DevicePath
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 ThinPoolDataName 替换为您的精简池 data LV 的名称。使用 LV 的大小替换 Size。将 VolumeGroupName 替换为您的卷组的名称。
创建 LV 来保存精简池元数据:
lvcreate --name ThinPoolMetadataName --size Size VolumeGroupName /DevicePath
# lvcreate --name ThinPoolMetadataName --size Size VolumeGroupName /DevicePath
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 LV 合并到精简池中:
lvconvert --type thin-pool --poolmetadata ThinPoolMetadataName VolumeGroupName/ThinPoolDataName
# lvconvert --type thin-pool --poolmetadata ThinPoolMetadataName VolumeGroupName/ThinPoolDataName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证自定义精简池是否已创建:
lvs -o lv_name,seg_type
# lvs -o lv_name,seg_type LV Type ThinPoolDataName thin-pool
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
5.4. 创建自定义 VDO 逻辑卷 复制链接链接已复制到粘贴板!
使用逻辑卷管理器(LVM),您可以创建一个自定义 LV,该 LV 使用 Virtual Data Optimizer (VDO)池进行数据存储。
先决条件
- 管理访问权限.
流程
显示 VG:
vgs
# vgs VG #PV #LV #SN Attr VSize VFree VolumeGroupName 1 0 0 wz--n- 28.87g 28.87g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建一个要转换为 VDO 池的 LV :
lvcreate --name VDOPoolName --size Size VolumeGroupName
# lvcreate --name VDOPoolName --size Size VolumeGroupName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VDOPoolName 替换为 VDO 池的名称。使用 VDO 池的大小替换 Size。将 VolumeGroupName 替换为 VG 的名称。
将此 LV 转换为 VDO 池。在这个转换中,您要创建一个使用 VDO 池的新 VDO LV。由于
lvcreate
正在创建新的 VDO LV,因此您必须为新 VDO LV 指定参数。使用--name|-n
指定新 VDO LV 的名称,并使用--virtualsize|-V
指定新 VDO LV 的大小。lvconvert --type vdo-pool --name VDOVolumeName --virtualsize VDOVolumeSize VolumeGroupName/VDOPoolName
# lvconvert --type vdo-pool --name VDOVolumeName --virtualsize VDOVolumeSize VolumeGroupName/VDOPoolName
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 VDOVolumeName 替换为 VDO 卷的名称。将 VDOVolumeSize 替换为 VDO 卷的大小。将 VolumeGroupName/VDOPoolName 替换为 VG 和 VDO 池的名称。
验证
验证 LV 是否已转换为 VDO 池:
*# lvs -o lv_name,vg_name,seg_type* LV VG Type VDOPoolName VolumeGroupName vdo-pool VDOVolumeName VolumeGroupName vdo
*# lvs -o lv_name,vg_name,seg_type* LV VG Type VDOPoolName VolumeGroupName vdo-pool VDOVolumeName VolumeGroupName vdo
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 6 章 使用快照管理系统升级 复制链接链接已复制到粘贴板!
执行 Red Hat Enterprise Linux 系统的可回滚升级,以返回到操作系统的早期版本。您可以使用 Boom Boot Manager 和 Leapp 操作系统现代化框架。
在执行操作系统升级前,请考虑以下方面:
-
带有快照的系统升级不适用于系统树中的多个文件系统,例如一个独立的
/var
或/usr
分区。 - 带有快照的系统升级不适用于 Red Hat Update Infrastructure (RHUI)系统。考虑创建虚拟机的快照(VM),而不是使用 Boom 工具。
6.1. Boom 过程概述 复制链接链接已复制到粘贴板!
使用 Boom Boot Manager 创建引导条目,以便您可以从 GRUB 引导装载程序菜单中选择并访问这些条目。创建引导条目简化了准备可回滚升级的过程。
以下引导条目是升级和回滚过程的一部分:
升级引导条目
引导 Leapp 升级环境。使用
leapp
实用程序创建和管理此引导条目。leapp
升级过程会自动删除这个条目。Red Hat Enterprise Linux 9 引导条目
引导升级系统环境。使用
leapp
实用程序在成功升级后创建此引导条目。快照引导条目
引导原始系统的快照。在成功或不成功升级尝试后,使用它来检查并测试以前的操作系统状态。在升级操作系统前,请使用
boom
命令创建此引导条目。回滚引导条目
引导原始系统环境,并将任何升级回滚到以前的系统状态。在启动升级过程的回滚时,请使用
boom
命令创建此引导条目。
6.2. 使用 Boom Boot Manager 升级至另一个版本 复制链接链接已复制到粘贴板!
使用 Boom Boot Manager 执行 Red Hat Enterprise Linux 操作系统的升级。
先决条件
- 您正在运行 Red Hat Enterprise Linux 8.8 或 8.10。
-
您已安装了
boom-boot
软件包的当前版本(版本 boom-boot-1.3-2.el8 或更高版本)。 - 您有足够的空间用于快照。根据原始安装的大小进行大小估计。列出所有挂载的逻辑卷。
-
您已安装了
leapp
软件包。 - 您已启用了软件存储库。
其他文件系统可能包括 /usr 或 /var。
流程
创建您的 root 逻辑卷快照:
如果您的 root 文件系统使用精简配置,请创建一个精简快照:
lvcreate -s rhel/root -kn -n root_snapshot_before_changes
# lvcreate -s rhel/root -kn -n root_snapshot_before_changes Logical volume "root_snapshot_before_changes" created.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这里:
-
-s
创建快照。 -
rhel/root
将文件系统复制到逻辑卷。 -
-kn
在引导时自动激活 LV。 -n root_snapshot_before_changes
显示快照的名称。在创建精简快照时,不要定义快照大小。快照从精简池中分配。
-
如果您的 root 文件系统使用 thick 置备,请创建一个 thick 快照:
lvcreate -s rhel/root -n root_snapshot_before_changes -L 25g
# lvcreate -s rhel/root -n root_snapshot_before_changes -L 25g Rounding up size to full physical extent 25 GiB Logical volume "root_snapshot_before_changes" created.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个命令中:
-
-s
创建快照。 -
rhel/root
将文件系统复制到逻辑卷。 -
-n root_snapshot_before_changes
显示快照的名称。 -L 25g
是快照大小。根据原始安装的大小进行大小估计。在创建厚快照时,定义可保存升级过程中所有更改的快照大小。
重要创建的快照不包括任何其他系统更改。
-
创建配置集:
创建配置文件需要特定于架构的临时解决方案,以避免
kexec-tools
或kdumpctl
和boom
间的交互。在升级过程中,更新的kexec-tools
软件包尝试使用更新的crashkernel
设置修改所有引导条目。这会删除条目使用的引导镜像。您可以通过将 RHEL 9crashkernel
设置附加到 RHEL 8 配置文件选项中来避免这个问题。在 Intel 64 或 AMD64 (x86_64)或 IBM Z (s390x)构架上:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 64 位 ARM (AArch64)构架上:
boom profile create --from-host --os-options "root=%{root_device} ro %{root_opts} rhgb quiet crashkernel=1G-4G:256M,4G-64G:320M,64G-:576M"
# boom profile create --from-host --os-options "root=%{root_device} ro %{root_opts} rhgb quiet crashkernel=1G-4G:256M,4G-64G:320M,64G-:576M"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 IBM POWER little-endian (ppc64le)构架上:
boom profile create --from-host --os-options "root=%{root_device} ro %{root_opts} rhgb quiet crashkernel=2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G" --optional-keys "grub_users grub_arg grub_class id"
# boom profile create --from-host --os-options "root=%{root_device} ro %{root_opts} rhgb quiet crashkernel=2G-4G:384M,4G-16G:512M,16G-64G:1G,64G-128G:2G,128G-:4G" --optional-keys "grub_users grub_arg grub_class id"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ppc64le 上需要
-optional-keys
参数,以确保grub2-mkconfig
命令在第 10.2.3 步中生成正确的引导条目。如需更多信息,请参阅 RHEL-36180。
使用原始引导镜像的备份副本创建原始系统的快照引导条目:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这里:
-
--title "Root LV snapshot before changes"
是引导条目的名称,它在系统启动期间在引导条目列表中显示。 --rootlv
是与新引导条目对应的根逻辑卷。完成上一步后,您有一个引导条目,允许在升级前访问原始系统。
忽略 "WARNING - Boom grub2 integration is disabled in '/boot/../etc/default/boom'"。详情请查看 RHEL-35983。
在 ppc64le 架构的系统上,更新引导条目:
grub2-mkconfig -o /boot/grub2/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Generating boot entries from BLS files... done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
使用 Leapp 升级到 Red Hat Enterprise Linux 9:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查并解决
leapp upgrade
命令报告所指示的任何阻碍。有关报告的详细说明,请参阅 检查预升级报告。重启到升级引导条目:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 GRUB 引导屏幕中选择 Red Hat Enterprise Linux Upgrade Initramfs 条目。
注意Red Hat Enterprise Linux 9 不提供 GRUB 引导屏幕中的 Snapshots 子菜单。
验证
- 完成升级后,系统会自动重启。GRUB 屏幕显示升级的(Red Hat Enterprise Linux 9)和之前可用的操作系统版本。升级的系统版本是默认选择。
6.3. 在 Red Hat Enterprise Linux 版本间切换 复制链接链接已复制到粘贴板!
同时访问您机器上当前和以前的 Red Hat Enterprise Linux 版本。使用 Boom Boot Manager 访问不同的操作系统版本会降低与升级操作系统相关的风险,并有助于减少硬件停机时间。有了这种在环境之间切换的能力,您可以:
- 以并排的方式快速比较这两个环境。
- 在评估升级结果时在环境之间切换。
- 恢复文件系统的较早内容。
- 在升级的主机运行期间,继续访问旧系统。
- 随时停止并恢复更新过程,即使更新本身正在运行。
流程
重启系统:
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 从 GRUB 引导装载程序屏幕中选择所需的引导条目。
验证
验证所选引导卷是否已显示:
cat /proc/cmdline BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-513.24.1.el8_9.x86_64.boom0 root=/dev/rhel/root_snapshot_before_changes ro rd.lvm.lv=rhel/root_snapshot_before_changes rhgb quiet crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M
# cat /proc/cmdline BOOT_IMAGE=(hd0,msdos1)/vmlinuz-4.18.0-513.24.1.el8_9.x86_64.boom0 root=/dev/rhel/root_snapshot_before_changes ro rd.lvm.lv=rhel/root_snapshot_before_changes rhgb quiet crashkernel=1G-4G:192M,4G-64G:256M,64G-:512M
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
6.4. 成功升级后删除逻辑卷快照 复制链接链接已复制到粘贴板!
如果您使用 Boom Boot Manager 成功升级了您的系统,您可以删除快照引导条目和逻辑卷(LV)快照,以使用升级的系统。
删除后,您无法使用 LV 快照执行任何进一步的操作。
先决条件
- 您最近已 使用 Boom Boot Manager 将 Red Hat Enterprise Linux 升级到更新的版本。
流程
- 从 GRUB 引导装载程序屏幕引导到 Red Hat Enterprise Linux 9。
系统加载后,查看可用的引导条目。以下输出显示 boom 引导条目列表中的快照引导条目:
boom list
# boom list BootID Version Name RootDevice 1e1a9b4 4.18.0-513.5.1.el8_9.x86_64 Red Hat Enterprise Linux /dev/mapper/rhel-root 4ea37b9 4.18.0-513.24.1.el8_9.x86_64 Red Hat Enterprise Linux /dev/mapper/rhel-root c919f89 4.18.0-513.24.1.el8_9.x86_64 Red Hat Enterprise Linux /dev/rhel/root_snapshot_before_changes
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
BootID
值删除快照条目:boom delete --boot-id c919f89
# boom delete --boot-id c919f89 Deleted 1 entry
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这会从 GRUB 菜单中删除引导条目。
删除 LV 快照:
lvremove rhel/root_snapshot_before_changes
# lvremove rhel/root_snapshot_before_changes Do you really want to remove active logical volume rhel/root_snapshot_before_changes? [y/n]: y Logical volume "root_snapshot_before_changes" successfully removed
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 完成剩余的升级后任务。详情请参阅 从 RHEL 8 升级到 RHEL 9。
6.5. 在升级后创建回滚引导条目 复制链接链接已复制到粘贴板!
要在未成功升级后将操作系统升级恢复回系统以前的状态,请使用回滚引导条目。如果您发现升级环境有问题,例如与内部软件不兼容,这也很有用。
要准备回滚引导条目,请使用快照环境。
先决条件
- 您有一个快照。有关创建快照的说明,请参阅 使用 Boom 引导管理器升级到另一个版本。
流程
将快照与原始卷合并:
lvconvert --merge rhel/root_snapshot_before_changes
# lvconvert --merge rhel/root_snapshot_before_changes Logical volume rhel/root_snapshot_before_changes contains a filesystem in use. Delaying merge since snapshot is open. Merging of thin snapshot rhel/root_snapshot_before_changes will occur on next activation of rhel/root.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告合并快照后,您必须继续此流程中所有剩余步骤,以防止数据丢失。
为合并的快照创建一个回滚引导条目:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 忽略所有警告消息,请参阅 RHEL-35983。
重启机器以恢复操作系统状态:
reboot
# reboot
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 系统重启后,从 GRUB 屏幕中选择 RHEL Rollback 引导条目。
当
root
逻辑卷处于活动状态时,系统会自动启动快照合并操作。重要当合并操作启动时,快照卷不再可用。在成功引导 RHEL Rollback 引导条目后,Root LV 快照引导条目 不再工作。合并快照逻辑卷会破坏 Root LV 快照,并恢复原始卷之前的状态。
完成合并操作后,删除未使用的条目,并恢复原始引导条目:
从
/boot
文件系统中删除未使用的 Red Hat Enterprise Linux 9 引导条目,并重建grub.cfg
文件以使更改生效:rm -f /boot/loader/entries/*.el9*
# rm -f /boot/loader/entries/*.el9*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow rm -f /boot/*.el9*
# rm -f /boot/*.el9*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow grub2-mkconfig -o /boot/grub2/grub.cfg
# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... done
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
成功回滚回系统后,删除
boom
快照,并回滚引导条目:Copy to Clipboard Copied! Toggle word wrap Toggle overflow boom delete c919f89
# boom delete c919f89 WARNING - Options for BootEntry(boot_id=1e1a9b4) do not match OsProfile: marking read-only WARNING - Options for BootEntry(boot_id=1ccc554) do not match OsProfile: marking read-only WARNING - Options for BootEntry(boot_id=4ea37b9) do not match OsProfile: marking read-only Deleted 1 entry
Copy to Clipboard Copied! Toggle word wrap Toggle overflow boom delete 6c44638
# boom delete 6c44638 WARNING - Options for BootEntry(boot_id=1e1a9b4) do not match OsProfile: marking read-only WARNING - Options for BootEntry(boot_id=1ccc554) do not match OsProfile: marking read-only WARNING - Options for BootEntry(boot_id=4ea37b9) do not match OsProfile: marking read-only Deleted 1 entry
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 忽略警告。详情请查看 RHEL-35983。
第 7 章 自定义 LVM 报告 复制链接链接已复制到粘贴板!
LVM 提供了广泛的配置和命令行选项来生成自定义报告。您可以对输出进行排序,指定单元、使用选择条件,并更新 lvm.conf
文件以自定义 LVM 报告。
7.1. 控制 LVM 显示的格式 复制链接链接已复制到粘贴板!
当您使用没有额外选项的 pvs
、lvs
或 vgs
命令时,您会看到以默认排序顺序显示的默认字段集合。pvs
命令的默认字段包括以下按物理卷名称排序的信息:
pvs
# pvs
PV VG Fmt Attr PSize PFree
/dev/vdb1 VolumeGroupName lvm2 a-- 17.14G 17.14G
/dev/vdb2 VolumeGroupName lvm2 a-- 17.14G 17.09G
/dev/vdb3 VolumeGroupName lvm2 a-- 17.14G 17.14G
PV
- 物理卷名称。
VG
- 卷组名称。
Fmt
-
物理卷的元数据格式:
lvm2
或lvm1
。 Attr
- 物理卷的状态:(a)- 可分配的或(x)- 已导出的。
PSize
- 物理卷的大小。
PFree
- 物理卷上剩余的可用空间。
显示自定义字段
要显示与默认字段不同的字段,请使用 -o
选项。下面的例子只显示物理卷的名称、大小和可用空间:
pvs -o pv_name,pv_size,pv_free
# pvs -o pv_name,pv_size,pv_free
PV PSize PFree
/dev/vdb1 17.14G 17.14G
/dev/vdb2 17.14G 17.09G
/dev/vdb3 17.14G 17.14G
对 LVM 的显示进行排序
要根据特定条件对结果进行排序,请使用 -O
选项。以下示例按其物理卷的空闲以升序排序条目:
pvs -o pv_name,pv_size,pv_free -O pv_free
# pvs -o pv_name,pv_size,pv_free -O pv_free
PV PSize PFree
/dev/vdb2 17.14G 17.09G
/dev/vdb1 17.14G 17.14G
/dev/vdb3 17.14G 17.14G
要按降序排列结果,请使用 -O
选项和 -
字符:
pvs -o pv_name,pv_size,pv_free -O -pv_free
# pvs -o pv_name,pv_size,pv_free -O -pv_free
PV PSize PFree
/dev/vdb1 17.14G 17.14G
/dev/vdb3 17.14G 17.14G
/dev/vdb2 17.14G 17.09G
7.2. 为 LVM 显示指定单位 复制链接链接已复制到粘贴板!
您可以通过指定 LVM 显示命令的 --units
参数,以 2 或 10 为基数查看 LVM 设备的大小。请查看下表以了解所有参数:
单元类型 | 描述 | 可用选项 | default |
---|---|---|---|
基数 2 单位 | 单位以 2 的幂(1024 的倍数)显示。 |
|
|
基数 10 单位 | 以 1000 的倍数显示的单位。 |
| N/A |
自定义单位 |
数量与 2 或 10 基数单位的组合。例如,若要以 4MB 为单位显示结果,可使用 | N/A | N/A |
如果您没有指定单位的值,则默认使用人类可读的格式(
r
)。以下vgs
命令以人类可读的格式显示 VG 的大小。使用最合适的单位,并且舍入指示符<
显示实际大小是一个大概值,其小于 931 gibibytes。vgs myvg
# vgs myvg VG #PV #LV #SN Attr VSize VFree myvg 1 1 0 wz-n <931.00g <930.00g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
pvs
命令以基数 2 gibibyte 单位显示/dev/vdb
物理卷的输出:pvs --units g /dev/vdb
# pvs --units g /dev/vdb PV VG Fmt Attr PSize PFree /dev/vdb myvg lvm2 a-- 931.00g 930.00g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
pvs
命令以基数 10GB 单位显示/dev/vdb
物理卷的输出:pvs --units G /dev/vdb
# pvs --units G /dev/vdb PV VG Fmt Attr PSize PFree /dev/vdb myvg lvm2 a-- 999.65G 998.58G
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
pvs
命令以 512 字节扇区显示输出:pvs --units s
# pvs --units s PV VG Fmt Attr PSize PFree /dev/vdb myvg lvm2 a-- 1952440320S 1950343168S
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以为 LVM 显示命令指定自定义单位。下面的例子以 4MB 为单位显示
pvs
命令的输出:pvs --units 4m
# pvs --units 4m PV VG Fmt Attr PSize PFree /dev/vdb myvg lvm2 a-- 238335.00U 238079.00U
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.3. 自定义 LVM 配置文件 复制链接链接已复制到粘贴板!
您可以通过编辑 lvm.conf
文件,根据具体的存储和系统要求自定义 LVM 配置。例如,您可以编辑 lvm.conf
文件来修改过滤设置、配置卷组自动激活、管理精简池或自动扩展快照。
流程
-
在您选择的编辑器中打开
lvm.conf
文件。 通过取消要修改默认显示值的设置的注释并进行修改来自定义
lvm.conf
文件。要自定义您在
lvs
输出中看到的字段,请取消lvs_cols
参数的注释并进行修改:lvs_cols="lv_name,vg_name,lv_attr"
lvs_cols="lv_name,vg_name,lv_attr"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要隐藏
pvs
、vgs
和lvs
命令的空字段,请取消compact_output=1
设置的注释:compact_output = 1
compact_output = 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将 gigabytes 设置为
pvs
、vgs
和lvs
命令的默认单位,请将units = "r"
设置替换为units = "G"
:units = "G"
units = "G"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
确保已取消了
lvm.conf
文件的相应部分的注释。例如,要修改lvs_cols
参数,必须取消report
部分的注释:report { ... }
report { ... }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
修改
lvm.conf
文件后查看更改的值:lvmconfig --typeconfig diff
# lvmconfig --typeconfig diff
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
7.4. 定义 LVM 选择标准 复制链接链接已复制到粘贴板!
选择条件是 <field> <operator> <value>
形式的一组语句,其使用比较运算符来定义具体字段的值。然后,处理或显示与选择条件匹配的对象。对象可以是物理卷(PV)、卷组(VG)或逻辑卷(LV)。通过逻辑和分组运算符对语句进行合并。
要定义选择标准,请使用 -S
或 --select
选项,后跟一个或多个语句。
-S
选项的工作原理是描述要处理的对象,而不是命名每个对象。这在处理许多对象时很有用,很难单独查找和命名每个对象,或者当搜索有复杂特征集的对象时。也可以使用 -S
选项作为一种快捷方式,来避免输入许多名称。
要查看字段和可能的运算符的完整集合,请使用 lvs -S help
命令。使用任何报告或处理命令替换 lvs
来查看该命令的详情:
-
报告命令包括
pvs
,vgs
,lvs
,pvdisplay
,vgdisplay
,lvdisplay
和dmsetup info -c
。 -
处理命令包括
pvchange
,vgchange
,lvchange
,vgimport
,vgexport
,vgremove
和lvremove
。
使用 pvs
命令的选择条件的示例
以下
pvs
命令示例只显示名称包含字符串nvme
的物理卷:pvs -S name=~nvme
# pvs -S name=~nvme PV Fmt Attr PSize PFree /dev/nvme2n1 lvm2 --- 1.00g 1.00g
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
pvs
命令示例只显示myvg
卷组中的物理设备:pvs -S vg_name=myvg
# pvs -S vg_name=myvg PV VG Fmt Attr PSize PFree /dev/vdb1 myvg lvm2 a-- 1020.00m 396.00m /dev/vdb2 myvg lvm2 a-- 1020.00m 896.00m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用 lvs
命令的选择条件的示例
以下
lvs
命令示例只显示大小大于 100m 但小于 200m 的逻辑卷:lvs -S 'size > 100m && size < 200m'
# lvs -S 'size > 100m && size < 200m' LV VG Attr LSize Cpy%Sync rr myvg rwi-a-r--- 120.00m 100.00
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
lvs
命令示例只显示名称包含lvol
和 0 到 2 之间任何数字的逻辑卷:lvs -S name=~lvol[02]
# lvs -S name=~lvol[02] LV VG Attr LSize lvol0 myvg -wi-a----- 100.00m lvol2 myvg -wi------- 100.00m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
lvs
命令示例只显示具有raid1
段类型的逻辑卷:lvs -S segtype=raid1
# lvs -S segtype=raid1 LV VG Attr LSize Cpy%Sync rr myvg rwi-a-r--- 120.00m 100.00
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
高级示例
您可以将选择条件与其他选项合并。
以下
lvchange
命令示例只将特定的标签mytag
添加给活跃的逻辑卷:lvchange --addtag mytag -S active=1
# lvchange --addtag mytag -S active=1 Logical volume myvg/mylv changed. Logical volume myvg/lvol0 changed. Logical volume myvg/lvol1 changed. Logical volume myvg/rr changed.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
lvs
命令示例显示所有名称与_pmspare
不匹配的逻辑卷,并将默认标头改为自定义卷:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下面的
lvchange
命令示例使用role=thinsnapshot
和origin=thin1
标记正常激活命令过程要跳过的逻辑卷:lvchange --setactivationskip n -S 'role=thinsnapshot && origin=thin1'
# lvchange --setactivationskip n -S 'role=thinsnapshot && origin=thin1' Logical volume myvg/thin1s changed.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下
lvs
命令示例只显示与所有三个条件都匹配的逻辑卷:-
名称包含
_tmeta
。 -
角色是
metadata
。 - 大小小于或等于 4m。
lvs -a -S 'name=~_tmeta && role=metadata && size <= 4m'
# lvs -a -S 'name=~_tmeta && role=metadata && size <= 4m' LV VG Attr LSize [tp_tmeta] myvg ewi-ao---- 4.00m
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
名称包含
其他资源
-
您系统上的
lvmreport (7)
手册页
第 9 章 配置 RAID 逻辑卷 复制链接链接已复制到粘贴板!
您可以使用逻辑卷管理器(LVM)创建和管理独立磁盘的冗余阵列(RAID)卷。LVM 支持 RAID 0、1、4、5、6 和 10。LVM RAID 卷有以下特征:
- LVM 会创建和管理利用多设备 (MD) 内核驱动程序的 RAID 逻辑卷。
- 您可以从阵列中临时分割 RAID1 镜像,并在之后将其合并到阵列中。
- LVM RAID 卷支持快照。
- RAID 逻辑卷不是集群感知的。您可以只在一台机器中创建和激活 RAID 逻辑卷,但不能在多台机器中同时激活它们。
-
当您创建 RAID 逻辑卷(LV)时,LVM 会创建一个元数据子卷,它是阵列中的每个数据或奇偶校验子卷的大小的一个区块。例如,创建一个双向 RAID1 阵列会导致两个元数据子卷(
lv_rmeta_0
和lv_rmeta_1
)以及两个数据子卷(lv_rimage_0
和lv_rimage_1
)。 - 在 RAID LV 中添加完整性可减少或防止软损坏。
9.1. RAID 级别和线性支持 复制链接链接已复制到粘贴板!
以下是 RAID 支持的配置,包括级别 0、1、4、5、6、10 和线性:
- 0 级
RAID 级别 0,通常称为条带化的数据映射技术。这意味着,要写入阵列的数据被分成条块,并在阵列的成员磁盘中写入,这样可以在成本低的情况下提供高的 I/O 性能,但不提供冗余。
RAID 级别 0 的实现只在成员设备间条状分布到阵列中最小设备的大小。就是说,如果您有多个设备,它们的大小稍有不同,那么每个设备的大小都被视为与最小设备的大小相同。因此,级别 0 阵列的常见存储容量是所有磁盘的总容量。如果成员磁盘具有不同的大小,RAID0 将使用可用区使用这些磁盘的所有空间。
- 1 级
RAID 级别 1 或称为镜像(mirroring),通过将相同数据写入阵列的每个磁盘来提供冗余,在每个磁盘上保留"镜像"副本。因为其简单且数据高度可用,RAID 1 仍然被广泛使用。级别 1 需要两个或者多个磁盘,它提供了很好的数据可靠性,提高了需要读取的应用程序的性能,但是成本相对高。
为了实现数据可靠性,需要向阵列中的所有磁盘写入相同的信息,所以 RAID 1 的成本会很高。与基于奇偶校验的其他级别(如级别 5)相比,空间的利用效率较低。然而,对空间利用率的牺牲提供了高性能:基于奇偶校验的 RAID 级别会消耗大量 CPU 资源以便获得奇偶校验,而 RAID 级别 1 只是一次向多个 RAID 成员中写入同样数据,其对 CPU 的消耗较小。因此,在使用软件 RAID 的系统中,或系统中有其他操作需要大量使用 CPU 资源时,RAID 1 可能会比使用基于奇偶校验的 RAID 级别的性能更好。
级别 1 阵列的存储容量等于硬件 RAID 中最小镜像硬盘或者软件 RAID 中最小镜像分区的容量相同。级别 1 所提供的冗余性是所有 RAID 级别中最高的,因为阵列只需要在有一个成员可以正常工作的情况下就可以提供数据。
- 级别 4
级别 4 使用单一磁盘驱动器中的奇偶校验来保护数据。奇偶校验信息根据阵列中其余成员磁盘的内容计算。然后当阵列中的一个磁盘失败时,这个信息就可以被用来重建数据。然后,在出现问题的磁盘被替换前,使用被重建的数据就可以满足 I/O 的请求。在磁盘被替换后,可以在上面重新生成数据。
因为专用奇偶校验磁盘代表所有写交易到 RAID 阵列的固有瓶颈,因此在没有写回缓存等技术的情况下,级别 4 很少被使用。或者在特定情况下,系统管理员有意设计具有这个瓶颈的软件 RAID 设备,比如当阵列使用数据填充后没有写入事务的数组。因此,Anaconda 中并没有提供 RAID 4 这个选项。但是,如果需要,用户可以手动创建它。
硬件 RAID 4 的存储容量等于分区数量减一乘以最小成员分区的容量。RAID 4 阵列的性能是非对称的,即读的性能会好于写的性能。这是因为,写操作会在生成奇偶校验时消耗额外的 CPU 和主内存带宽,然后在将实际数据写入磁盘时也会消耗额外的总线带宽,因为您不仅写数据,而且还写奇偶校验。读操作只需要读取数据而不是奇偶校验,除非该阵列处于降级状态。因此,在正常操作条件下,对于相同数量的数据传输,读操作会对驱动器和计算机总线产生较少的流量。
- 5 级
这是最常见的 RAID 类型。通过在一个阵列的所有成员磁盘中分布奇偶校验,RAID 5 解除了级别 4 中原有的写入瓶颈。唯一性能瓶颈是奇偶校验计算过程本身。现代 CPU 可以非常快速地计算奇偶校验。但是,如果您在 RAID 5 阵列中有大量磁盘,以便在所有设备间合并数据传输速度非常高,则奇偶校验计算可能会成为瓶颈。
5 级具有非对称性能,读性能显著提高。RAID 5 的存储容量的计算方法与级别 4 的计算方法是一样的。
- 级别 6
如果数据的冗余性和保护性比性能更重要,且无法接受 RAID 1 的空间利用率低的问题,则通常会选择使用级别 6。级别 6 使用一个复杂的奇偶校验方式,可以在阵列中出现任意两个磁盘失败的情况下进行恢复。因为使用的奇偶校验方式比较复杂,软件 RAID 设备会对 CPU 造成较大负担,同时对写操作造成更大的负担。因此,与级别 4 和 5 相比,级别 6 的性能不对称性更严重。
RAID 6 阵列的总容量与 RAID 5 和 4 类似,但您必须从额外奇偶校验存储空间的设备数中减去 2 个设备(而不是 1 个)。
- 级别 10
这个 RAID 级别将级别 0 的性能优势与级别 1 的冗余合并。它还可减少在具有多于两个设备的 1 级阵列中发现的一些空间。对于 10 级,可以创建一个 3 个驱动器阵列,来仅存储每块数据的 2 个副本,然后允许整个阵列的大小为最小设备的 1.5 倍,而不是只等于最小设备(这与 3 设备1 级阵列类似)。与 RAID 级别 6 相比,计算奇偶校验对 CPU 的消耗较少,但空间效率较低。
在安装过程中,不支持创建 RAID 10。您可在安装后手动创建。
- 线性 RAID
线性 RAID 是创建更大的虚拟驱动器的一组驱动器。
在线性 RAID 中,块会被从一个成员驱动器中按顺序分配,只有在第一个完全填充时才会进入下一个驱动器。这个分组方法不会提供性能优势,因为 I/O 操作不太可能在不同成员间同时进行。线性 RAID 也不提供冗余性,并会降低可靠性。如果有任何一个成员驱动器失败,则无法使用整个阵列,数据可能会丢失。该容量是所有成员磁盘的总量。
9.2. LVM RAID 片段类型 复制链接链接已复制到粘贴板!
要创建 RAID 逻辑卷,您可以使用 lvcreate
命令的 --type
参数指定 RAID 类型。对于大多数用户,指定五个可用主类型之一 raid1
、raid4
、raid5
、raid6
和 raid10
应足够。
下表描述了可能的 RAID 片段类型。
片段类型 | 描述 |
---|---|
|
RAID1 镜像。当您指定 |
| RAID4 专用奇偶校验磁盘。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 条带。RAID0 以条带大小的单位在多个数据子卷间分布逻辑卷数据。这可以提高性能。如果任何数据子卷失败,逻辑卷数据将会丢失。 |
9.3. 创建 RAID0 的参数 复制链接链接已复制到粘贴板!
您可以使用 lvcreate --type raid0[meta] --stripes _Stripes --stripesize StripeSize VolumeGroup [PhysicalVolumePath]
命令创建 RAID0 条状逻辑卷。
下表描述了不同的参数,您可以在创建 RAID0 条状逻辑卷时使用它们。
参数 | 描述 |
---|---|
|
指定 |
| 指定在其中分割逻辑卷的设备数。 |
| 以 KB 为单位指定每个条的大小。这是在移动到下一个设备前写入一个设备的数据量。 |
| 指定要使用的卷组。 |
| 指定要使用的设备。如果没有指定,LVM 将选择 Stripes 选项指定的设备数,每个条带一个。 |
9.4. 创建 RAID 逻辑卷 复制链接链接已复制到粘贴板!
您可以根据您为 -m
参数指定的值,来创建具有不同副本数的 RAID1 阵列。同样,您可以使用 -i
参数为 RAID 0、4、5、6 和 10 逻辑卷指定条带数。您还可以使用 -I
参数指定条带大小。下面的步骤描述了创建不同类型的 RAID 逻辑卷的不同方法。
流程
创建一个双向 RAID。以下命令在卷组 my_vg 中创建一个名为 my_lv 的双向 RAID1 阵列,大小为 1G :
lvcreate --type raid1 -m 1 -L 1G -n my_lv my_vg
# lvcreate --type raid1 -m 1 -L 1G -n my_lv my_vg Logical volume "my_lv" created.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用条带创建 RAID5 阵列。以下命令在卷组 my_vg 中创建具有三个条带的 RAID5 阵列和一个隐式奇偶校验驱动器,名为 my_lv,大小为 1G。请注意,您可以指定与 LVM 条带卷类似的条带数。自动添加正确奇偶校验驱动器数。
lvcreate --type raid5 -i 3 -L 1G -n my_lv my_vg
# lvcreate --type raid5 -i 3 -L 1G -n my_lv my_vg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用条带创建 RAID6 阵列。以下命令在卷组 my_vg 中创建具有三个 3 个条带的 RAID6 阵列,以及名为 my_lv 的两个隐式奇偶校验驱动器,大小为 1G :
lvcreate --type raid6 -i 3 -L 1G -n my_lv my_vg
# lvcreate --type raid6 -i 3 -L 1G -n my_lv my_vg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
显示 LVM 设备 my_vg/my_lv,它是一个双向 RAID1 阵列:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.5. 使用 storage RHEL 系统角色配置带有 RAID 的 LVM 池 复制链接链接已复制到粘贴板!
使用 storage
系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上配置带有 RAID 的 LVM 池。您可以使用可用参数建立一个 Ansible playbook,来配置带有 RAID 的 LVM 池。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证您的池是否在 RAID 上:
ansible managed-node-01.example.com -m command -a 'lsblk'
# ansible managed-node-01.example.com -m command -a 'lsblk'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.6. 创建 RAID0 条带化逻辑卷 复制链接链接已复制到粘贴板!
RAID0 逻辑卷以条的大小为单位,将逻辑卷数据分散到多个数据子卷中。下面的步骤创建了一个名为 mylv 的 LVM RAID0 逻辑卷,该逻辑卷在磁盘间条状分布数据。
先决条件
- 您已创建了三个或者多个物理卷。有关创建物理卷的更多信息,请参阅 创建 LVM 物理卷。
- 您已创建了卷组。如需更多信息,请参阅创建 LVM 卷组。
流程
从现有卷组中创建 RAID0 逻辑卷。以下命令从卷组 myvg 中创建 RAID0 卷 mylv,大小为 2G,有三个条带,条带大小为 4kB :
lvcreate --type raid0 -L 2G --stripes 3 --stripesize 4 -n mylv my_vg
# lvcreate --type raid0 -L 2G --stripes 3 --stripesize 4 -n mylv my_vg Rounding size 2.00 GiB (512 extents) up to stripe boundary size 2.00 GiB(513 extents). Logical volume "mylv" created.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 RAID0 逻辑卷中创建文件系统。以下命令在逻辑卷中创建 ext4 文件系统:
mkfs.ext4 /dev/my_vg/mylv
# mkfs.ext4 /dev/my_vg/mylv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 挂载逻辑卷并报告文件系统磁盘空间使用情况:
mount /dev/my_vg/mylv /mnt df
# mount /dev/my_vg/mylv /mnt # df Filesystem 1K-blocks Used Available Use% Mounted on /dev/mapper/my_vg-mylv 2002684 6168 1875072 1% /mnt
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看创建的 RAID0 剥离的逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.7. 使用 storage RHEL 系统角色为 RAID LVM 卷配置条带大小 复制链接链接已复制到粘贴板!
使用 storage
系统角色,您可以使用 Red Hat Ansible Automation Platform 在 RHEL 上为 RAID LVM 卷配置条带大小。您可以使用可用参数建立一个 Ansible playbook,来配置带有 RAID 的 LVM 池。
先决条件
- 您已准备好控制节点和受管节点
- 以可在受管主机上运行 playbook 的用户登录到控制节点。
-
用于连接到受管节点的帐户具有
sudo
权限。
流程
创建一个包含以下内容的 playbook 文件,如
~/playbook.yml
:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有关 playbook 中使用的所有变量的详情,请查看控制节点上的
/usr/share/ansible/roles/rhel-system-roles.storage/README.md
文件。验证 playbook 语法:
ansible-playbook --syntax-check ~/playbook.yml
$ ansible-playbook --syntax-check ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请注意,这个命令只验证语法,不会防止错误但有效的配置。
运行 playbook:
ansible-playbook ~/playbook.yml
$ ansible-playbook ~/playbook.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证条带大小是否被设置为所需的大小:
ansible managed-node-01.example.com -m command -a 'lvs -o+stripesize /dev/my_pool/my_volume'
# ansible managed-node-01.example.com -m command -a 'lvs -o+stripesize /dev/my_pool/my_volume'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.8. 软数据崩溃 复制链接链接已复制到粘贴板!
数据存储中的软崩溃意味着,从存储设备中检索的数据与写入到那个设备中的数据不同。错误的数据可以在存储设备中无限期存在。在检索并尝试使用此数据之前,您可能不会发现此损坏数据。
根据配置类型,一个独立磁盘的冗余阵列 (RAID) 逻辑卷 (LV) 可防止设备失败时数据丢失。如果由 RAID 阵列组成的设备失败,可以从 RAID LV 一部分的其他设备中恢复数据。但是 RAID 配置不能保证数据本身的完整性。软崩溃、静默崩溃、软错误和静默错误用来描述,即使系统和软件仍继续按预期工作,但数据已损坏的情况的术语。
当创建一个具有 DM 完整性或在现有 RAID LV 中添加完整性的 RAID LV 时,请考虑以下点:
- 完整性元数据需要额外的存储空间。对于每个 RAID 镜像,每个 500MB 数据都需要 4MB 的额外存储空间,因为校验和被添加到数据中。
- 添加 DM 完整性会因为访问数时延迟而影响到性能,有些 RAID 的配置会比其他 RAID 配置受到的影响更大。RAID1 配置通常比 RAID5 或其变体提供更好的性能。
- RAID 完整性块的大小也会影响性能。配置更大的 RAID 完整块可提供更好的性能。但是,一个较小的 RAID 完整性块可以提供更好的兼容性。
-
完整性有两种模式:
位图(bitmap)
或日志(journal)
。bitmap
完整性模式通常比journal
模式提供更好的性能。
如果您遇到性能问题,请使用带有完整性的 RAID1,或者测试特定 RAID 配置的性能以确保它满足您的要求。
9.9. 创建带有 DM 完整性的 RAID 逻辑卷 复制链接链接已复制到粘贴板!
当您创建一个具有设备映射器(DM)完整性的 RAID LV 或者在现有 RAID 逻辑卷(LV)中添加完整性时,它会降低因为软损坏而丢失数据的风险。在使用 LV 前,等待完整性同步和 RAID 元数据完成。否则,在后台进行的初始化可能会影响 LV 的性能。
设备映射程序(DM)完整性与 RAID 级别 1、4、5、6 和 10 一起使用,用于缓解或防止软崩溃导致数据丢失。RAID 层可确保数据没有破坏的副本可以修复软崩溃错误。
流程
创建具有 DM 完整性的 RAID LV。以下示例在 my_vg 卷组中创建一个名为 test-lv 的 RAID LV,可用大小为 256M 和 RAID 级别 1:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意要在现有 RAID LV 中添加 DM 完整性,请使用以下命令:
lvconvert --raidintegrity y my_vg/test-lv
# lvconvert --raidintegrity y my_vg/test-lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 RAID LV 中添加完整性限制了您可以在那个 RAID LV 上执行的一些操作。
可选:在执行某些操作前删除完整性。
lvconvert --raidintegrity n my_vg/test-lv
# lvconvert --raidintegrity n my_vg/test-lv Logical volume my_vg/test-lv has removed integrity.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看有关添加的 DM 完整性的信息:
查看在 my_vg 卷组中创建的 test-lv RAID LV 的信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 下面描述了此输出的不同选项:
g
属性-
它是 Attr 列下的属性列表,表示 RAID 镜像使用完整性。完整性将校验和存储在
_imeta
RAID LV 中。 Cpy%Sync
列- 它指示顶层 RAID LV 和每个 RAID 镜像的同步进度。
- RAID 镜像
-
它通过
raid_image_N
在 LV 列中指示。 LV
列- 它确保对顶层 RAID LV 和每个 RAID 镜像显示 100% 同步进度。
显示每个 RAID LV 的类型:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有一个增量的计数器,它计算在每个 RAID 镜像上检测到的不匹配数。查看 my_vg/test-lv 下的
rimage_0
检测到的数据不匹配:lvs -o+integritymismatches my_vg/test-lv_rimage_0
# lvs -o+integritymismatches my_vg/test-lv_rimage_0 LV VG Attr LSize Origin Cpy%Sync IntegMismatches [test-lv_rimage_0] my_vg gwi-aor--- 256.00m [test-lv_rimage_0_iorig] 100.00 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在这个示例中,完整性还没有检测到任何不匹配的数据,因此
IntegMismatches
计数器会显示 0 (0)。查看
/var/log/messages
日志文件中的数据完整性信息,如下例所示:例 9.1. 内核消息日志中的 dm-integrity 不匹配示例
device-mapper: integrity: dm-12:校验和在扇区 0x24e7 时失败
例 9.2. 来自内核消息日志的 dm-integrity 数据更正示例
md/raid1:mdX: 读取错误修正(8 扇区位在 dm-16 上 的 9448)
9.10. 将 RAID 逻辑卷转换为另一个 RAID 级别 复制链接链接已复制到粘贴板!
LVM 支持 RAID 接管,这意味着将 RAID 逻辑卷从一个 RAID 级别转换到另一个 RAID 级别,例如从 RAID 5 转换到 RAID 6。您可以更改 RAID 级别以增加或减少对设备故障的恢复能力。
流程
创建 RAID 逻辑卷:
lvcreate --type raid5 -i 3 -L 500M -n my_lv my_vg
# lvcreate --type raid5 -i 3 -L 500M -n my_lv my_vg Using default stripesize 64.00 KiB. Rounding size 500.00 MiB (125 extents) up to stripe boundary size 504.00 MiB (126 extents). Logical volume "my_lv" created.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 RAID 逻辑卷:
lvs -a -o +devices,segtype
# lvs -a -o +devices,segtype LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices Type my_lv my_vg rwi-a-r--- 504.00m 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0),my_lv_rimage_3(0) raid5 [my_lv_rimage_0] my_vg iwi-aor--- 168.00m /dev/sda(1) linear
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 RAID 逻辑卷转换为另一个 RAID 级别:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果这个命令提示重复转换,请运行:
lvconvert --type raid6 my_vg/my_lv
# lvconvert --type raid6 my_vg/my_lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看具有转换的 RAID 级别的 RAID 逻辑卷:
lvs -a -o +devices,segtype
# lvs -a -o +devices,segtype LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices Type my_lv my_vg rwi-a-r--- 504.00m 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0),my_lv_rimage_3(0),my_lv_rimage_4(0) raid6 [my_lv_rimage_0] my_vg iwi-aor--- 172.00m /dev/sda(1) linear
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.11. 将线性设备转换为 RAID 逻辑卷 复制链接链接已复制到粘贴板!
您可以将现有的线性逻辑卷转换为 RAID 逻辑卷。要执行此操作,请使用 lvconvert
命令的 --type
参数。
RAID 逻辑卷由元数据和数据子卷对组成。当您将线性设备转换为 RAID1 阵列时,它会创建一个新的元数据子卷,并将其与线性卷所在的同一物理卷中的原始逻辑卷相关联。其他镜像添加到 metadata/data 子卷对中。如果无法将与原始逻辑卷配对的元数据镜像放在同一个物理卷上,则 lvconvert
将失败。
流程
查看需要转换的逻辑卷设备:
lvs -a -o name,copy_percent,devices my_vg
# lvs -a -o name,copy_percent,devices my_vg LV Copy% Devices my_lv /dev/sde1(0)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将线性逻辑卷转换为 RAID 设备。以下命令将卷组 __my_vg 中的线性逻辑卷 my_lv 转换为双向 RAID1 阵列:
lvconvert --type raid1 -m 1 my_vg/my_lv
# lvconvert --type raid1 -m 1 my_vg/my_lv Are you sure you want to convert linear LV my_vg/my_lv to raid1 with 2 images enhancing resilience? [y/n]: y Logical volume my_vg/my_lv successfully converted.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
确定逻辑卷是否转换为 RAID 设备:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.12. 将 LVM RAID1 逻辑卷转换为 LVM 线性逻辑卷 复制链接链接已复制到粘贴板!
您可以将现有的 RAID1 LVM 逻辑卷转换为 LVM 线性逻辑卷。要执行此操作,请使用 lvconvert
命令并指定 -m0
参数。这会删除所有 RAID 数据子卷以及构成 RAID 阵列的所有 RAID 元数据子卷,保留顶层 RAID1 镜像作为线性逻辑卷。
流程
显示现有 LVM RAID1 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将现有的 RAID1 LVM 逻辑卷转换为 LVM 线性逻辑卷。以下命令将 LVM RAID1 逻辑卷 my_vg/my_lv 转换为 LVM 线性设备:
lvconvert -m0 my_vg/my_lv
# lvconvert -m0 my_vg/my_lv Are you sure you want to convert raid1 LV my_vg/my_lv to type linear losing all resilience? [y/n]: y Logical volume my_vg/my_lv successfully converted.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您将 LVM RAID1 逻辑卷转换成 LVM 线性卷,,您可以指定要删除的物理卷。在以下示例中,
lvconvert
命令指定要删除 /dev/sde1,保留 /dev/sdf1 作为组成线性设备的物理卷:lvconvert -m0 my_vg/my_lv /dev/sde1
# lvconvert -m0 my_vg/my_lv /dev/sde1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证 RAID1 逻辑卷是否转换为 LVM 线性设备:
lvs -a -o name,copy_percent,devices my_vg
# lvs -a -o name,copy_percent,devices my_vg LV Copy% Devices my_lv /dev/sdf1(1)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.13. 将镜像 LVM 设备转换为 RAID1 逻辑卷 复制链接链接已复制到粘贴板!
您可以将片段类型为 mirror 的现有镜像 LVM 设备转换为 RAID1 LVM 设备。要执行此操作,请使用带有 --type
raid1 参数的 lvconvert
命令。这会将名为 mimage
的镜像子卷重命名为名为 rimage
的 RAID 子卷。
另外,它还会删除镜像日志,并为与对应的数据子卷在同一物理卷上的数据子卷创建名为 rmeta
的元数据子卷。
流程
查看镜像逻辑卷 my_vg/my_lv 的布局:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将镜像逻辑卷 my_vg/my_lv 转换为 RAID1 逻辑卷:
lvconvert --type raid1 my_vg/my_lv
# lvconvert --type raid1 my_vg/my_lv Are you sure you want to convert mirror LV my_vg/my_lv to raid1 type? [y/n]: y Logical volume my_vg/my_lv successfully converted.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证镜像逻辑卷是否转换为 RAID1 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.14. 更改现有 RAID1 设备中的镜像数 复制链接链接已复制到粘贴板!
您可以更改现有 RAID1 阵列中的镜像数量,类似于更改 LVM 镜像实现中的镜像数量。
当您使用 lvconvert
命令将镜像添加到 RAID1 逻辑卷时,您可以执行以下操作:
- 指定生成的设备的镜像总数,
- 要添加到该设备的镜像数量,以及
- 可以指定新元数据/数据镜像对所在的物理卷。
流程
显示 LVM 设备 my_vg/my_lv,它是一个双向 RAID1 阵列:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 元数据子卷(名为
rmeta
)始终与它们的数据子卷rimage
存在于同一物理设备上。元数据/数据子卷对不会与 RAID 阵列中另一元数据/数据子卷对创建在同一物理卷上(除非您指定了--alloc anywhere
)。将双向 RAID1 逻辑卷 my_vg/my_lv 转换为三向 RAID1 逻辑卷:
lvconvert -m 2 my_vg/my_lv
# lvconvert -m 2 my_vg/my_lv Are you sure you want to convert raid1 LV my_vg/my_lv to 3 images enhancing resilience? [y/n]: y Logical volume my_vg/my_lv successfully converted.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下是更改现有 RAID1 设备中的镜像数的几个示例:
您还可以在 RAID 中添加镜像时要使用的物理卷。以下命令通过指定物理卷 /dev/sdd1 用于阵列,将双向 RAID1 逻辑卷 my_vg/my_lv 转换为三向 RAID1 逻辑卷:
lvconvert -m 2 my_vg/my_lv /dev/sdd1
# lvconvert -m 2 my_vg/my_lv /dev/sdd1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将三向 RAID1 逻辑卷转换成双向 RAID1 逻辑卷:
lvconvert -m1 my_vg/my_lv
# lvconvert -m1 my_vg/my_lv Are you sure you want to convert raid1 LV my_vg/my_lv to 2 images reducing resilience? [y/n]: y Logical volume my_vg/my_lv successfully converted.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过指定物理卷 /dev/sde1,其中包含要删除的镜像,将三向 RAID1 逻辑卷转换成双向 RAID1 逻辑卷:
lvconvert -m1 my_vg/my_lv /dev/sde1
# lvconvert -m1 my_vg/my_lv /dev/sde1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 另外,当您删除镜像及其关联的元数据子卷时,任何高数字镜像都会被切换以填充插槽。如果您从包含
lv_rimage_0
、lv_rimage_1
和lv_rimage_2
的三向 RAID1 阵列中删除lv_rimage_1
,则会产生一个由lv_rimage_0
和lv_rimage_1
组成的 RAID1 阵列。lv_rimage_2
将会被重命名,并接管空插槽,成为lv_rimage_1
。
验证
在更改现有 RAID1 设备中的镜像数后查看 RAID1 设备:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.15. 将 RAID 镜像分离为一个独立的逻辑卷 复制链接链接已复制到粘贴板!
您可以分离 RAID 逻辑卷的镜像形成新的逻辑卷。和您从现有 RAID1 逻辑卷中删除 RAID 镜像一样,当您从设备的中间部分删除 RAID 数据子卷(及其关联的元数据子卷)时,会使用数字高的镜像来填充空的位置。因此,构成 RAID 阵列的逻辑卷上的索引号将是一个完整的整数序列。
如果 RAID1 阵列还没有同步,您就无法分离 RAID 镜像。
流程
显示 LVM 设备 my_vg/my_lv,它是一个双向 RAID1 阵列:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 RAID 镜像分成一个单独的逻辑卷:
以下示例将一个双向 RAID1 逻辑卷 my_lv 分成两个线性逻辑卷 my_lv 和 new:
lvconvert --splitmirror 1 -n new my_vg/my_lv
# lvconvert --splitmirror 1 -n new my_vg/my_lv Are you sure you want to split raid1 LV my_vg/my_lv losing all resilience? [y/n]: y
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下示例将一个三向 RAID1 逻辑卷 my_lv 分成一个双向 RAID1 逻辑卷 my_lv 和线性逻辑卷 new :
lvconvert --splitmirror 1 -n new my_vg/my_lv
# lvconvert --splitmirror 1 -n new my_vg/my_lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在分离 RAID 逻辑卷的镜像后查看逻辑卷:
lvs -a -o name,copy_percent,devices my_vg
# lvs -a -o name,copy_percent,devices my_vg LV Copy% Devices my_lv /dev/sde1(1) new /dev/sdf1(1)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.16. 分割和合并 RAID 镜像 复制链接链接已复制到粘贴板!
您可以使用 lvconvert 命令的 --trackchanges 参数(使用 --trackchanges
参数和 lvconvert
命令的 --splitmirrors
参数),临时分离 RAID1 阵列的镜像以进行只读使用。这可让您以后将镜像合并到阵列中,同时只重新同步那些自镜像被分割后更改的阵列的部分。
当您使用 --trackchanges
参数分离 RAID 镜像时,您可以指定要分离哪个镜像,但您不能更改要分离的卷的名称。另外,得到的卷有以下限制:
- 创建的新卷为只读。
- 不能调整新卷的大小。
- 不能重命名剩余的数组。
- 不能调整剩余的数组大小。
- 您可以独立激活新卷和剩余的阵列。
您可以合并分离的镜像。当您合并镜像时,只有自镜像分割后更改的阵列部分会被重新同步。
流程
创建 RAID 逻辑卷:
lvcreate --type raid1 -m 2 -L 1G -n my_lv my_vg
# lvcreate --type raid1 -m 2 -L 1G -n my_lv my_vg Logical volume "my_lv" created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:查看创建的 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从创建的 RAID 逻辑卷中分割镜像,并跟踪对剩余的阵列的更改:
lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv
# lvconvert --splitmirrors 1 --trackchanges my_vg/my_lv my_lv_rimage_2 split from my_lv for read-only purposes. Use 'lvconvert --merge my_vg/my_lv_rimage_2' to merge back into my_lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:在分割镜像后查看逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将卷合并回阵列中:
lvconvert --merge my_vg/my_lv_rimage_1
# lvconvert --merge my_vg/my_lv_rimage_1 my_vg/my_lv_rimage_1 successfully merged back into my_vg/my_lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看合并的逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.17. 将 RAID 故障策略设置为 allocate 复制链接链接已复制到粘贴板!
您可以将 raid_fault_policy
字段设置为 /etc/lvm/lvm.conf
文件中的 allocate
参数。使用这个首选项,系统会尝试使用卷组中的备用设备替换失败的设备。如果没有备用设备,系统日志会包含此信息。
流程
查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 /dev/sdb 设备失败,请查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 /dev/sdb 设备失败,您还可以查看系统日志中的错误信息。
在
lvm.conf
文件中将raid_fault_policy
字段设置为allocate
:vi /etc/lvm/lvm.conf
# vi /etc/lvm/lvm.conf raid_fault_policy = "allocate"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果将
raid_fault_policy
设置为allocate
,但没有备用设备,则分配会失败,逻辑卷保留原样。如果分配失败,您可以使用lvconvert --repair
命令修复和替换失败的设备。如需更多信息,请参阅 在逻辑卷中替换失败的 RAID 设备。
验证
验证失败的设备现在是否可以使用卷组中的新设备进行替换:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意即使失败的设备现在被替换了,但显示仍然表示 LVM 没有找到失败的设备,因为设备还没有从卷组中删除。您可以通过执行
vgreduce --removemissing my_vg
命令从卷组中删除失败的设备。
9.18. 将 RAID 故障策略设置为 warn 复制链接链接已复制到粘贴板!
您可以在 lvm.conf
文件中将 raid_fault_policy
字段设置为 warn
参数。有了这个首选项,系统会在系统日志中添加了一条表示失败的设备的警告。根据警告,您可以确定后续步骤。
默认情况下,raid_fault_policy
字段的值在 lvm.conf
中是 warn
。
流程
查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 lvm.conf 文件中将 raid_fault_policy 字段设置为 warn :
vi /etc/lvm/lvm.conf
# vi /etc/lvm/lvm.conf # This configuration option has an automatic default value. raid_fault_policy = "warn"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 /dev/sdb 设备失败,查看系统日志以显示错误信息:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 /dev/sdb 设备失败,系统日志会显示错误消息。在这种情况下,LVM 将不会自动尝试通过替换其中一个镜像修复 RAID 设备。相反,如果设备失败,您可以使用
lvconvert
命令的--repair
参数替换该设备。如需更多信息,请参阅 在逻辑卷中替换失败的 RAID 设备。
9.19. 替换正常工作的 RAID 设备 复制链接链接已复制到粘贴板!
您可以使用 lvconvert
命令的 --replace
参数替换逻辑卷中正常工作的 RAID 设备。
如果 RAID 设备失败,以下命令无法正常工作。
先决条件
- RAID 设备没有失败。
流程
创建 RAID1 阵列:
lvcreate --type raid1 -m 2 -L 1G -n my_lv my_vg
# lvcreate --type raid1 -m 2 -L 1G -n my_lv my_vg Logical volume "my_lv" created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查创建的 RAID1 阵列:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据您的要求,使用以下任一方法替换 RAID 设备:
通过指定要替换的物理卷来替换 RAID1 设备:
lvconvert --replace /dev/sdb2 my_vg/my_lv
# lvconvert --replace /dev/sdb2 my_vg/my_lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过指定要用于替换的物理卷来替换 RAID1 设备:
lvconvert --replace /dev/sdb1 my_vg/my_lv /dev/sdd1
# lvconvert --replace /dev/sdb1 my_vg/my_lv /dev/sdd1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过指定多个替换参数来一次替换多个 RAID 设备:
lvconvert --replace /dev/sdb1 --replace /dev/sdc1 my_vg/my_lv
# lvconvert --replace /dev/sdb1 --replace /dev/sdc1 my_vg/my_lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在指定要替换的物理卷后检查 RAID1 阵列:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在指定用于替换的物理卷后检查 RAID1 阵列:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 一次替换多个 RAID 设备后检查 RAID1 阵列:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.20. 在逻辑卷中替换失败的 RAID 设备 复制链接链接已复制到粘贴板!
RAID 与传统的 LVM 镜像不同。如果是 LVM 镜像,请删除失败的设备。否则,当 RAID 阵列继续使用失败的设备运行时,镜像逻辑卷将挂起。对于 RAID1 以外的 RAID 级别,删除设备意味着转换到较低的 RAID 级别,例如从 RAID6 转换到 RAID5,或者从 RAID4 或 RAID5 转换到 RAID0。
您可以使用 lvconvert
命令的 --repair
参数替换 RAID 逻辑卷中作为物理卷的故障设备,而不是删除失败的设备并分配一个替换设备。
先决条件
卷组包含一个物理卷,它有足够的可用容量替换失败的设备。
如果卷组中没有足够空闲扩展的物理卷,请使用
vgextend
工具添加一个新的、足够大的物理卷。
流程
查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 /dev/sdc 设备失败后查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换失败的设备:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:手动指定替换失败设备的物理卷:
lvconvert --repair my_vg/my_lv replacement_pv
# lvconvert --repair my_vg/my_lv replacement_pv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用替换检查逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在您从卷组中删除失败的设备前,LVM 工具仍然指示 LVM 无法找到失败的设备。
从卷组中删除失败的设备:
vgreduce --removemissing my_vg
# vgreduce --removemissing my_vg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
删除失败的设备后查看可用的物理卷:
pvscan
# pvscan PV /dev/sde1 VG rhel_virt-506 lvm2 [<7.00 GiB / 0 free] PV /dev/sdb1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free] PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free] PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在替换失败的设备后检查逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.21. 检查 RAID 逻辑卷中数据的一致性 复制链接链接已复制到粘贴板!
LVM 提供对 RAID 逻辑卷的清理支持。RAID 清理是读取阵列中的所有数据和奇偶校验块的过程,并检查它们是否是分配的。lvchange --syncaction repair
命令对阵列启动后台同步操作。
流程
可选:通过设置以下选项之一来控制 RAID 逻辑卷初始化的速率:
-
--maxrecoveryrate Rate[bBsSkKmMgG]
为 RAID 逻辑卷设置最大恢复率,使其不会驱逐正常的 I/O 操作。 --minrecoveryrate Rate[bBsSkKmMgG]
设置 RAID 逻辑卷的最小恢复率,以确保 sync 操作的 I/O 达到最小吞吐量,即使存在大量标准 I/O 时lvchange --maxrecoveryrate 4K my_vg/my_lv
# lvchange --maxrecoveryrate 4K my_vg/my_lv Logical volume _my_vg/my_lv_changed.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用恢复率值替换 4K,它是阵列中每个设备的每秒的量。如果没有后缀,选项会假定为 kiB/每秒/每个设备。
lvchange --syncaction repair my_vg/my_lv
# lvchange --syncaction repair my_vg/my_lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您执行 RAID 清理操作时,
sync
操作所需的后台 I/O 可能会将其他 I/O 分离到 LVM 设备,如对卷组元数据的更新。这可能导致其它 LVM 操作速度下降。注意您还可以在创建 RAID 设备时使用这些最大和最小 I/O 速率。例如,
lvcreate --type raid10 -i 2 -m 1 -L 10G --maxrecoveryrate 128 -n my_lv my_vg
创建一个双向 RAID10 阵列 my_lv,它在卷组 my_vg 中,有大小为 10G,最大恢复率为 128 kiB/sec/device 的 3 个条带。
-
显示阵列中未修复的差异的数量,没有修复它们:
lvchange --syncaction check my_vg/my_lv
# lvchange --syncaction check my_vg/my_lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令对阵列启动后台同步操作。
-
可选:查看
var/log/syslog
文件以了解内核消息。 修正阵列中的差异:
lvchange --syncaction repair my_vg/my_lv
# lvchange --syncaction repair my_vg/my_lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令修复或者替换 RAID 逻辑卷中失败的设备。您可以在执行此命令后查看
var/log/syslog
文件以了解内核消息。
验证
显示有关清理操作的信息:
lvs -o +raid_sync_action,raid_mismatch_count my_vg/my_lv
# lvs -o +raid_sync_action,raid_mismatch_count my_vg/my_lv LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert SyncAction Mismatches my_lv my_vg rwi-a-r--- 500.00m 100.00 idle 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.22. 对 RAID1 逻辑卷的 I/O 操作 复制链接链接已复制到粘贴板!
您可以使用 lvchange
命令的 --writemostly
和 --writebehind
参数来控制对 RAID1 逻辑卷中设备的 I/O 操作。以下是使用这些参数的格式:
--[raid]writemostly PhysicalVolume[:{t|y|n}]
将 RAID1 逻辑卷中的设备标记为
write-mostly
,并避免对这些驱动器的所有读操作(除非有必要)。设置此参数会使驱动器中的 I/O 操作数量保持最小。使用
lvchange --writemostly /dev/sdb my_vg/my_lv
命令设置此参数。您可以使用以下方法设置
writemostly
属性::y
-
默认情况下,对于逻辑卷中指定的物理卷,
writemostly
属性的值是 yes。 :n
-
要删除
writemostly
标志,请将:n
附加到物理卷中。 :t
要切换
writemostly
属性的值,请指定--writemostly
参数。您可以在单个命令中多次使用此参数,例如
lvchange --writemostly /dev/sdd1:n --writemostly /dev/sdb1:t --writemostly /dev/sdc1:y my_vg/my_lv
。通过这种方式,可以一次切换逻辑卷中所有物理卷的writemostly
属性。
--[raid]writebehind IOCount
指定标记为
writemostly
的待处理写的最大数。这些是适用于 RAID1 逻辑卷中设备的写操作的数量。在超出此参数值后,在 RAID 阵列通知所有写入作完成前,对组成的设备的所有写操作都会同步完成。您可以使用
lvchange --writebehind 100 my_vg/my_lv
设置此参数。将writemostly
属性的值设置为零来清除首选项。使用这个设置,系统会任意选择值。
9.23. 重塑 RAID 卷 复制链接链接已复制到粘贴板!
RAID 重塑意味着更改 RAID 逻辑卷的属性,而不更改 RAID 级别。您可以更改的一些属性包括 RAID 布局、条带大小和条带数。
流程
创建 RAID 逻辑卷:
lvcreate --type raid5 -i 2 -L 500M -n my_lv my_vg
# lvcreate --type raid5 -i 2 -L 500M -n my_lv my_vg Using default stripesize 64.00 KiB. Rounding size 500.00 MiB (125 extents) up to stripe boundary size 504.00 MiB (126 extents). Logical volume "my_lv" created.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:查看 RAID 逻辑卷的
stripes
镜像和stripesize
:lvs -o stripes my_vg/my_lv
# lvs -o stripes my_vg/my_lv #Str 3
Copy to Clipboard Copied! Toggle word wrap Toggle overflow lvs -o stripesize my_vg/my_lv
# lvs -o stripesize my_vg/my_lv Stripe 64.00k
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据您的要求,使用以下方法修改 RAID 逻辑卷的属性:
修改 RAID 逻辑卷的
stripes
镜像:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改 RAID 逻辑卷的
stripesize
:lvconvert --stripesize 128k my_vg/my_lv
# lvconvert --stripesize 128k my_vg/my_lv Converting stripesize 64.00 KiB of raid5 LV my_vg/my_lv to 128.00 KiB. Are you sure you want to convert raid5 LV my_vg/my_lv? [y/n]: y Logical volume my_vg/my_lv successfully converted.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
maxrecoveryrate
和minrecoveryrate
属性:lvchange --maxrecoveryrate 4M my_vg/my_lv
# lvchange --maxrecoveryrate 4M my_vg/my_lv Logical volume my_vg/my_lv changed.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow lvchange --minrecoveryrate 1M my_vg/my_lv
# lvchange --minrecoveryrate 1M my_vg/my_lv Logical volume my_vg/my_lv changed.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
syncaction
属性:lvchange --syncaction check my_vg/my_lv
# lvchange --syncaction check my_vg/my_lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
writemostly
和writebehind
属性:lvchange --writemostly /dev/sdb my_vg/my_lv
# lvchange --writemostly /dev/sdb my_vg/my_lv Logical volume my_vg/my_lv changed.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow lvchange --writebehind 100 my_vg/my_lv
# lvchange --writebehind 100 my_vg/my_lv Logical volume my_vg/my_lv changed.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看 RAID 逻辑卷的
stripes
镜像和stripesize
:lvs -o stripes my_vg/my_lv
# lvs -o stripes my_vg/my_lv #Str 4
Copy to Clipboard Copied! Toggle word wrap Toggle overflow lvs -o stripesize my_vg/my_lv
# lvs -o stripesize my_vg/my_lv Stripe 128.00k
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
maxrecoveryrate
属性后查看 RAID 逻辑卷:lvs -a -o +raid_max_recovery_rate
# lvs -a -o +raid_max_recovery_rate LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert MaxSync my_lv my_vg rwi-a-r--- 10.00g 100.00 4096 [my_lv_rimage_0] my_vg iwi-aor--- 10.00g [...]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
minrecoveryrate
属性后查看 RAID 逻辑卷:lvs -a -o +raid_min_recovery_rate
# lvs -a -o +raid_min_recovery_rate LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert MinSync my_lv my_vg rwi-a-r--- 10.00g 100.00 1024 [my_lv_rimage_0] my_vg iwi-aor--- 10.00g [...]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 修改
syncaction
属性后查看 RAID 逻辑卷:lvs -a
# lvs -a LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert my_lv my_vg rwi-a-r--- 10.00g 2.66 [my_lv_rimage_0] my_vg iwi-aor--- 10.00g [...]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
9.24. 在 RAID 逻辑卷中更改区域大小 复制链接链接已复制到粘贴板!
当您创建 RAID 逻辑卷时,/etc/lvm/lvm.conf
文件中的 raid_region_size
参数代表 RAID 逻辑卷的区域大小。创建 RAID 逻辑卷后,您可以更改卷的区域大小。此参数定义跟踪脏或干净状态的粒度。位映射中的脏位定义 RAID 卷脏关闭后要同步的工作集,例如系统故障。
如果将 raid_region_size
设置为更高的值,它会减小位映射的大小以及阻塞。但它会影响重新同步区域期间的写
操作,因为写入 RAID 会延迟,直到同步区域完成。
流程
创建 RAID 逻辑卷:
lvcreate --type raid1 -m 1 -L 10G test
# lvcreate --type raid1 -m 1 -L 10G test Logical volume "lvol0" created.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Region 列显示 raid_region_size 参数的值。
可选:查看
raid_region_size
参数的值:cat /etc/lvm/lvm.conf | grep raid_region_size Configuration option activation/raid_region_size. # raid_region_size = 2048
# cat /etc/lvm/lvm.conf | grep raid_region_size # Configuration option activation/raid_region_size. # raid_region_size = 2048
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更改 RAID 逻辑卷的区域大小:
lvconvert -R 4096K my_vg/my_lv
# lvconvert -R 4096K my_vg/my_lv Do you really want to change the region_size 512.00 KiB of LV my_vg/my_lv to 4.00 MiB? [y/n]: y Changed region size on RAID LV my_vg/my_lv to 4.00 MiB.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新同步 RAID 逻辑卷:
lvchange --resync my_vg/my_lv
# lvchange --resync my_vg/my_lv Do you really want to deactivate logical volume my_vg/my_lv to resync it? [y/n]: y
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Region 列指示
raid_region_size
参数的更改值。查看
lvm.conf
文件中的raid_region_size
参数的值:cat /etc/lvm/lvm.conf | grep raid_region_size Configuration option activation/raid_region_size. # raid_region_size = 4096
# cat /etc/lvm/lvm.conf | grep raid_region_size # Configuration option activation/raid_region_size. # raid_region_size = 4096
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 10 章 限制 LVM 设备可见性和用法 复制链接链接已复制到粘贴板!
您可以通过控制 LVM 可扫描的设备来限制逻辑卷管理器(LVM)可用的设备。
使用 LVM 命令控制 LVM 设备扫描。LVM 命令与名为 system.devices
文件的文件交互,该文件列出了可见和可用的设备。在 Red Hat Enterprise Linux 9 中默认启用这个功能。
如果您禁用设备文件功能,则 LVM 设备过滤器会自动启用。
要调整 LVM 设备扫描的配置,请编辑 /etc/lvm/lvm.conf
文件中的 LVM 设备过滤器设置。lvm.conf
文件中的过滤器由一系列简单的正则表达式组成。系统会将这些表达式应用于 /dev
目录中的每个设备名称,以确定是否接受或拒绝每个检测到的块设备。
10.1. LVM 设备文件 复制链接链接已复制到粘贴板!
Logical Volume Manager (LVM) system.devices
文件控制 LVM 设备可见性和可用性。您可以在 /etc/lvm/devices/
目录中找到设备文件。使用 LVM 命令管理设备文件。不要直接编辑 system.devices
文件。
默认情况下,在 Red Hat Enterprise Linux 9 中启用了 system.devices
文件功能。当激活时,它会替换 LVM 设备过滤器。要启用 LVM 设备过滤器,请禁用 system.devices
文件。如需更多信息,请参阅禁用 system.devices 文件。
10.1.2. 在 system.devices 文件中添加设备 复制链接链接已复制到粘贴板!
要将设备与逻辑卷管理器(LVM)一起使用,system.devices
文件必须包含设备 ID 列表,否则 LVM 会忽略它们。操作系统 (OS) 安装程序在安装过程中将设备添加到 system.devices
文件中。新安装的系统会自动将 root 设备自动包含在设备文件中。在操作系统安装期间附加到系统的任何物理卷 (PV) 也包含在设备文件中。您还可以在设备文件中具体添加设备。LVM 会检测并使用在设备文件中存储的设备列表。
流程
使用以下方法之一在 system.devices
文件中添加设备:
通过在设备文件中包括名称来添加设备:
lvmdevices --adddev <device_name>
$ lvmdevices --adddev <device_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在设备文件中添加卷组 (VG) 中的所有设备:
vgimportdevices <vg_name>
$ vgimportdevices <vg_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在设备文件中添加所有可见的 VG 中的所有设备:
vgimportdevices --all
$ vgimportdevices --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
要隐式将新设备包含到 system.devices
文件中,请使用以下命令之一:
使用
pvcreate
命令初始化新设备:pvcreate <device_name>
$ pvcreate <device_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
这个操作会自动将新物理卷 (PV) 添加到
system.devices
文件中。
-
这个操作会自动将新物理卷 (PV) 添加到
初始化新设备并在设备文件中自动添加新设备参数:
vgcreate <vg_name> <device_names>
$ vgcreate <vg_name> <device_names>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将 <vg_name> 替换为您要在其中添加设备的 VG 的名称。
- 将 <device_names> 替换为您要添加的设备列表。
使用
vgextend
命令初始化新设备:vgextend <vg_name> <device_names>
$ vgextend <vg_name> <device_names>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 将 <vg_name> 替换为您要在其中添加设备的 VG 的名称。
- 将 <device_names> 替换为您要添加的设备名称。
- 这会在设备文件中自动添加新设备参数。
验证
只有在您需要将新设备明确添加到 system.devices
文件中时,才使用以下验证。
显示
system.devices
文件,检查设备列表:cat /etc/lvm/devices/system.devices
$ cat /etc/lvm/devices/system.devices
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新
system.devices
文件以匹配最新的设备信息:lvmdevices --update
$ lvmdevices --update
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.1.3. 从 system.devices 文件中删除设备 复制链接链接已复制到粘贴板!
删除设备以防止逻辑卷管理器 (LVM) 检测或使用该设备。
流程
根据您有关该设备的信息,使用以下方法之一删除设备:
按名称删除设备:
lvmdevices --deldev <device_name>
$ lvmdevices --deldev <device_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过该设备的物理卷 ID (PVID) 删除设备:
lvmdevices --delpvid <PV_UUID>
$ lvmdevices --delpvid <PV_UUID>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
只有在需要明确删除 system.devices
文件中的设备时,才使用以下验证。
显示
system.devices
文件进行验证,是否不再存在删除的设备:cat /etc/lvm/devices/system.devices
$ cat /etc/lvm/devices/system.devices
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新
system.devices
文件以匹配最新的设备信息:lvmdevices --update
$ lvmdevices --update
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.1.4. 创建自定义设备文件 复制链接链接已复制到粘贴板!
逻辑卷管理器 (LVM) 命令使用系统的默认 system.devices
文件。您还可以通过在 LVM 命令中指定新文件名来创建和使用自定义设备文件。当只有某些应用程序需要使用某些设备时,自定义设备文件很有用。
流程
-
在
/etc/lvm/devices/
目录中创建自定义设备文件。 在 LVM 命令中包括新设备文件名:
lvmdevices --devicesfile <devices_file_name>
$ lvmdevices --devicesfile <devices_file_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:显示新设备文件以验证是否存在新设备名称:
cat /etc/lvm/devices/<devices_file_name>
$ cat /etc/lvm/devices/<devices_file_name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.1.5. 访问系统中的所有设备 复制链接链接已复制到粘贴板!
您可以启用逻辑卷管理器(LVM)访问和使用系统中的所有设备,这将覆盖 system.devices
文件中列出的设备所造成的限制。
流程
指定空设备文件:
lvmdevices --devicesfile ""
$ lvmdevices --devicesfile ""
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
10.1.6. 禁用 system.devices 文件 复制链接链接已复制到粘贴板!
您可以禁用 system.devices
文件功能。这个操作会自动启用逻辑卷管理器 (LVM) 设备过滤器。
流程
-
打开
lvm.conf
文件。 - 在 devices 部分中设置以下值:
use_devicesfile=0
use_devicesfile=0
如果您删除 system.devices
文件,则此操作会有效禁用它。即使您在 lvm.conf
配置文件中启用 system.devices
文件,通过在 devices 部分中设置 use_devicesfile=1
,也会应用它。禁用设备文件会自动启用 lvm.conf
设备过滤器。
10.2. LVM 过滤的持久性标识符 复制链接链接已复制到粘贴板!
传统的 Linux 设备名称(如 /dev/sda
)可能会在系统修改和重启过程中有所变化。全球识别符(WWID)、通用唯一标识符(UUID))等持久性命名属性(PNA)和路径名称都基于存储设备的唯一特征,并可适应硬件配置中的变化。这使得它们在系统重启后更稳定且可预测。
在 LVM 过滤中持久性设备标识符的实现提高了 LVM 配置的稳定性和可靠性。它还降低了与设备名称的动态性质相关的系统引导失败的风险。
10.3. LVM 设备过滤器 复制链接链接已复制到粘贴板!
Logical Volume Manager (LVM)设备过滤器是设备名称模式列表。您可以使用它来指定一组强制标准,系统可以使用它来评估设备,并将其视为可以有效地与 LVM 一起使用。LVM 设备过滤器可让您控制 LVM 可以使用哪个设备。这有助于防止意外数据丢失或未授权访问存储设备。
10.3.1. LVM 设备过滤器模式特征 复制链接链接已复制到粘贴板!
LVM 设备过滤器的模式采用正则表达式的形式。正则表达式用一个字符分隔,前面是 a
表示接受,或 r
表示拒绝。匹配设备的列表中的第一个正则表达式决定了 LVM 接受还是拒绝(忽略)一个特定设备。然后,LVM 会在与设备路径匹配的列表中查找初始正则表达式。LVM 使用这个正则表达式来确定是否应该使用 a
结果批准该设备,或使用r
结果拒绝该设备。
如果单个设备有多个路径名称,LVM 会根据列出的顺序访问这些路径名称。在任何 r
模式之前,如果至少有一个路径名称与 a
模式匹配 ,则 LVM 会批准该设备。但是,如果 a
模式发现之前,所有路径名称都与 r
模式一致,则设备将被拒绝。
与模式不匹配的路径名称不会影响设备的批准状态。如果没有路径名称与设备的模式对应,则 LVM 仍然会批准该设备。
对于系统上的每个设备,udev
规则会生成多个符号链接。目录包含符号链接,如 /dev/disk/by-id/
、/dev/disk/by-uuid/
、/dev/disk/by-path/
,以确保系统上的每个设备都可以通过多个路径名称访问。
要拒绝过滤器中的设备,与该特定设备关联的所有路径名称必须与相应的拒绝 r
表达式匹配。但是,识别要拒绝的所有可能路径名称可能会是一个挑战。因此,最好创建专门接受某些路径,而拒绝所有其他路径的过滤器,使用一系列特定的 a
表达式,后跟一个拒绝所有其它任何东西的 r|.*|
表达式。
在过滤器中定义特定设备时,为该设备使用符号链接名称,而不是内核名称。设备的内核名称可能会改变,如 /dev/sda
,而某些符号链接名称不会改变,如 /dev/disk/by-id/wwn the
。
默认设备过滤器接受所有连接到系统的设备。理想的用户配置的设备过滤器接受一个或多个模式,并拒绝所有其他模式。例如,以 r|114|
结尾的模式列表。
您可以在 lvm.conf
文件的 devices/filter
和 devices/global_filter
配置字段中找到 LVM 设备过滤器配置。devices/filter
和 devices/global_filter
配置字段是等同的。
在 Red Hat Enterprise Linux 9 中,默认启用 /etc/lvm/devices/system.devices
文件。当禁用 system.devices
文件时,系统会自动启用 LVM 设备过滤器。
10.3.2. LVM 设备过滤器配置示例 复制链接链接已复制到粘贴板!
以下示例显示了过滤配置,以控制 LVM 扫描并稍后使用的设备。要在 lvm.conf
文件中配置设备过滤器,请参阅
在处理复制或克隆的 PV 时,您可能会遇到重复的物理卷(PV)警告。您可以设置过滤器来解决这个问题。请参阅 防止重复 PV 警告的 LVM 设备过滤器示例 中的过滤器配置示例。
要扫描所有设备,请输入:
filter = [ "a|.*|" ]
filter = [ "a|.*|" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要删除
cdrom
设备,以避免在驱动器不包含介质时的延迟,请输入:filter = [ "r|^/dev/cdrom$|" ]
filter = [ "r|^/dev/cdrom$|" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要添加所有循环设备并删除所有其他设备,请输入:
filter = [ "a|loop|", "r|.*|" ]
filter = [ "a|loop|", "r|.*|" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要添加所有循环和 SCSI 设备,并删除所有其他块设备,请输入:
filter = [ "a|loop|", "a|/dev/sd.*|", "r|.*|" ]
filter = [ "a|loop|", "a|/dev/sd.*|", "r|.*|" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要只在第一个 SCSI 驱动器上添加分区 8 ,并删除所有其他块设备,请输入:
filter = [ "a|^/dev/sda8$|", "r|.*|" ]
filter = [ "a|^/dev/sda8$|", "r|.*|" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从 WWID 标识的特定设备和所有多路径设备添加所有分区,请输入:
filter = [ "a|/dev/disk/by-id/<disk-id>.|", "a|/dev/mapper/mpath.|", "r|.*|" ]
filter = [ "a|/dev/disk/by-id/<disk-id>.|", "a|/dev/mapper/mpath.|", "r|.*|" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 命令还会删除任何其他块设备。
10.3.3. 应用 LVM 设备过滤器配置 复制链接链接已复制到粘贴板!
您可以通过在 lvm.conf
配置文件中设置过滤器来控制 LVM 扫描哪个设备。
先决条件
-
您已禁用了
system.devices
文件功能。 - 您已准备了要使用的设备过滤器模式。
流程
使用以下命令来测试设备过滤器模式,而不是实际修改
/etc/lvm/lvm.conf
文件。以下包括一个示例过滤器配置。lvs --config 'devices{ filter = [ "a|/dev/emcpower.|", "r|.|" ] }'
# lvs --config 'devices{ filter = [ "a|/dev/emcpower.|", "r|.|" ] }'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
/etc/lvm/lvm.conf
文件的配置部分devices
中添加设备过滤器模式:filter = [ "a|/dev/emcpower.*|", "r|*.|" ]
filter = [ "a|/dev/emcpower.*|", "r|*.|" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在重启时仅扫描所需的设备:
dracut --force --verbose
# dracut --force --verbose
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令重建
initramfs
文件系统,以便 LVM 在重启时只扫描必要的设备。
第 11 章 控制 LVM 分配 复制链接链接已复制到粘贴板!
默认情况下,卷组使用 normal
分配策略。这会根据通用规则(如不在同一物理卷上放置并行条带)分配物理扩展。您可以使用 vgcreate
命令的 --alloc
参数指定不同的分配策略(contiguous
、anywhere
或 cling
)。通常,只在特殊情况下需要指定非通常或非标准扩展分配时,才需要不同于 normal
的分配策略。
11.1. 从指定的设备分配扩展 复制链接链接已复制到粘贴板!
您可以在 lvcreate
和 lvconvert
命令的命令行末尾使用 device 参数来限制特定设备的分配。您可以为每个设备指定实际的扩展范围,以提供更多控制。命令只使用指定的物理卷(PV)作为参数,来为新逻辑卷(LV)分配扩展。它使用每个 PV 的可用扩展,直到它们耗尽,然后使用列出的下一个 PV 中的扩展。如果所有列出的 PV 上没有足够的空间用于请求的 LV 大小,则命令失败。请注意,命令只从指定的 PV 进行分配。RAID LV 对单独的 raid 镜像或单独的条带使用顺序 PV 。如果对于整个 raid 镜像来说 PV 不够大,则生成的设备的使用是不能完全预测的。
流程
创建卷组(VG):
vgcreate <vg_name> <PV> ...
# vgcreate <vg_name> <PV> ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
<vg_name>
是 VG 的名称。 -
<PV>
是 PV。
-
您可以分配 PV 来创建不同的卷类型,如 linear 或 raid :
分配扩展以创建线性卷:
lvcreate -n <lv_name> -L <lv_size> <vg_name> [ <PV> ... ]
# lvcreate -n <lv_name> -L <lv_size> <vg_name> [ <PV> ... ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
<lv_name>
是 LV 的名称。 -
<lv_size>
是 LV 的大小。默认单位是 MB。 -
<vg_name>
是 VG 的名称。 [ <PV …> ]
是 PV。您可以在命令行上指定其中一个 PV、所有 PV 或 none :
如果您指定一个 PV,则会从它分配 LV 的扩展。
注意如果对整个 LV 来说 PV 没有足够的可用扩展,则
lvcreate
失败。- 如果您指定了两个 PV,则 LV 的扩展将从其中一个 PV 或两者的组合中分配。
如果没有指定任何 PV,则扩展将从 VG 中的一个 PV 或者 VG 中所有 PV 的组合中分配。
注意在这些情况下,LVM 可能没有使用所有命名的 PV 或可用的 PV。如果第一个 PV 有足够的空闲扩展用于整个 LV,则可能不使用其他 PV。但是,如果第一个 PV 没有设置空闲扩展的分配大小,则 LV 可能会从第一个 PV 中分配一部分,并从第二个 PV 中分配一部分。
例 11.1. 从一个 PV 分配扩展
在这个示例中,
lv1
扩展将从sda
中分配。lvcreate -n lv1 -L1G vg /dev/sda
# lvcreate -n lv1 -L1G vg /dev/sda
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 11.2. 从两个 PV 中分配扩展
在这个示例中,
lv2
扩展将从sda
或sdb
或两者的组合中分配。lvcreate -n lv2 L1G vg /dev/sda /dev/sdb
# lvcreate -n lv2 L1G vg /dev/sda /dev/sdb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 11.3. 在不指定 PV 的情况下分配扩展
在本例中,
lv3
扩展将从 VG 中的一个 PV 或 VG 中所有 PV 的组合中分配。lvcreate -n lv3 -L1G vg
# lvcreate -n lv3 -L1G vg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 或者
-
分配扩展以创建 raid 卷:
lvcreate --type <segment_type> -m <mirror_images> -n <lv_name> -L <lv_size> <vg_name> [ <PV> ... ]
# lvcreate --type <segment_type> -m <mirror_images> -n <lv_name> -L <lv_size> <vg_name> [ <PV> ... ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中:
-
<segment_type>
是指定的片段类型(如raid5
、mirror
、snapshot
)。 -
<mirror_images>
创建一个raid1
或具有指定镜像数的镜像 LV。例如,-m 1
会产生具有两个镜像的raid1
LV。 -
<lv_name>
是 LV 的名称。 -
<lv_size>
是 LV 的大小。默认单位是 MB。 -
<vg_name>
是 VG 的名称。 <[PV …]>
是 PV。第一个 raid 镜像将从第一个 PV 中分配,第二个 raid 镜像将从第二个 PV 中分配,以此类推。
例 11.4. 从两个 PV 中分配 raid 镜像
在这个示例中,第一个镜像
lv4
将从sda
中分配,第二个镜像将从sdb
中分配。lvcreate --type raid1 -m 1 -n lv4 -L1G vg /dev/sda /dev/sdb
# lvcreate --type raid1 -m 1 -n lv4 -L1G vg /dev/sda /dev/sdb
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 11.5. 从三个 PV 中分配 raid 镜像
在本例中,第一个 raid 镜像
lv5
将从sda
中分配,第二个镜像将从sdb
中分配,第三个镜像将从sdc
中分配。lvcreate --type raid1 -m 2 -n lv5 -L1G vg /dev/sda /dev/sdb /dev/sdc
# lvcreate --type raid1 -m 2 -n lv5 -L1G vg /dev/sda /dev/sdb /dev/sdc
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
11.2. LVM 分配策略 复制链接链接已复制到粘贴板!
当 LVM 操作必须为一个或多个逻辑卷(LV)分配物理扩展时,分配过程如下:
- 生成卷组中的未分配物理扩展的完整集以供考虑。如果您在命令行末尾提供了任意物理扩展的范围,则只考虑指定物理卷(PV)上这些范围内未分配的物理扩展。
-
依次尝试每个分配策略,从最严格的策略(
contiguous
)开始,以使用--alloc
选项指定的分配策略结束,或者设置为特定 LV 或卷组(VG)的默认分配策略。对于每个策略,从需要填充的空 LV 空间的最低编号的逻辑扩展开始工作,根据分配策略施加的限制,分配尽可能多的空间。如果需要更多空间,LVM 会进入下一个策略。
分配策略的限制如下:
contiguous
策略要求任何逻辑扩展的物理位置紧挨着在前一个逻辑扩展的物理位置,但 LV 的第一个逻辑扩展除外。当 LV 为条带或镜像时,
contiguous
分配限制独立应用于每个需要空间的条带或 raid 镜像。-
cling
分配策略要求将用于任何逻辑扩展的 PV 添加到现有 LV 中,该 LV 之前已被 LV 中至少一个逻辑扩展使用。 -
normal
分配策略不会选择共享同一 PV 的物理扩展,因为逻辑卷已在并行 LV 中的相同偏移处分配给了一个并行 LV(即,不同的条带或 raid 镜像)。 -
如果有足够的空闲扩展满足分配请求,但
normal
分配策略不使用它们,则anywhere
分配策略将使用它们,即使将两个条带放在同一 PV 上会降低性能。
您可以使用 vgchange
命令更改分配策略。
未来的更新可能会根据定义的分配策略在布局行为中引入代码更改。例如:如果您在命令行中提供两个空物理卷,它们有相同数量的可用物理扩展可用于分配,LVM 当前会以它们列出的顺序处理它们,但不保证在将来的版本中这个行为不会有变化。如果您需要特定 LV 的具体布局,请通过 lvcreate
和 lvconvert
步骤序列构建它,以便应用到每个步骤的分配策略不会让 LVM 自行决定布局。
11.3. 防止在物理卷中分配 复制链接链接已复制到粘贴板!
您可以使用 pvchange
命令防止在一个或多个物理卷的空闲空间上分配物理扩展。如果有磁盘错误或者要删除物理卷,这可能是必要的。
流程
使用以下命令禁止在
device_name
上分配物理扩展:pvchange -x n /dev/sdk1
# pvchange -x n /dev/sdk1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以使用
pvchange
命令的-xy
参数允许对之前禁止分配的设备进行分配。
第 12 章 使用标签对 LVM 对象进行分组 复制链接链接已复制到粘贴板!
您可以向逻辑卷管理器(LVM)对象分配标签来对它们进行分组。使用这个功能,您可以按组对 LVM 行为(如激活)进行自动控制,比如激活。您还可以使用标签而不是 LVM 对象参数。
12.1. LVM 对象标签 复制链接链接已复制到粘贴板!
逻辑卷管理器(LVM)标签将同一类型的 LVM 对象进行分组。您可以将标签附加到对象,如物理卷、卷组和逻辑卷。
为避免歧义,请在每个标签前面加上 @
前缀。通过将其替换为拥有该标签的所有对象,并且该标签是命令行上其位置所期望的类型来扩展每个标签。
LVM 标签是最多 1024 个字符的字符串。LVM 标签不能以连字符开头。
有效的标签仅由有限的字符范围组成。允许的字符是 A-Z a-z 0-9 _ + . - / = ! : # &
amp; .
只能标记卷组中的对象。如果从卷组中移除了标签,则物理卷会丢失标签;这是因为标签作为卷组元数据的一部分存储,并在物理卷被删除时删除。
您可以将一些命令应用到具有相同标签的所有卷组(VG)、逻辑卷(LV)或物理卷(PV)。给定命令的手册页显示语法,如 VG|Tag
、LV|Tag
或 PV|Tag
,当您可以替换 VG、LV 或 PV 名称的标签名称时。
12.2. 向 LVM 对象添加标签 复制链接链接已复制到粘贴板!
您可以使用 --addtag
选项和各种卷管理命令向 LVM 对象添加标签来对它们进行分组。
先决条件
-
已安装
lvm2
软件包。
流程
要向现有的 PV 添加标签,请使用:
pvchange --addtag <@tag> <PV>
# pvchange --addtag <@tag> <PV>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要向现有的 VG 添加标签,请使用:
vgchange --addtag <@tag> <VG>
# vgchange --addtag <@tag> <VG>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在创建过程中向 VG 添加标签,请使用:
vgcreate --addtag <@tag> <VG>
# vgcreate --addtag <@tag> <VG>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要向现有的 LV 添加标签,请使用:
lvchange --addtag <@tag> <LV>
# lvchange --addtag <@tag> <LV>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要在创建过程中向 LV 添加标签,请使用:
lvcreate --addtag <@tag> ...
# lvcreate --addtag <@tag> ...
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.3. 从 LVM 对象中删除标签 复制链接链接已复制到粘贴板!
如果您不再希望保留 LVM 对象分组,您可以使用 --deltag
选项和各种卷管理命令从对象中删除标签。
先决条件
-
lvm2
软件包已安装。 - 您已在物理卷(PV)、卷组(VG)或逻辑卷(LV)上创建了标签。
流程
要从现有的 PV 中删除标签,请使用:
pvchange --deltag @tag PV
# pvchange --deltag @tag PV
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从现有的 VG 中删除标签,请使用:
vgchange --deltag @tag VG
# vgchange --deltag @tag VG
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要从现有的 LV 中删除标签,请使用:
lvchange --deltag @tag LV
# lvchange --deltag @tag LV
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.4. 显示 LVM 对象上的标签 复制链接链接已复制到粘贴板!
您可以使用以下命令显示 LVM 对象上的标签。
先决条件
-
lvm2
软件包已安装。 - 您已在物理卷(PV)、卷组(VG)或逻辑卷(LV)上创建了标签。
流程
要显示现有 PV 上的所有标签,请使用:
pvs -o tags <PV>
# pvs -o tags <PV>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要显示现有 VG 上的所有标签,请使用:
vgs -o tags <VG>
# vgs -o tags <VG>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要显示现有 LV 上的所有标签,请使用:
lvs -o tags <LV>
# lvs -o tags <LV>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
12.5. 使用标签控制逻辑卷激活 复制链接链接已复制到粘贴板!
这个步骤描述了如何在该主机上激活特定逻辑卷的配置文件中指定。
流程
例如,以下条目充当激活请求的过滤器(如 vgchange -ay
),仅激活 vg1/lvol0
以及具有该主机上元数据中的 数据库
标签的任何逻辑卷或卷组:
activation { volume_list = ["vg1/lvol0", "@database" ] }
activation { volume_list = ["vg1/lvol0", "@database" ] }
特殊匹配 @*
,仅当任何元数据标签匹配该机器上的任何主机标签时才使匹配。
另外,请考虑集群中每台机器在配置文件中有以下条目的情况:
tags { hosttags = 1 }
tags { hosttags = 1 }
如果您想仅在主机 db2
上激活 vg1/lvol2
,请执行以下操作:
-
从集群中的任何主机运行
lvchange --addtag @db2 vg1/lvol2
。 -
运行
lvchange -ay vg1/lvol2
。
这个解决方案涉及将主机名存储在卷组元数据中。
第 13 章 LVM 故障排除 复制链接链接已复制到粘贴板!
您可以使用逻辑卷管理器(LVM)工具排除 LVM 卷和组群中的各种问题。
13.1. 在 LVM 中收集诊断数据 复制链接链接已复制到粘贴板!
如果 LVM 命令没有按预期工作,您可以使用以下方法收集诊断信息。
流程
使用以下方法收集不同类型的诊断数据:
-
向任何 LVM 命令添加
-v
参数,以提高命令输出的详细程度。添加更多的v
会进一步增加输出的详细程度。最多允许 4 个这样的v
,例如-vvvv
。 -
在
/etc/lvm/lvm.conf
配置文件的log
部分中,增加level
选项的值。这会导致 LVM 在系统日志中提供更多详情。 如果问题与逻辑卷激活有关,请启用 LVM 在激活过程中记录信息:
-
在
/etc/lvm/lvm.conf
配置文件的log
部分中设置activation = 1
选项。 -
使用
-vvvv
选项执行 LVM 命令。 - 检查命令输出。
将
activation
选项重置为0
。如果您没有将选项重置为
0
,则系统在内存不足时可能会变得无响应。
-
在
为诊断显示信息转储:
lvmdump
# lvmdump
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示附加系统信息:
lvs -v
# lvs -v
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pvs --all
# pvs --all
Copy to Clipboard Copied! Toggle word wrap Toggle overflow dmsetup info --columns
# dmsetup info --columns
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查
/etc/lvm/backup/
目录中的最后一个 LVM 元数据备份,并在/etc/lvm/archive/
目录中检查存档版本。 检查当前的配置信息:
lvmconfig
# lvmconfig
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查
/run/lvm/hints
缓存文件以获取哪些设备上具有物理卷的记录。
-
向任何 LVM 命令添加
13.2. 显示有关失败的 LVM 设备的信息 复制链接链接已复制到粘贴板!
有关失败逻辑卷管理器(LVM)卷的故障排除信息可帮助您确定失败的原因。您可以检查以下最常见的 LVM 卷失败的示例。
例 13.1. 失败的卷组
在本例中,组成卷组 myvg 的设备之一失败。卷组可用性取决于故障类型。例如,如果还涉及到 RAID 卷,卷组仍可用。您还可以查看有关失败的设备的信息。
例 13.2. 逻辑卷失败
在这个示例中,其中一个设备失败了。这可能是卷组中逻辑卷失败的原因。命令输出显示失败的逻辑卷。
例 13.3. 失败的 RAID 逻辑卷的镜像
下面的例子显示 RAID 逻辑卷的镜像失败时,pvs
和 lvs
工具的命令输出。逻辑卷仍然可用。
13.3. 从卷组中删除丢失的 LVM 物理卷 复制链接链接已复制到粘贴板!
如果物理卷失败,您可以激活卷组中剩余的物理卷,并从卷组中删除所有使用该物理卷的逻辑卷。
流程
激活卷组中剩余的物理卷:
vgchange --activate y --partial myvg
# vgchange --activate y --partial myvg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查要删除哪些逻辑卷:
vgreduce --removemissing --test myvg
# vgreduce --removemissing --test myvg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从卷组中删除所有使用丢失的物理卷的逻辑卷:
vgreduce --removemissing --force myvg
# vgreduce --removemissing --force myvg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您意外删除要保留的逻辑卷,您可以撤销
vgreduce
操作:vgcfgrestore myvg
# vgcfgrestore myvg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 警告如果您删除了精简池,LVM 无法撤销操作。
13.4. 查找丢失的 LVM 物理卷的元数据 复制链接链接已复制到粘贴板!
如果意外覆盖或者破坏了卷组物理卷元数据区域,您会得到出错信息表示元数据区域不正确,或者系统无法使用特定的 UUID 找到物理卷。
这个过程找到丢失或者损坏的物理卷的最新归档元数据。
流程
查找包含物理卷的卷组元数据文件。归档的元数据文件位于
/etc/lvm/archive/volume-group-name_backup-number.vg
路径中:cat /etc/lvm/archive/myvg_00000-1248998876.vg
# cat /etc/lvm/archive/myvg_00000-1248998876.vg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用备份号替换 00000-1248998876。选择该卷组最高数字最后已知的有效元数据文件。
找到物理卷的 UUID。使用以下任一方法。
列出逻辑卷:
lvs --all --options +devices
# lvs --all --options +devices Couldn't find device with uuid 'FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk'.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
检查归档的元数据文件。在卷组配置的
physical_volumes
部分中,查找标记为id =
的 UUID。 使用
--partial
选项取消激活卷组:Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.5. 在 LVM 物理卷中恢复元数据 复制链接链接已复制到粘贴板!
这个过程恢复被损坏或者替换为新设备的物理卷的元数据。您可以通过重写物理卷的元数据区域从物理卷中恢复数据。
不要在正常的 LVM 逻辑卷中尝试这个步骤。如果您指定了不正确的 UUID,将会丢失您的数据。
先决条件
- 您已找出丢失的物理卷的元数据。详情请查看查找缺少的 LVM 物理卷的元数据。
流程
恢复物理卷中的元数据:
pvcreate --uuid physical-volume-uuid \ --restorefile /etc/lvm/archive/volume-group-name_backup-number.vg \ block-device
# pvcreate --uuid physical-volume-uuid \ --restorefile /etc/lvm/archive/volume-group-name_backup-number.vg \ block-device
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意该命令只覆盖 LVM 元数据区域,不会影响现有的数据区域。
例 13.4. 在 /dev/vdb1上恢复物理卷
以下示例使用以下属性将
/dev/vdb1
设备标记为物理卷:-
FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk
的 UUID VG_00050.vg
中包含的元数据信息,它是卷组最新的好归档元数据。pvcreate --uuid "FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk" \ --restorefile /etc/lvm/archive/VG_00050.vg \ /dev/vdb1
# pvcreate --uuid "FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk" \ --restorefile /etc/lvm/archive/VG_00050.vg \ /dev/vdb1 ... Physical volume "/dev/vdb1" successfully created
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
恢复卷组的元数据:
vgcfgrestore myvg
# vgcfgrestore myvg Restored volume group myvg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 显示卷组中的逻辑卷:
lvs --all --options +devices myvg
# lvs --all --options +devices myvg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 逻辑卷目前不活跃。例如:
LV VG Attr LSize Origin Snap% Move Log Copy% Devices mylv myvg -wi--- 300.00G /dev/vdb1 (0),/dev/vdb1(0) mylv myvg -wi--- 300.00G /dev/vdb1 (34728),/dev/vdb1(0)
LV VG Attr LSize Origin Snap% Move Log Copy% Devices mylv myvg -wi--- 300.00G /dev/vdb1 (0),/dev/vdb1(0) mylv myvg -wi--- 300.00G /dev/vdb1 (34728),/dev/vdb1(0)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果逻辑卷的片段类型是 RAID,则重新同步逻辑卷:
lvchange --resync myvg/mylv
# lvchange --resync myvg/mylv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 激活逻辑卷:
lvchange --activate y myvg/mylv
# lvchange --activate y myvg/mylv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果磁盘中的 LVM 元数据至少使用了覆盖其数据的空间,这个过程可以恢复物理卷。如果覆盖元数据的数据超过了元数据区域,则该卷中的数据可能会受到影响。您可能能够使用
fsck
命令恢复这些数据。
验证
显示活跃逻辑卷:
lvs --all --options +devices
# lvs --all --options +devices LV VG Attr LSize Origin Snap% Move Log Copy% Devices mylv myvg -wi--- 300.00G /dev/vdb1 (0),/dev/vdb1(0) mylv myvg -wi--- 300.00G /dev/vdb1 (34728),/dev/vdb1(0)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.6. LVM 输出中的轮询错误 复制链接链接已复制到粘贴板!
LVM 命令报告卷组中的空间使用情况,将报告的编号舍入到 2
个十进制位置,以提供人类可读的输出。这包括 vgdisplay
和 vgs
实用程序。
因此,报告的剩余空间值可能大于卷组中物理扩展提供的内容。如果您试图根据报告可用空间的大小创建逻辑卷,则可能会遇到以下错误:
Insufficient free extents
Insufficient free extents
要临时解决这个问题,您必须检查卷组中可用物理扩展的数量,即可用空间的具体值。然后您可以使用扩展数目成功创建逻辑卷。
13.7. 防止创建 LVM 卷时出现循环错误 复制链接链接已复制到粘贴板!
在创建 LVM 逻辑卷时,您可以指定逻辑卷的逻辑扩展数目以避免循环错误。
流程
在卷组中找到可用物理扩展数目:
vgdisplay myvg
# vgdisplay myvg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 13.5. 卷组中可用扩展
例如:以下卷组有 8780 可用物理扩展:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建逻辑卷。以扩展而不是字节为单位输入卷大小。
例 13.6. 通过指定扩展数目来创建逻辑卷
lvcreate --extents 8780 --name mylv myvg
# lvcreate --extents 8780 --name mylv myvg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 13.7. 创建逻辑卷以占据所有剩余空间
另外,您可以扩展逻辑卷使其使用卷组中剩余的可用空间的比例。例如:
lvcreate --extents 100%FREE --name mylv myvg
# lvcreate --extents 100%FREE --name mylv myvg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
检查卷组现在使用的扩展数目:
vgs --options +vg_free_count,vg_extent_count
# vgs --options +vg_free_count,vg_extent_count VG #PV #LV #SN Attr VSize VFree Free #Ext myvg 2 1 0 wz--n- 34.30G 0 0 8780
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.8. LVM 元数据及其在磁盘上的位置 复制链接链接已复制到粘贴板!
提供不同偏移和大小的 LVM 标头和元数据区域。
默认的 LVM 磁盘标头:
-
可在
label_header
和pv_header
结构中找到。 - 在磁盘的第二个 512 字节扇区中。请注意,如果在创建物理卷(PV)时没有指定默认位置,则标头也可以在第一个或第三个扇区中。
标准的 LVM 元数据区域:
- 从磁盘开始的头 4096 个字节。
- 从磁盘开始的最后 1 MiB。
-
从包含
mda_header
结构的 512 字节扇区开始。
元数据文本区域从 mda_header
扇区之后开始,一直到元数据区域的末尾。LVM VG 元数据文本以循环方式写入元数据文本区域中。mda_header
指向文本区域中最新 VG 元数据的位置。
您可以使用 # pvck --dump headers /dev/sda
命令打印磁盘中的 LVM 标头。此命令打印 label_header
、pv_header
、mda_header
以及元数据文本的位置(如果发现的话)。错误字段使用 CHECK
前缀打印。
LVM 元数据区偏移将匹配创建 PV 的机器的页大小,因此元数据区域也可以从磁盘开始的 8K、16K 或 64K 开始。
在创建 PV 时可以指定较大或较小的元数据区域,在这种情况下,元数据区域可能不在 1 MiB 处结束。pv_header
指定元数据区域的大小。
在创建 PV 时,可选择在磁盘末尾处启用第二个元数据区域。pv_header
包含元数据区域的位置。
13.9. 从磁盘中提取 VG 元数据 复制链接链接已复制到粘贴板!
根据您的情况,选择以下流程之一,来从磁盘中提取 VG 元数据。有关如何保存提取的元数据的详情,请参考 将提取的元数据保存在文件中。
要进行修复,您可以使用 /etc/lvm/backup/
中的备份文件,而无需从磁盘中提取元数据。
流程
打印有效的
mda_header
中提到的当前元数据文本:pvck --dump metadata <disk>
# pvck --dump metadata <disk>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 13.8. 有效的
mda_header
中的元数据文本pvck --dump metadata /dev/sdb
# pvck --dump metadata /dev/sdb metadata text at 172032 crc Oxc627522f # vgname test segno 59 --- <raw metadata from disk> ---
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 根据找到的有效的
mda_header
,打印元数据区域中找到的所有元数据副本的位置:pvck --dump metadata_all <disk>
# pvck --dump metadata_all <disk>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 13.9. 元数据区域中元数据副本的位置
pvck --dump metadata_all /dev/sdb
# pvck --dump metadata_all /dev/sdb metadata at 4608 length 815 crc 29fcd7ab vg test seqno 1 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv metadata at 5632 length 1144 crc 50ea61c3 vg test seqno 2 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv metadata at 7168 length 1450 crc 5652ea55 vg test seqno 3 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 搜索元数据区域中所有的元数据副本,而不使用
mda_header
,例如,如果标头丢失或损坏:pvck --dump metadata_search <disk>
# pvck --dump metadata_search <disk>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 13.10. 不使用
mda_header
的元数据区域中的元数据副本pvck --dump metadata_search /dev/sdb
# pvck --dump metadata_search /dev/sdb Searching for metadata at offset 4096 size 1044480 metadata at 4608 length 815 crc 29fcd7ab vg test seqno 1 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv metadata at 5632 length 1144 crc 50ea61c3 vg test seqno 2 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv metadata at 7168 length 1450 crc 5652ea55 vg test seqno 3 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在
dump
命令中包含-v
选项,以显示每个元数据副本的描述:pvck --dump metadata -v <disk>
# pvck --dump metadata -v <disk>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 13.11. 显示元数据的每个副本的描述
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
此文件可用于修复。默认情况下,第一个元数据区域用于转储元数据。如果磁盘在磁盘末尾处有第二个元数据区域,则您可以使用 --settings "mda_num=2"
选项来将第二个元数据区域用于转储元数据。
13.10. 将提取的元数据保存到文件中 复制链接链接已复制到粘贴板!
如果您需要使用转储的元数据进行修复,则需要使用 -f
选项和 --setings
选项将提取的元数据保存到文件中。
流程
-
如果将
-f <filename>
添加到--dump metadata
中,则原始元数据被写入到指定的文件中。您可以使用此文件进行修复。 -
如果将
-f <filename>
添加到--dump metadata_all
或--dump metadata_search
中,则所有位置的原始元数据都被写入到指定的文件中。 要保存
--dump metadata_all|metadata_search
add--settings "metadata_offset=<offset>"
中的一个元数据文本的实例,其中<offset>
来自列表输出 "metadata at <offset>"。例 13.12. 命令的输出
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以恢复损坏的或者使用新设备替换的物理卷上的元数据和标头。您可以通过重写物理卷的元数据区域从物理卷中恢复数据。
这些指令应当谨慎使用,只有在您熟悉每个命令的含义、卷的当前布局、您需要实现的布局以及备份元数据文件的内容时才应使用。这些命令可能会损坏数据,因此建议您联系红帽全球支持服务来帮助进行故障排除。
先决条件
- 您已找出丢失的物理卷的元数据。详情请查看查找缺少的 LVM 物理卷的元数据。
流程
收集
pvcreate
和vgcfgrestore
命令需要的以下信息。您可以通过运行# pvs -o+uuid
命令收集有关磁盘和 UUID 的信息。-
metadata-file 是 VG 的最新元数据备份文件的路径,例如:
/etc/lvm/backup/<vg-name>
- VG-name 是有损坏或缺失 PV 的 VG 的名称。
-
此设备上损坏的 PV 的 UUID 是从
# pvs -i+uuid
命令的输出中获得的值。 -
disk 是 PV 所在磁盘的名称,例如
/dev/sdb
。请注意,这是正确的磁盘,或寻求帮助,否则以下这些步骤可能导致数据丢失。
-
metadata-file 是 VG 的最新元数据备份文件的路径,例如:
在磁盘上重新创建 LVM 标头:
pvcreate --restorefile <metadata-file> --uuid <UUID> <disk>
# pvcreate --restorefile <metadata-file> --uuid <UUID> <disk>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)验证标头是否有效:
pvck --dump headers <disk>
# pvck --dump headers <disk>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 恢复磁盘上的 VG 元数据:
vgcfgrestore --file <metadata-file> <vg-name>
# vgcfgrestore --file <metadata-file> <vg-name>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)验证元数据是否已恢复:
pvck --dump metadata <disk>
# pvck --dump metadata <disk>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
如果没有 VG 的元数据备份文件,您可以使用 将提取的元数据保存到文件 中的流程来获得。
验证
要验证新物理卷是否完整,且卷组是否正常工作,请检查以下命令的输出:
vgs
# vgs
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.12. 使用 pvck 命令修复带有损坏的 LVM 标头和元数据的磁盘 复制链接链接已复制到粘贴板!
这是 使用 pvcreate 和 vgcfgrestore 命令修复带有损坏的 LVM 标头和元数据的磁盘 的替代方法。有些情况下,pvcreate
和 vgcfgrestore
命令可能无法正常工作。这个方法更针对损坏的磁盘。
此方法使用 pvck --dump
提取的元数据输入文件,或者 /etc/lvm/backup
中的备份文件。在可能的情况下,使用 pvck --dump
从同一 VG 中的其他 PV 中保存的元数据,或者从 PV 上的第二个元数据区域中保存的元数据。如需更多信息,请参阅 将提取的元数据保存到文件中。
流程
修复磁盘上的标头和元数据:
pvck --repair -f <metadata-file> <disk>
# pvck --repair -f <metadata-file> <disk>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 其中
-
<metadata-file> 是包含 VG 的最新元数据的文件。这可以是
/etc/lvm/backup/vg-name
,也可以是包含pvck --dump metadata_search
命令输出中的原始元数据文本的文件。 -
<disk> 是 PV 所在的磁盘的名称,例如
/dev/sdb
。要防止数据丢失,请验证是否为正确的磁盘。如果您不确定磁盘是否正确,请联系红帽支持团队。
-
<metadata-file> 是包含 VG 的最新元数据的文件。这可以是
如果元数据文件是一个备份文件,则 pvck --repair
应在 VG 中保存元数据的每个 PV 上运行。如果元数据文件是从另一个 PV 中提取的原始元数据,则仅需要在损坏的 PV 上运行 pvck --repair
。
验证
要检查新物理卷是否完整,且卷组是否工作正常,请检查以下命令的输出:
vgs <vgname>
# vgs <vgname>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow pvs <pvname>
# pvs <pvname>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow lvs <lvname>
# lvs <lvname>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.13. LVM RAID 故障排除 复制链接链接已复制到粘贴板!
您可以对 LVM RAID 设备中的多个问题进行故障排除,修正数据错误、恢复设备或者替换失败的设备。
13.13.1. 检查 RAID 逻辑卷中数据的一致性 复制链接链接已复制到粘贴板!
LVM 提供对 RAID 逻辑卷的清理支持。RAID 清理是读取阵列中的所有数据和奇偶校验块的过程,并检查它们是否是分配的。lvchange --syncaction repair
命令对阵列启动后台同步操作。
流程
可选:通过设置以下选项之一来控制 RAID 逻辑卷初始化的速率:
-
--maxrecoveryrate Rate[bBsSkKmMgG]
为 RAID 逻辑卷设置最大恢复率,使其不会驱逐正常的 I/O 操作。 --minrecoveryrate Rate[bBsSkKmMgG]
设置 RAID 逻辑卷的最小恢复率,以确保 sync 操作的 I/O 达到最小吞吐量,即使存在大量标准 I/O 时lvchange --maxrecoveryrate 4K my_vg/my_lv
# lvchange --maxrecoveryrate 4K my_vg/my_lv Logical volume _my_vg/my_lv_changed.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用恢复率值替换 4K,它是阵列中每个设备的每秒的量。如果没有后缀,选项会假定为 kiB/每秒/每个设备。
lvchange --syncaction repair my_vg/my_lv
# lvchange --syncaction repair my_vg/my_lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当您执行 RAID 清理操作时,
sync
操作所需的后台 I/O 可能会将其他 I/O 分离到 LVM 设备,如对卷组元数据的更新。这可能导致其它 LVM 操作速度下降。注意您还可以在创建 RAID 设备时使用这些最大和最小 I/O 速率。例如,
lvcreate --type raid10 -i 2 -m 1 -L 10G --maxrecoveryrate 128 -n my_lv my_vg
创建一个双向 RAID10 阵列 my_lv,它在卷组 my_vg 中,有大小为 10G,最大恢复率为 128 kiB/sec/device 的 3 个条带。
-
显示阵列中未修复的差异的数量,没有修复它们:
lvchange --syncaction check my_vg/my_lv
# lvchange --syncaction check my_vg/my_lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 此命令对阵列启动后台同步操作。
-
可选:查看
var/log/syslog
文件以了解内核消息。 修正阵列中的差异:
lvchange --syncaction repair my_vg/my_lv
# lvchange --syncaction repair my_vg/my_lv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 这个命令修复或者替换 RAID 逻辑卷中失败的设备。您可以在执行此命令后查看
var/log/syslog
文件以了解内核消息。
验证
显示有关清理操作的信息:
lvs -o +raid_sync_action,raid_mismatch_count my_vg/my_lv
# lvs -o +raid_sync_action,raid_mismatch_count my_vg/my_lv LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert SyncAction Mismatches my_lv my_vg rwi-a-r--- 500.00m 100.00 idle 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.13.2. 在逻辑卷中替换失败的 RAID 设备 复制链接链接已复制到粘贴板!
RAID 与传统的 LVM 镜像不同。如果是 LVM 镜像,请删除失败的设备。否则,当 RAID 阵列继续使用失败的设备运行时,镜像逻辑卷将挂起。对于 RAID1 以外的 RAID 级别,删除设备意味着转换到较低的 RAID 级别,例如从 RAID6 转换到 RAID5,或者从 RAID4 或 RAID5 转换到 RAID0。
您可以使用 lvconvert
命令的 --repair
参数替换 RAID 逻辑卷中作为物理卷的故障设备,而不是删除失败的设备并分配一个替换设备。
先决条件
卷组包含一个物理卷,它有足够的可用容量替换失败的设备。
如果卷组中没有足够空闲扩展的物理卷,请使用
vgextend
工具添加一个新的、足够大的物理卷。
流程
查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 /dev/sdc 设备失败后查看 RAID 逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换失败的设备:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:手动指定替换失败设备的物理卷:
lvconvert --repair my_vg/my_lv replacement_pv
# lvconvert --repair my_vg/my_lv replacement_pv
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用替换检查逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在您从卷组中删除失败的设备前,LVM 工具仍然指示 LVM 无法找到失败的设备。
从卷组中删除失败的设备:
vgreduce --removemissing my_vg
# vgreduce --removemissing my_vg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
删除失败的设备后查看可用的物理卷:
pvscan
# pvscan PV /dev/sde1 VG rhel_virt-506 lvm2 [<7.00 GiB / 0 free] PV /dev/sdb1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free] PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free] PV /dev/sdd1 VG my_vg lvm2 [<60.00 GiB / 59.50 GiB free]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在替换失败的设备后检查逻辑卷:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
13.14. 对多路径 LVM 设备进行重复的物理卷警告进行故障排除 复制链接链接已复制到粘贴板!
当将 LVM 与多路径存储搭配使用时,列出卷组或者逻辑卷的 LVM 命令可能会显示如下信息:
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/dm-5 not /dev/sdd Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/emcpowerb not /dev/sde Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/sddlmab not /dev/sdf
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/dm-5 not /dev/sdd
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/emcpowerb not /dev/sde
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/sddlmab not /dev/sdf
您可以排除这些警告来了解 LVM 显示它们的原因,或者隐藏警告信息。
13.14.1. 重复 PV 警告的根本原因 复制链接链接已复制到粘贴板!
当设备映射器多路径(DM 多路径)、EMC PowerPath 或 Hitachi Dynamic Link Manager (HDLM)等多路径软件管理系统上的存储设备时,每个路径都会作为不同的 SCSI 设备注册。
然后多路径软件会创建一个映射到这些独立路径的新设备。因为每个 LUN 在 /dev
目录中有多个指向同一底层数据的设备节点,所以所有设备节点都包含相同的 LVM 元数据。
多路径软件 | 到 LUN 的 SCSI 路径 | 多路径设备映射到路径 |
---|---|---|
DM Multipath |
|
|
EMC PowerPath |
| |
HDLM |
|
由于多个设备节点,LVM 工具会多次查找相同的元数据,并将其作为重复报告。
13.14.2. 重复 PV 警告的情况 复制链接链接已复制到粘贴板!
LVM 在以下任一情况下显示重复的 PV 警告:
- 指向同一设备的单路径
输出中显示的两个设备都是指向同一设备的单一路径。
以下示例显示一个重复的 PV 警告,在该示例中重复的设备是同一设备的单一路径。
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/sdd not /dev/sdf
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/sdd not /dev/sdf
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用
multipath -ll
命令列出当前的 DM 多路径拓扑,您可以在相同的多路径映射中找到/dev/sdd
和/dev/sdf
。这些重复的信息只是警告,并不意味着 LVM 操作失败。相反,它们会提醒您 LVM 只使用其中一个设备作为物理卷,并忽略其它设备。
如果消息表示 LVM 选择了不正确的设备,或者警告是否对用户造成破坏,您可以应用过滤器。过滤器将 LVM 配置为只搜索物理卷所需的设备,并将任何基本路径留给多路径设备。因此,不再会出现警告。
- 多路径映射
输出中显示的两个设备都是多路径映射。
以下示例显示两个设备都有重复的 PV 警告,它们是多路径映射。重复的物理卷位于两个不同的设备中,而不是位于同一设备的两个不同路径中。
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/mapper/mpatha not /dev/mapper/mpathc Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/emcpowera not /dev/emcpowerh
Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/mapper/mpatha not /dev/mapper/mpathc Found duplicate PV GDjTZf7Y03GJHjteqOwrye2dcSCjdaUi: using /dev/emcpowera not /dev/emcpowerh
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于同一设备上的单一路径的设备来说,这种情形比重复的警告更为严重。这些警告通常意味着机器正在访问它不应该访问的设备:例如: LUN 克隆或镜像(mirror)。
除非您明确知道您应该从机器中删除哪些设备,否则这个情况可能无法恢复。红帽建议联系红帽技术支持来解决这个问题。
13.14.3. 防止重复 PV 警告的 LVM 设备过滤器示例 复制链接链接已复制到粘贴板!
以下示例显示 LVM 设备过滤器,它避免了由单一逻辑单元(LUN)由多个存储路径导致的重复物理卷警告。
您可以为逻辑卷管理器(LVM)配置过滤器来检查所有设备的元数据。元数据包括上面包含根卷组的本地硬盘,以及任何多路径设备。通过拒绝多路径设备的底层路径(如 /dev/sdb
、/dev/sdd
),您可以避免这些重复的 PV 警告,因为 LVM 在多路径设备上一次只查找一个唯一的元数据区域。
要接受第一个硬盘上的第二个分区以及任何设备映射器(DM)多路径设备,并拒绝任何其他分区,请输入:
filter = [ "a|/dev/sda2$|", "a|/dev/mapper/mpath.*|", "r|.*|" ]
filter = [ "a|/dev/sda2$|", "a|/dev/mapper/mpath.*|", "r|.*|" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要接受所有 HP SmartArray 控制器和任何 EMC PowerPath 设备,请输入:
filter = [ "a|/dev/cciss/.*|", "a|/dev/emcpower.*|", "r|.*|" ]
filter = [ "a|/dev/cciss/.*|", "a|/dev/emcpower.*|", "r|.*|" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要接受第一个 IDE 驱动器上的任何分区以及任何多路径设备,请输入:
filter = [ "a|/dev/hda.*|", "a|/dev/mapper/mpath.*|", "r|.*|" ]
filter = [ "a|/dev/hda.*|", "a|/dev/mapper/mpath.*|", "r|.*|" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow