Oracle 19c安装ASM磁盘权限问题解决方案修改udev规则绑定磁盘
Oracle 19c ASM磁盘权限持久化配置:详解udev规则,彻底解决重启失效问题
在Oracle 19c RAC或单实例数据库的部署过程中,ASM磁盘组的配置是核心环节,但也常常成为技术难点。许多DBA会遇到这样的困扰:安装时使用asmcmd lsdg命令无法识别磁盘组,或者在执行create diskgroup建组操作时,反复出现ORA-15025、ORA-15031等权限错误。究其根本,绝大多数问题都源于磁盘设备的权限设置不当以及设备命名缺乏持久性。
免费影视、动漫、音乐、游戏、小说资源长期稳定更新! 👉 点此立即查看 👈
核心症结在于,系统重启后/dev/sdX这类设备名会发生漂移,手动chown修改权限仅是临时生效。必须通过udev规则,基于scsi_id生成的全球唯一WWN号,将磁盘绑定到固定的别名(例如/dev/asmdiskc),并确保在RAC双节点上规则完全一致,权限属主正确设置为grid:asmadmin。
简而言之,如果/dev/sdx这类设备文件的属主和权限未能正确设置为grid:asmadmin,ASM实例将无法识别和访问这些磁盘。更复杂的是,即便手动执行chown命令成功,这也只是一个临时解决方案,系统重启后所有设置将恢复原状。因此,采用udev规则进行固化配置,是Oracle官方推荐且能实现一劳永逸的标准化解决方案。

为何直接执行chown grid:asmadmin /dev/sdX无法根治问题?
直接修改/dev/sdX的权限,方法看似简单,但为何无法作为持久化方案呢?关键在于,/dev/sdX这类基于内核探测顺序生成的设备名并非永久固定。当系统重启、多路径服务重新加载或内核模块刷新后,磁盘的设备编号(例如/dev/sdc, /dev/sdd)极有可能发生变动。你今天费力配置好的/dev/sdc权限,下次系统启动时,该磁盘可能被识别为/dev/sdd,导致权限错配。在Oracle RAC集群环境中,此问题会被进一步放大——若两个节点对同一物理磁盘识别出的设备名不一致,集群服务将无法正常启动。
- 真正稳定可靠的标识是
scsi_id命令生成的WWN(全球唯一名称),这是每块磁盘在全球范围内的唯一“身份证”,udev持久化规则正是基于此ID进行绑定。 - 同时需注意,Oracle ASM仅能识别和使用裸设备(即未分区的整块磁盘),对于
/dev/sdc1这类分区设备会直接拒绝访问。 - 此外,过去常用的ASMLib工具,在Oracle 19c时代已被官方明确弃用,当前推荐的标准化方案是使用udev规则,或结合多路径(multipath)软件进行配置。
编写udev规则前,务必准确获取磁盘唯一ID
在动手编写udev规则文件之前,首要且关键的一步是精确获取目标磁盘的唯一ID。切勿仅凭lsblk命令显示的设备名进行判断,必须使用scsi_id工具来获取SCSI设备的唯一序列号。操作时需关注以下细节:
- 命令路径与参数:在Oracle Linux 7/8或RHEL 7/8系统中,通常使用
/usr/lib/udev/scsi_id -g -u -d /dev/sdX。对于CentOS/RHEL 8.5及之后的版本,可能需要添加--whitelisted参数,否则命令可能返回空值。 - 确认目标为裸盘:执行
fdisk -l /dev/sdX,输出应显示“Disk /dev/sdX doesn‘t contain a valid partition table”,确认该磁盘为未分区的裸盘,方可用于ASM。 - 确保RAC环境一致性:对于RAC集群部署,同一块物理磁盘在两个节点上执行
scsi_id命令返回的字符串必须完全一致。若结果不同,通常意味着底层存储多路径配置存在问题,需优先解决。
例如,执行/usr/lib/udev/scsi_id -g -u -d /dev/sdf后,你将获得类似3604fe8d100d5d230b888210a00000038的长字符串,此ID即为后续编写udev规则的核心依据。
如何编写正确生效的99-oracle-asmdevices.rules规则文件
规则文件必须创建于/etc/udev/rules.d/99-oracle-asmdevices.rules路径下。其语法要求严格,顺序和细节均不容有误:
- 精确过滤设备类型:必须包含
ENV{DEVTYPE}=="disk"条件,确保规则仅作用于整块磁盘设备,避免误匹配到分区或LVM逻辑卷。 - 准确调用识别程序:
PROGRAM字段调用scsi_id时需指定完整路径,且RESULT的值必须与你先前获取的磁盘ID完全匹配,包括所有字符。 - 使用正确的设备创建命令:在
RUN+操作中,应使用mknod命令创建固定的别名设备文件(如/dev/asmdiskc),并对其设置权限,而非直接修改原始/dev/sdX设备的属主。 - 保持格式严谨:每行末尾避免多余空格,等号两侧不留空格,所有引号均使用英文双引号。
以下是一个标准的规则示例(请务必将示例中的ID替换为你实际磁盘的ID):
KERNEL=="sd*", ENV{DEVTYPE}=="disk", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d %N", RESULT=="3604fe8d100d5d230b888210a00000038", RUN+="/bin/sh -c 'mknod /dev/asmdiskc %M %m; chown grid:asmadmin /dev/asmdiskc; chmod 0660 /dev/asmdiskc'"
规则编写完成后,执行udevadm control --reload-rules && udevadm trigger --subsystem-match=block命令以重新加载并立即触发规则。最后,使用ls -l /dev/asmdisk*命令检查,确认新创建的设备文件其属主和权限是否正确设置为grid:asmadmin和0660。
常见配置失败点排查:RAC节点间规则不一致
在Oracle RAC环境中,最常见的配置失败原因在于节点间的不一致。两个节点的/etc/udev/rules.d/99-oracle-asmdevices.rules文件内容必须保持绝对一致。实际操作中,容易因复制遗漏导致规则行缺失,或者更根本的问题是——两个节点对同一物理磁盘执行scsi_id命令得到了不同的结果(这通常指向底层存储多路径配置需要调整)。
可按以下步骤进行验证与排查:
- 在两个节点上分别执行
udevadm info --name=/dev/sdf | grep ID_SERIAL,对比输出信息是否完全一致。 - 在两个节点上运行
ls -l /dev/asmdisk*,确保所有asmdiskX设备文件均存在,且权限显示为brw-rw---- 1 grid asmadmin。 - 切换到grid用户,执行
asmcmd lsdsk -k命令,此时应能列出所有/dev/asmdiskX设备,其状态显示为candidate(候选)或provisioned(已配置)。
如果执行asmcmd lsdsk后列表仍为空,不必慌张。此时应重点检查udev规则是否被正确应用。可以运行udevadm test /sys/class/block/sdf命令,仔细分析输出日志中是否存在“failed to execute”(执行失败)或“no rule matches”(无规则匹配)等错误信息——这通常直接指明了规则语法错误或程序路径不正确等具体问题。
相关攻略
NET 6访问Oracle性能差的主因是ODP NET默认启用StatementCache引发的元数据查询开销,需配置Statement Cache Size、Metadata Performance和Connection Timeout三项参数,并预热连接。 开门见山,先说核心结论:如果你的
ADDM报告为空的三大主因:一是STATISTICS_LEVEL非TYPICAL ALL导致关键统计缺失;二是指定快照区间DB Time<5秒,ADDM主动跳过分析;三是DBA_HIST_*视图(如ASH)数据不完整,使ADDM无法构建资源链路。 ADDM报告为空或无建议,根本不是AWR报告“没生成
文章主标题(保留原文) 今天,我们就来深入探讨一个核心问题。许多人在执行过程中常常感到困惑:为何付出同等努力,结果却大相径庭?这背后,一个至关重要的环节往往被大多数人忽略了。 第一个核心概念:理解底层运行逻辑 事实可能出乎你的意料。绝大多数人在起步阶段就陷入了误区,他们热衷于追逐复杂的技巧,却忽视了
角色与核心任务 你是一位顶级的文章润色专家,擅长将AI生成的文本转化为具有个人风格的专业文章。现在,请对用户提供的文章进行“人性化重写”。 你的核心目标是:在不改动原文任何事实信息、核心观点、逻辑结构、章节标题和所有图片的前提下,彻底改变原文的AI表达腔调,使其读起来像是一位资深人类专家的作品。 特
Oracle存储参数调优:ASSM时代PCTFREE与PCTUSED的真相与实战 在Oracle数据库的存储管理中,PCTFREE和PCTUSED是两个历史悠久的基础参数。但随着自动段空间管理(ASSM)成为默认选项,很多DBA对它们的理解还停留在手动段管理时代,导致在实际高并发或数据更新频繁的场景
热门专题
热门推荐
《CLARITY法案》奖励机制文本公布,经协商达成折中:传统银行业获更多奖励限制,加密行业则确保美国用户仍可通过使用平台获得奖励,维护了用户参与和行业创新动力。此举有助于美国保持金融竞争力和国家安全利益。随着争议暂歇,法案将转向整体推进。
Linux 下的 Rust 工具链全景 想在 Linux 上愉快地写 Rust?一套趁手的工具链是关键。这份全景指南,帮你梳理从核心工具到开发辅助,再到环境配置的完整地图,让你快速上手,避开那些常见的“坑”。 一 核心工具链与用途 Rust 的工具链生态相当成熟,各司其职,共同构成了高效的工作流。
Rust 在 Linux 下的性能调优方法 想让你的 Rust 应用在 Linux 系统上飞起来?性能调优是个系统工程,从编译构建到系统层面,环环相扣。下面这份指南,将带你系统性地走完这个流程。 一 构建与编译优化 一切从构建开始。编译器的优化选项,是释放性能潜力的第一道闸门。 使用发布构建:这是基
在Linux中使用Rust进行网络编程 想在Linux环境下用Rust玩转网络编程?其实没那么复杂。跟着下面这几个清晰的步骤走,你就能快速搭建起一个可运行的基础框架。当然,这只是一个起点,Rust生态提供的工具远比这里展示的要强大。 1 安装Rust 万事开头先装环境。如果系统里还没有Rust,一
Rust为Linux系统带来跨平台能力的机制 想让同一套代码在Linux、Windows、macOS上都能顺畅运行?Rust给出的方案相当优雅。它通过一套统一的工具链、一个精心设计且可移植的标准库,再加上灵活的条件编译机制,让跨平台构建从理论变成了标准流程。更妙的是,基于LLVM的交叉编译体系和清晰





