AFD升级前须确认:①oracleasm完全卸载;②内核版本匹配(EL7≥4.14.35-1902.30x,EL8≥4.18.0-305);③所有ASM磁盘未被挂载。
AFD 升级前必须确认的 3 个前提条件
afd 不是装上就能用的替代品,它和内核、oracle 版本、存储设备路径强绑定。升级失败绝大多数出在这几步:
-
oracleasm必须已完全卸载(包括服务停用、模块卸载、/etc/sysconfig/oracleasm删除),残留会导致 AFD 初始化报AFD-621: Unable to load AFD driver - 内核版本需匹配:Oracle 19c RAC 要求 EL7 至少
kernel-4.14.35-1902.30x或更高;EL8/OL8 需kernel-4.18.0-305起,旧内核即使打补丁也可能缺dm-mpath支持 - 所有 ASM 磁盘必须处于未被 ASM 实例挂载状态(
crsctl stop crs全节点执行,不能只停asm)
如何安全替换 ASMLib 设备为 AFD 标签
AFD 不识别 /dev/oracleasm/* 路径,它只认原始块设备(如 /dev/sdb)并打标签。跳过这步直接启 ASM 会报 ORA-15018: diskgroup cannot be created:
- 运行
afd_label前先用blkid和lsblk -d -o NAME,ROTA,TYPE,FSTYPE确认目标设备无文件系统、非只读、类型为 disk - 标签名不能含下划线或小数点,推荐全大写+数字(如
DATA01),否则asmcmd lsdg查不到磁盘组 - 每个设备只能有一个 AFD 标签,重复执行
afd_label会覆盖旧标签,但不会清空数据 —— 别误以为“重标”能修复损坏
AFD 启动失败常见错误及修复路径
afddriverstate 显示 FAILED 或 afdkms 编译失败是最常卡住的环节:
- 错误
AFD-9154: Unable to find device for disk:说明 udev 规则没生效,检查/etc/udev/rules.d/99-oracle-afd.rules是否存在且包含KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM="/usr/lib/oracleafd/admin/afd_get_disk_name %N", SYMLINK+="oracleafd/%c" -
make -C /lib/modules/$(uname -r)/build M=/opt/oracle/extapi/64/afdkms/inst/current/src modules失败:通常是 kernel-devel 包版本与当前运行内核不一致,用uname -r和rpm -q kernel-devel对比 - 启动后
afd_state显示DISABLED:不是服务没起,而是/etc/oracleafd.conf中afd_serial_number为空或非法,留空即可(设为"")
ASM 实例启动时找不到 AFD 磁盘的典型原因
AFD 标签本身不等于 ASM 可识别磁盘,中间还差一层映射:
-
asmcmd afd_lsdsk必须能看到全部标签(如DATA01),若为空,说明afddriverstate是 running 但afd_kload没成功加载驱动 -
sqlplus / as sysasm中执行SELECT PATH FROM V$ASM_DISK WHERE PATH LIKE 'AFD:%';应返回带标签的路径;如果为空,检查asm_diskstring参数是否为'AFD:*'(注意单引号和星号) - RAC 环境中一个节点能识别、另一个不能:大概率是 OCR 磁盘所在设备在该节点未执行
afd_label,或/etc/oracleafd.conf在各节点内容不一致(尤其afd_use_udev开关)
AFD 的麻烦不在安装,而在设备路径生命周期管理 —— 它绕过了 udev 的常规命名,又依赖内核模块的精确版本匹配。任何一步跳过验证,都会让 ASM 启动卡在 “等待磁盘” 状态,而错误日志里只有一句模糊的 ORA-15032。










