asmcmd lsdsk无输出说明asm发现失败,需先用lsdsk -k验证内核路径一致性,再检查udev规则、asm_diskstring配置、节点间设备权限与wwid是否完全一致。

asmcmd lsdsk 无输出,说明 ASM 根本没扫描到设备
这不是磁盘损坏或路径不存在,而是 ASM 实例连设备文件都没列出来。所有后续操作(ALTER DISKGROUP MOUNT、CREATE DISKGROUP)都无效,必须先解决“发现”这一层。
运行 asmcmd lsdsk:若返回空,或报 ORA-15033: diskgroup 'DATA' is not mounted,就属于典型发现失败。加 -k 参数重试:asmcmd lsdsk -k,它绕过 udev 缓存,直接读内核设备路径,能暴露节点间路径不一致问题(比如节点1是 /dev/mapper/DATA01,节点2是 /dev/sdb)。
- 若
lsdsk -k仍无输出,检查 udev 规则是否生效:udevadm trigger --subsystem-match=block+udevadm control --reload-rules - 确认
/etc/udev/rules.d/99-oracle-asm.rules存在且含正确 WWID,且OWNER="grid"、GROUP="asmadmin"、MODE="0660" - RAC 中必须逐节点比对:
blkid | grep -i data和ls -l /dev/mapper/ | grep data,路径、WWID、属主、权限缺一不可
asm_diskstring 配置错误导致“存在却不可见”
ASM 不会自动猜路径,asm_diskstring 是唯一扫描入口。Oracle 12c R2+ 默认为 NULL,不显式设置等于关闭发现能力。
查当前值:SHOW PARAMETER asm_diskstring;常见错误值包括:ORCL:*(ASMLib 已弃用)、/dev/oracleasm/disks/*(仅限旧 ASMLib 环境)。
- 安全写法是明确列出 multipath 设备路径,如:
'/dev/mapper/datap1','/dev/mapper/datap2' - RAC 必须逐节点确认一致:节点 A 配了
/dev/mapper/datap1,节点 B 却配了/dev/dm-12,CRS 就拒绝协调挂载 - 生效命令(注意
SID='*'):ALTER SYSTEM SET asm_diskstring='/dev/mapper/datap1','/dev/mapper/datap2' SCOPE=BOTH SID='*';
多路径设备被识别为 sd* 导致单路径失效
ASMLib(若仍在用)默认按字母顺序扫描 sd*,不优先识别 multipath 设备。存储切换后,原 /dev/sdb 路径断开,I/O 直接失败,可能触发服务器重启。
即使你用 udev 创建了 /dev/asm-diskb 符号链接,若 asm_diskstring 没指向它,或规则里没排除 sd*,ASM 仍可能误选底层单路径设备。
- 禁用 ASMLib(12c R2 起官方已弃用),改用 udev + WWID 稳定路径
- 在 udev 规则中显式排除
sd*:例如KERNEL=="sd*", ENV{ID_SERIAL}!="?*", GOTO="asm_end" - 强制使用 multipath 设备名:
scsi_id -g -u -d /dev/mapper/mpathb获取 WWID,再绑定为/dev/asm-diskb - 确保
asm_diskstring只包含/dev/asm-*或/dev/mapper/*,绝不混用/dev/sd*
扩展分区或磁盘头损坏导致静默跳过
ASM 对设备类型敏感:若 fdisk -l /dev/sda 显示 /dev/sda1 类型为 5 Extended,ASM 会静默跳过——不报错、不提示,只当它不存在。
同样,磁盘头损坏也会让 ASM 拒绝识别:用 kfed read /dev/mapper/DATA01 | grep kfbh.type 查看,正常应为 FKBTYP_DISKHEAD;若为 FKBTYP_INVALID,说明头部校验失败,无法解析元数据。
- 用
fdisk -l确认所有 ASM 分区类型为83 Linux或8e Linux LVM,严禁5 Extended - 若
header_status在v$asm_disk中为CANDIDATE或FORMER,极可能是磁盘头被覆盖(如建过 LVM 或文件系统) - 修复前务必备份:
kfed read /dev/mapper/DATA01 blkn=2046 > DATA01.head.bak(AU=4M 时) - 修复命令需指定准确 AU 大小:
kfed repair /dev/mapper/DATA01 aus=4194304
真实环境中最易被忽略的是:RAC 节点间设备路径的“完全一致性”不是指“都能访问”,而是指 blkid 输出的 WWID、ls -l 显示的属主/权限、asm_diskstring 中的字符串、lsdsk -k 的结果,四者必须逐字符相同。差一个斜杠、一个大小写、一个空格,都足以让磁盘组在部分节点上永远处于 DISMOUNTED 状态。











