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
显示附加系统信息:
# lvs -v
# pvs --all
# dmsetup info --columns
-
检查
/etc/lvm/backup/
目录中的最后一个 LVM 元数据备份,并在/etc/lvm/archive/
目录中检查存档版本。 检查当前的配置信息:
# lvmconfig
-
检查
/run/lvm/hints
缓存文件以获取哪些设备上具有物理卷的记录。
-
向任何 LVM 命令添加
其他资源
-
系统中
lvmdump (8)
手册页
67.14.2. 显示有关失败的 LVM 设备的信息
有关失败的逻辑卷管理器(LVM)卷的故障排除信息可帮助您确定失败的原因。您可以检查以下最常见 LVM 卷失败的示例。
例 67.15. 失败的卷组
在本例中,组成卷组 myvg 的设备之一失败。然后卷组可用性取决于故障类型。例如,如果涉及到 RAID 卷,卷组仍可用。您还可以查看有关失败的设备的信息。
# vgs --options +devices
/dev/vdb1: open failed: No such device or address
/dev/vdb1: open failed: No such device or address
WARNING: Couldn't find device with uuid 42B7bu-YCMp-CEVD-CmKH-2rk6-fiO9-z1lf4s.
WARNING: VG myvg is missing PV 42B7bu-YCMp-CEVD-CmKH-2rk6-fiO9-z1lf4s (last written to /dev/sdb1).
WARNING: Couldn't find all devices for LV myvg/mylv while checking used and assumed devices.
VG #PV #LV #SN Attr VSize VFree Devices
myvg 2 2 0 wz-pn- <3.64t <3.60t [unknown](0)
myvg 2 2 0 wz-pn- <3.64t <3.60t [unknown](5120),/dev/vdb1(0)
例 67.16. 逻辑卷失败
在这个示例中,其中一个设备失败了。这可能是卷组中逻辑卷失败的原因。命令输出显示失败的逻辑卷。
# lvs --all --options +devices
/dev/vdb1: open failed: No such device or address
/dev/vdb1: open failed: No such device or address
WARNING: Couldn't find device with uuid 42B7bu-YCMp-CEVD-CmKH-2rk6-fiO9-z1lf4s.
WARNING: VG myvg is missing PV 42B7bu-YCMp-CEVD-CmKH-2rk6-fiO9-z1lf4s (last written to /dev/sdb1).
WARNING: Couldn't find all devices for LV myvg/mylv while checking used and assumed devices.
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert Devices
mylv myvg -wi-a---p- 20.00g [unknown](0) [unknown](5120),/dev/sdc1(0)
例 67.17. RAID 逻辑卷的失败的镜像
下面的例子显示了 RAID 逻辑卷的镜像失败时,pvs
和 lvs
工具的命令输出。逻辑卷仍可使用。
# pvs
Error reading device /dev/sdc1 at 0 length 4.
Error reading device /dev/sdc1 at 4096 length 4.
Couldn't find device with uuid b2J8oD-vdjw-tGCA-ema3-iXob-Jc6M-TC07Rn.
WARNING: Couldn't find all devices for LV myvg/my_raid1_rimage_1 while checking used and assumed devices.
WARNING: Couldn't find all devices for LV myvg/my_raid1_rmeta_1 while checking used and assumed devices.
PV VG Fmt Attr PSize PFree
/dev/sda2 rhel_bp-01 lvm2 a-- <464.76g 4.00m
/dev/sdb1 myvg lvm2 a-- <836.69g 736.68g
/dev/sdd1 myvg lvm2 a-- <836.69g <836.69g
/dev/sde1 myvg lvm2 a-- <836.69g <836.69g
[unknown] myvg lvm2 a-m <836.69g 736.68g
# lvs -a --options name,vgname,attr,size,devices myvg
Couldn't find device with uuid b2J8oD-vdjw-tGCA-ema3-iXob-Jc6M-TC07Rn.
WARNING: Couldn't find all devices for LV myvg/my_raid1_rimage_1 while checking used and assumed devices.
WARNING: Couldn't find all devices for LV myvg/my_raid1_rmeta_1 while checking used and assumed devices.
LV VG Attr LSize Devices
my_raid1 myvg rwi-a-r-p- 100.00g my_raid1_rimage_0(0),my_raid1_rimage_1(0)
[my_raid1_rimage_0] myvg iwi-aor--- 100.00g /dev/sdb1(1)
[my_raid1_rimage_1] myvg Iwi-aor-p- 100.00g [unknown](1)
[my_raid1_rmeta_0] myvg ewi-aor--- 4.00m /dev/sdb1(0)
[my_raid1_rmeta_1] myvg ewi-aor-p- 4.00m [unknown](0)
67.14.3. 从卷组中删除丢失的 LVM 物理卷
如果物理卷失败,您可以激活卷组中剩余的物理卷,并从卷组中删除所有使用该物理卷的逻辑卷。
流程
激活卷组中剩余的物理卷:
# vgchange --activate y --partial myvg
检查要删除哪些逻辑卷:
# vgreduce --removemissing --test myvg
从卷组中删除所有使用丢失的物理卷的逻辑卷:
# vgreduce --removemissing --force myvg
可选:如果您意外删除要保留的逻辑卷,您可以撤销
vgreduce
操作:# vgcfgrestore myvg
警告如果您删除了精简池,LVM 无法撤销操作。
67.14.4. 查找丢失的 LVM 物理卷的元数据
如果意外覆盖或者破坏了卷组物理卷元数据区域,您会得到出错信息表示元数据区域不正确,或者系统无法使用特定的 UUID 找到物理卷。
这个过程找到丢失或者损坏的物理卷的最新归档元数据。
流程
查找包含物理卷的卷组元数据文件。归档的元数据文件位于
/etc/lvm/archive/volume-group-name_backup-number.vg
路径中:# cat /etc/lvm/archive/myvg_00000-1248998876.vg
使用备份号替换 00000-1248998876。选择该卷组最高数字最后已知的有效元数据文件。
找到物理卷的 UUID。使用以下任一方法。
列出逻辑卷:
# lvs --all --options +devices Couldn't find device with uuid 'FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk'.
-
检查归档的元数据文件。在卷组配置的
physical_volumes
部分中,查找标记为id =
的 UUID。 使用
--partial
选项取消激活卷组:# vgchange --activate n --partial myvg PARTIAL MODE. Incomplete logical volumes will be processed. WARNING: Couldn't find device with uuid 42B7bu-YCMp-CEVD-CmKH-2rk6-fiO9-z1lf4s. WARNING: VG myvg is missing PV 42B7bu-YCMp-CEVD-CmKH-2rk6-fiO9-z1lf4s (last written to /dev/vdb1). 0 logical volume(s) in volume group "myvg" now active
67.14.5. 在 LVM 物理卷中恢复元数据
这个过程恢复被损坏或者替换为新设备的物理卷的元数据。您可以通过重写物理卷的元数据区域从物理卷中恢复数据。
不要在正常的 LVM 逻辑卷中尝试这个步骤。如果您指定了不正确的 UUID,将会丢失您的数据。
先决条件
- 您已找出丢失的物理卷的元数据。详情请查看查找缺少的 LVM 物理卷的元数据。
流程
恢复物理卷中的元数据:
# pvcreate --uuid physical-volume-uuid \ --restorefile /etc/lvm/archive/volume-group-name_backup-number.vg \ block-device
注意该命令只覆盖 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 ... Physical volume "/dev/vdb1" successfully created
-
恢复卷组的元数据:
# vgcfgrestore myvg Restored volume group myvg
显示卷组中的逻辑卷:
# lvs --all --options +devices myvg
逻辑卷目前不活跃。例如:
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)
如果逻辑卷的片段类型是 RAID,则重新同步逻辑卷:
# lvchange --resync myvg/mylv
激活逻辑卷:
# lvchange --activate y myvg/mylv
-
如果磁盘中的 LVM 元数据至少使用了覆盖其数据的空间,这个过程可以恢复物理卷。如果覆盖元数据的数据超过了元数据区域,则该卷中的数据可能会受到影响。您可能能够使用
fsck
命令恢复这些数据。
验证
显示活跃逻辑卷:
# 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)
67.14.6. LVM 输出中的轮询错误
LVM 命令报告卷组中的空间使用情况,将报告的编号舍入到 2
个十进制位置,以提供人类可读的输出。这包括 vgdisplay
和 vgs
实用程序。
因此,报告的剩余空间值可能大于卷组中物理扩展提供的内容。如果您试图根据报告可用空间的大小创建逻辑卷,则可能会遇到以下错误:
Insufficient free extents
要临时解决这个问题,您必须检查卷组中可用物理扩展的数量,即可用空间的具体值。然后您可以使用扩展数目成功创建逻辑卷。
67.14.7. 防止创建 LVM 卷时出现循环错误
在创建 LVM 逻辑卷时,您可以指定逻辑卷的逻辑扩展数目以避免循环错误。
流程
在卷组中找到可用物理扩展数目:
# vgdisplay myvg
例 67.19. 卷组中可用扩展
例如:以下卷组有 8780 可用物理扩展:
--- Volume group --- VG Name myvg System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 6 VG Access read/write [...] Free PE / Size 8780 / 34.30 GB
创建逻辑卷。以扩展而不是字节为单位输入卷大小。
例 67.20. 通过指定扩展数目来创建逻辑卷
# lvcreate --extents 8780 --name mylv myvg
例 67.21. 创建逻辑卷以占据所有剩余空间
另外,您可以扩展逻辑卷使其使用卷组中剩余的可用空间的比例。例如:
# lvcreate --extents 100%FREE --name mylv myvg
验证
检查卷组现在使用的扩展数目:
# 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
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>
例 67.22. 有效的
mda_header
中的元数据文本# pvck --dump metadata /dev/sdb metadata text at 172032 crc Oxc627522f # vgname test segno 59 --- <raw metadata from disk> ---
根据找到的有效的
mda_header
,打印元数据区域中找到的所有元数据副本的位置:# pvck --dump metadata_all <disk>
例 67.23. 元数据区域中元数据副本的位置
# 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
搜索元数据区域中所有的元数据副本,而不使用
mda_header
,例如,如果标头丢失或损坏:# pvck --dump metadata_search <disk>
例 67.24. 不使用
mda_header
的元数据区域中的元数据副本# 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
在
dump
命令中包含-v
选项,以显示每个元数据副本的描述:# pvck --dump metadata -v <disk>
例 67.25. 显示元数据的每个副本的描述
# pvck --dump metadata -v /dev/sdb metadata text at 199680 crc 0x628cf243 # vgname my_vg seqno 40 --- my_vg { id = "dmEbPi-gsgx-VbvS-Uaia-HczM-iu32-Rb7iOf" seqno = 40 format = "lvm2" status = ["RESIZEABLE", "READ", "WRITE"] flags = [] extent_size = 8192 max_lv = 0 max_pv = 0 metadata_copies = 0 physical_volumes { pv0 { id = "8gn0is-Hj8p-njgs-NM19-wuL9-mcB3-kUDiOQ" device = "/dev/sda" device_id_type = "sys_wwid" device_id = "naa.6001405e635dbaab125476d88030a196" status = ["ALLOCATABLE"] flags = [] dev_size = 125829120 pe_start = 8192 pe_count = 15359 } pv1 { id = "E9qChJ-5ElL-HVEp-rc7d-U5Fg-fHxL-2QLyID" device = "/dev/sdb" device_id_type = "sys_wwid" device_id = "naa.6001405f3f9396fddcd4012a50029a90" status = ["ALLOCATABLE"] flags = [] dev_size = 125829120 pe_start = 8192 pe_count = 15359 }
此文件可用于修复。默认情况下,第一个元数据区域用于转储元数据。如果磁盘在磁盘末尾处有第二个元数据区域,则您可以使用 --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. 命令的输出
# pvck --dump metadata_search --settings metadata_offset=5632 -f meta.txt /dev/sdb Searching for metadata at offset 4096 size 1044480 metadata at 5632 length 1144 crc 50ea61c3 vg test seqno 2 id FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv # head -2 meta.txt test { id = "FaCsSz-1ZZn-mTO4-Xl4i-zb6G-BYat-u53Fxv"
67.14.11. 使用 pvcreate 和 vgcfgrestore 命令修复带有损坏的 LVM 标头和元数据的磁盘
您可以恢复损坏的或者使用新设备替换的物理卷上的元数据和标头。您可以通过重写物理卷的元数据区域从物理卷中恢复数据。
这些指令应当谨慎使用,只有在您熟悉每个命令的含义、卷的当前布局、您需要实现的布局以及备份元数据文件的内容时才应使用。这些命令可能会损坏数据,因此建议您联系红帽全球支持服务来帮助进行故障排除。
先决条件
- 您已找出丢失的物理卷的元数据。详情请查看查找缺少的 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>
(可选)验证标头是否有效:
# pvck --dump headers <disk>
恢复磁盘上的 VG 元数据:
# vgcfgrestore --file <metadata-file> <vg-name>
(可选)验证元数据是否已恢复:
# pvck --dump metadata <disk>
如果没有 VG 的元数据备份文件,您可以使用 将提取的元数据保存到文件 中的流程来获得。
验证
要验证新物理卷是否完整,且卷组是否正常工作,请检查以下命令的输出:
# vgs
其他资源
-
pvck (8)手册页
- 从物理卷中提取 LVM 元数据备份
- 如何在线修复物理卷上的元数据?(红帽知识库)
- 如果组成卷组的一个物理卷失败,如何在 Red Hat Enterprise Linux 上恢复卷组?(红帽知识库)
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>
其中
-
<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>
# pvs <pvname>
# lvs <lvname>
其他资源
-
pvck (8)手册页
- 从物理卷中提取 LVM 元数据备份。
- 如何在线修复物理卷上的元数据?(红帽知识库)
- 如果组成卷组的一个物理卷失败,如何在 Red Hat Enterprise Linux 上恢复卷组?(红帽知识库)
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 Logical volume _my_vg/my_lv_changed.
使用恢复率值替换 4K,它是阵列中每个设备的每秒数量。如果没有后缀,选项会假定为 kiB/每秒/每个设备。
# lvchange --syncaction repair my_vg/my_lv
当您执行 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。
-
显示阵列中未修复的差异的数量,没有修复它们:
# lvchange --syncaction check my_vg/my_lv
此命令对阵列启动后台同步操作。
-
可选:查看
var/log/syslog
文件以了解内核消息。 修正阵列中的差异:
# lvchange --syncaction repair my_vg/my_lv
这个命令修复或者替换 RAID 逻辑卷中失败的设备。您可以在执行此命令后,在
var/log/syslog
文件查看内核消息。
验证
显示有关清理操作的信息:
# 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
其他资源
-
系统中
lvchange (8)
和lvmraid (7)
手册页 - 最小和最大 I/O 速率选项
67.14.13.2. 在逻辑卷中替换失败的 RAID 设备
RAID 与传统的 LVM 镜像不同。如果是 LVM 镜像,请删除失败的设备。否则,当 RAID 阵列继续使用失败的设备运行时,镜像逻辑卷将挂起。对于 RAID1 以外的 RAID 级别,删除设备意味着转换到较低 RAID 级别,例如从 RAID6 转换到 RAID5,或者从 RAID4 或 RAID5 转换到 RAID0。
您可以使用 lvconvert
命令的 --repair
参数替换 RAID 逻辑卷中作为物理卷的故障设备,而不是删除失败的设备并分配一个替换品。
先决条件
卷组包含一个物理卷,它有足够的可用容量替换失败的设备。
如果卷组中没有有足够可用扩展的物理卷,请使用
vgextend
程序添加一个新的、足够大的物理卷。
流程
查看 RAID 逻辑卷:
# lvs --all --options name,copy_percent,devices my_vg LV Cpy%Sync Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sde1(1) [my_lv_rimage_1] /dev/sdc1(1) [my_lv_rimage_2] /dev/sdd1(1) [my_lv_rmeta_0] /dev/sde1(0) [my_lv_rmeta_1] /dev/sdc1(0) [my_lv_rmeta_2] /dev/sdd1(0)
在 /dev/sdc 设备失败后查看 RAID 逻辑卷:
# lvs --all --options name,copy_percent,devices my_vg /dev/sdc: open failed: No such device or address Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee. WARNING: Couldn't find all devices for LV my_vg/my_lv_rimage_1 while checking used and assumed devices. WARNING: Couldn't find all devices for LV my_vg/my_lv_rmeta_1 while checking used and assumed devices. LV Cpy%Sync Devices my_lv 100.00 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sde1(1) [my_lv_rimage_1] [unknown](1) [my_lv_rimage_2] /dev/sdd1(1) [my_lv_rmeta_0] /dev/sde1(0) [my_lv_rmeta_1] [unknown](0) [my_lv_rmeta_2] /dev/sdd1(0)
替换失败的设备:
# lvconvert --repair my_vg/my_lv /dev/sdc: open failed: No such device or address Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee. WARNING: Couldn't find all devices for LV my_vg/my_lv_rimage_1 while checking used and assumed devices. WARNING: Couldn't find all devices for LV my_vg/my_lv_rmeta_1 while checking used and assumed devices. Attempt to replace failed RAID images (requires full device resync)? [y/n]: y Faulty devices in my_vg/my_lv successfully replaced.
可选:手动指定替换失败设备的物理卷:
# lvconvert --repair my_vg/my_lv replacement_pv
使用替换检查逻辑卷:
# lvs --all --options name,copy_percent,devices my_vg /dev/sdc: open failed: No such device or address /dev/sdc1: open failed: No such device or address Couldn't find device with uuid A4kRl2-vIzA-uyCb-cci7-bOod-H5tX-IzH4Ee. LV Cpy%Sync Devices my_lv 43.79 my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sde1(1) [my_lv_rimage_1] /dev/sdb1(1) [my_lv_rimage_2] /dev/sdd1(1) [my_lv_rmeta_0] /dev/sde1(0) [my_lv_rmeta_1] /dev/sdb1(0) [my_lv_rmeta_2] /dev/sdd1(0)
在您从卷组中删除失败的设备前,LVM 工具仍然指示 LVM 无法找到失败的设备。
从卷组中删除失败的设备:
# vgreduce --removemissing my_vg
验证
删除失败的设备后查看可用的物理卷:
# 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]
替换失败的设备后检查逻辑卷:
# lvs --all --options name,copy_percent,devices my_vg my_lv_rimage_0(0),my_lv_rimage_1(0),my_lv_rimage_2(0) [my_lv_rimage_0] /dev/sde1(1) [my_lv_rimage_1] /dev/sdb1(1) [my_lv_rimage_2] /dev/sdd1(1) [my_lv_rmeta_0] /dev/sde1(0) [my_lv_rmeta_1] /dev/sdb1(0) [my_lv_rmeta_2] /dev/sdd1(0)
其他资源
-
系统中
lvconvert (8)
和vgreduce (8)
手册页
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
您可以排除这些警告来了解 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
如果您使用
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
对于同一设备上的单一路径的设备来说,这种情形比重复的警告更为严重。这些警告通常意味着机器正在访问它不应该访问的设备:例如: 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|.*|" ]
要接受所有 HP SmartArray 控制器和任何 EMC PowerPath 设备,请输入:
filter = [ "a|/dev/cciss/.*|", "a|/dev/emcpower.*|", "r|.*|" ]
要接受第一个 IDE 驱动器上的任何分区,以及任何多路径设备,请输入:
filter = [ "a|/dev/hda.*|", "a|/dev/mapper/mpath.*|", "r|.*|" ]
67.14.14.4. 其他资源
其他资源