67.14. LVM 故障排除
您可以使用逻辑卷管理器(LVM)工具来排除 LVM 卷和组群中的各种问题。
67.14.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 命令添加
67.14.2. 显示有关失败的 LVM 设备的信息 复制链接链接已复制到粘贴板!
有关失败的逻辑卷管理器(LVM)卷的故障排除信息可帮助您确定失败的原因。您可以检查以下最常见 LVM 卷失败的示例。
例 67.15. 失败的卷组
在本例中,组成卷组 myvg 的设备之一失败。然后卷组可用性取决于故障类型。例如,如果涉及到 RAID 卷,卷组仍可用。您还可以查看有关失败的设备的信息。
例 67.16. 逻辑卷失败
在这个示例中,其中一个设备失败了。这可能是卷组中逻辑卷失败的原因。命令输出显示失败的逻辑卷。
例 67.17. RAID 逻辑卷的失败的镜像
下面的例子显示了 RAID 逻辑卷的镜像失败时,pvs
和 lvs
工具的命令输出。逻辑卷仍可使用。
67.14.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 无法撤销操作。
67.14.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
67.14.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 元数据区域,不会影响现有的数据区域。
例 67.18. 在 /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
67.14.6. LVM 输出中的轮询错误 复制链接链接已复制到粘贴板!
LVM 命令报告卷组中的空间使用情况,将报告的编号舍入到 2
个十进制位置,以提供人类可读的输出。这包括 vgdisplay
和 vgs
实用程序。
因此,报告的剩余空间值可能大于卷组中物理扩展提供的内容。如果您试图根据报告可用空间的大小创建逻辑卷,则可能会遇到以下错误:
Insufficient free extents
Insufficient free extents
要临时解决这个问题,您必须检查卷组中可用物理扩展的数量,即可用空间的具体值。然后您可以使用扩展数目成功创建逻辑卷。
67.14.7. 防止创建 LVM 卷时出现循环错误 复制链接链接已复制到粘贴板!
在创建 LVM 逻辑卷时,您可以指定逻辑卷的逻辑扩展数目以避免循环错误。
流程
在卷组中找到可用物理扩展数目:
vgdisplay myvg
# vgdisplay myvg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 67.19. 卷组中可用扩展
例如:以下卷组有 8780 可用物理扩展:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建逻辑卷。以扩展而不是字节为单位输入卷大小。
例 67.20. 通过指定扩展数目来创建逻辑卷
lvcreate --extents 8780 --name mylv myvg
# lvcreate --extents 8780 --name mylv myvg
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 例 67.21. 创建逻辑卷以占据所有剩余空间
另外,您可以扩展逻辑卷使其使用卷组中剩余的可用空间的比例。例如:
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
67.14.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
包含元数据区域的位置。
67.14.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 例 67.22. 有效的
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 例 67.23. 元数据区域中元数据副本的位置
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 例 67.24. 不使用
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 例 67.25. 显示元数据的每个副本的描述
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
此文件可用于修复。默认情况下,第一个元数据区域用于转储元数据。如果磁盘在磁盘末尾处有第二个元数据区域,则您可以使用 --settings "mda_num=2"
选项来将第二个元数据区域用于转储元数据。
67.14.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>"。例 67.26. 命令的输出
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
67.14.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
67.14.13. LVM RAID 故障排除 复制链接链接已复制到粘贴板!
您可以对 LVM RAID 设备中的多个问题进行故障排除,修正数据错误、恢复设备或者替换失败的设备。
67.14.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 可能会排挤 LVM 设备的其它 I/O,如对卷组元数据的更新。这可能导致其它 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
67.14.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
67.14.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 显示它们的原因,或者隐藏警告信息。
67.14.14.1. 重复 PV 警告的根本原因 复制链接链接已复制到粘贴板!
当设备映射器多路径(DM 多路径)、EMC PowerPath 或 Hitachi Dynamic Link Manager (HDLM)等多路径软件管理系统上的存储设备时,每个路径都会作为不同的 SCSI 设备注册。
然后多路径软件会创建一个映射到这些独立路径的新设备。因为每个 LUN 在 /dev
目录中有多个指向同一底层数据的设备节点,所以所有设备节点都包含相同的 LVM 元数据。
多路径软件 | 到 LUN 的 SCSI 路径 | 多路径设备映射到路径 |
---|---|---|
DM Multipath |
|
|
EMC PowerPath |
| |
HDLM |
|
由于多个设备节点,LVM 工具会多次查找相同的元数据,并将其作为重复报告。
67.14.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)。
除非您明确知道您应该从机器中删除哪些设备,否则这个情况可能无法恢复。红帽建议联系红帽技术支持来解决这个问题。
67.14.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