在Windows平台上部署Oracle RAC集群时,ASM磁盘组无法挂载、CRS报警源offline,是让不少DBA头疼的问题。这类故障的根源往往出在磁盘的ownership上,也就是Oracle进程对物理磁盘设备的访问权限。Linux下我们可以用udev规则或者ASMLIB来管理磁盘属主,而Windows平台采用了一套完全不同的机制:Oracle使用asmtool工具在磁盘上写入特定的签名字符串,再通过符号链接和访问控制列表让ASM实例获得读写权限。一旦这个链条中任何一环被破坏,比如磁盘被重新格式化、签名字符串被覆盖、或者ACL被安全策略重置,ASM实例就会无法打开磁盘设备,磁盘组随之无法挂载。

Windows平台下ASM访问磁盘的底层机制
与Linux把磁盘暴露为/dev/sdX块设备不同,Windows系统通过设备命名空间\\.\PhysicalDriveN的形式访问物理磁盘。Oracle在安装GRID时,会在系统目录下创建一组符号链接,例如C:\Oracle\grid\asm\disk0这样的路径,实际指向\\.\PhysicalDrive2之类的物理设备。ASM实例在创建磁盘组时,记录的是这个符号链接路径,而不是物理设备号。
asmtool的作用可以概括为两件事:第一,在磁盘的指定偏移位置写入一个小于4KB的签名字符串,通常是类似ORCLDISK的标记加上磁盘名;第二,创建符号链接并设置访问控制列表。签名写入的目的是防止把一块非ASM磁盘误加入磁盘组造成数据损坏。ASM实例在打开磁盘时会校验这个签名,校验通过才会继续读取磁盘头上的磁盘组信息。
理解了这个机制,就能明白为什么Windows下ASM磁盘权限问题往往表现得很隐蔽。比如磁盘顺序变化不会导致问题,因为访问走的是符号链接加签名双重校验;但磁盘被Windows磁盘管理器重新写入签名、或者被其他分区工具覆盖了前几个扇区,就会直接破坏ASM磁盘头,这才是最危险的情况。
使用asmtool和asmtoolg检查磁盘状态
Oracle提供了图形化的asmtoolg和命令行的asmtool两个工具,都位于GRID的bin目录下,例如C:\Oracle\grid\bin\asmtool.exe。图形工具适合初装阶段批量打标,而命令行工具更适合日常巡检和故障排查。查看当前已打标磁盘的命令如下:
C:\Oracle\grid\bin\asmtool.exe -list asmtool -list [circle] \\.\PhysicalDrive2 : ORCLDISK + DATA1 \\.\PhysicalDrive3 : ORCLDISK + FRA1
输出中每一行代表一块磁盘,加号前是签名类型,后面是磁盘标签名。如果某块磁盘显示为未标记状态,或者干脆不出现在列表里,就要怀疑签名丢失或者设备访问被拒绝。这时候可以用管理员权限检查符号链接是否还在,并确认Local System账户或运行Oracle服务的账户对这些链接有完全控制权限。
给一块新磁盘打标并建立链接的命令写法如下,注意操作会覆盖磁盘前4KB数据,务必确认目标盘符没有搞错:
C:\Oracle\grid\bin\asmtool.exe -create \\.\PhysicalDrive4 DATA2 asmtool: created link \\.\PhysicalDrive4 -> C:\Oracle\grid\asm\disk2
执行成功后,可以到C:\Oracle\grid\asm目录下确认disk2链接已经生成,然后在另一个节点上以相同参数执行相同命令。RAC要求所有节点对同一块共享磁盘使用一致的磁盘名和链接路径,否则磁盘组只能在部分节点挂载,导致实例被驱逐。
常见ownership故障的定位与修复
第一类典型故障是磁盘组在一个节点正常、另一个节点反复报无法打开设备。排查时先看ASM实例的alert日志,路径通常在C:\Oracle\grid\diag\asm\+asm\+asm1\trace\目录下。日志中出现ORA-15078或提示无法打开磁盘的,基本可以锁定为该节点的链接或权限问题。依次检查符号链接是否存在、链接是否指向正确的PhysicalDrive、以及运行GRID服务的操作系统账户是否拥有读写权限。
第二类故障是Windows更新或安全基线脚本重置了ACL。有些企业环境会定期执行安全加固,把所有设备对象的权限收敛到管理员组,结果Oracle服务账户被踢出ACL,ASM自然打不开磁盘。修复方法是重新执行asmtool的授权动作,或者在磁盘链接的属性中手工把服务账户加回完全控制。这类问题的特点是故障时间点与安全策略执行时间吻合,可以在系统日志中找到对应记录。
第三类也是最严重的情况是磁盘头签名被覆盖,比如有人误在共享盘上执行了format或者创建分区。此时asmtool -list看不到签名,磁盘组数据面临实质损坏。如果覆盖的只是签名字符串而磁盘头ASM元数据还在,可以尝试用kfed工具读取磁盘头确认,再用备份的磁盘信息恢复。这再次说明对ASM磁盘做dd级或第三方块级备份的重要性,平时保留一份asmtool -list输出和磁盘组完整拓扑文档,故障时能省下大量判断时间。
日常预防与运维建议
针对ownership问题,建议把asmtool -list纳入集群巡检脚本,每次变更前后各执行一次并留存输出。共享磁盘在Windows磁盘管理器中必须保持脱机状态,如果被系统联机并自动写入磁盘签名,就会破坏ASM元数据,这一点要在服务器交付时写入操作规范,明确禁止在共享盘上进行任何分区或格式化操作。
其次,GRID服务建议统一使用域账户或独立的本地虚拟账户运行,并在安全策略中为设备对象显式保留该账户的权限。最后,对于多路径存储,务必先安装厂商多路径软件再打标,确保两个节点看到的PhysicalDrive编号映射到同一条聚合路径,避免出现一个节点读写正常、另一个节点读到不同路径导致的脑裂式故障。把这些细节固化到部署手册中,ASM磁盘组的ownership问题就能从被动救火转为主动预防。
Oracle RACASM磁盘组磁盘组权限修改时间:2026-09-13 14:38:48