ACFS在Oracle 12c RAC中需ADVM卷、内核模块、ASM兼容性及集群资源四层就位;缺一环则df -h不可见挂载点、crsctl stat res显示OFFLINE;须确保oracleacfs/oracleadvm模块加载、compatible.advm≥11.2、vol状态ENABLED、srvctl注册而非手动mount。
ACFS 能在 Oracle 12c RAC 中用,但不是“开个开关”就行——它依赖 ADVM 卷、内核模块加载、ASM 兼容性设置和集群资源注册四层就位。缺一环,df -h 就看不到挂载点,crsctl stat res 里对应资源会显示 OFFLINE 或状态异常。
确认 ADVM/ACFS 内核模块已加载(root 用户)
acfsload 不是启动服务,而是把驱动注入内核;没这步,/dev/asm/xxx 设备文件虽存在,但无法格式化或挂载。
常见错误现象:acfsutil format /dev/asm/vol1-245 报错 ora-15032: not all alterations performed 或 acfs-03008: unable to load module
- 执行
lsmod | grep -E "(oracleacfs|oracleadvm)",确认两个模块都列出来 - 若缺失,先运行
$GI_HOME/bin/acfsroot install(仅首次需安装),再运行$GI_HOME/bin/acfsload start - 两个 RAC 节点都必须执行,否则某节点
crsctl start res ora.xxx.acfs会失败
用 asmcmd 创建 ADVM 卷(grid 用户)
图形界面(asmca)容易漏掉关键参数,命令行更可控,尤其涉及 stripe、redundancy 和磁盘组兼容性时。
使用场景:批量创建、脚本化部署、避免 GUI 操作遗漏 “Enable Volume” 步骤
-
volcreate -G <diskgroup> -s <size> <volname>,例如volcreate -G DATA -s 10G acfsvol1 - 创建后立即检查状态:
volinfo -G DATA acfsvol1,State 必须为ENABLED;若为DISABLED,需手动volenable -G DATA acfsvol1 - 注意:
compatible.advm属性必须 ≥ 11.2,查法:SELECT name, value FROM v$asm_attribute WHERE name LIKE '%advm%';,不满足则ALTER DISKGROUP DATA SET ATTRIBUTE 'compatible.advm'='12.1.0.0.0';
格式化并注册 ACFS(grid 用户单节点操作)
acfsutil format 只需在一个节点执行,但挂载点目录、注册、资源启动必须同步到所有节点,否则集群感知不到该文件系统。
容易踩的坑:直接 mount -t acfs 是临时挂载,重启后丢失;必须走 CRS 注册才能被集群管理
- 格式化:
acfsutil format /dev/asm/acfsvol1-245 - 所有节点创建挂载目录:
mkdir -p /u01/acfsdata(权限建议chown grid:oinstall) - 注册进 Oracle Registry:
acfsutil registry -a /dev/asm/acfsvol1-245 /u01/acfsdata - 触发 CRS 自动创建资源:
srvctl add filesystem -d /dev/asm/acfsvol1-245 -g DATA -v acfsvol1 -m /u01/acfsdata -u grid
验证挂载与集群状态(任意节点)
挂载成功 ≠ 集群可用。CRS 资源必须 ONLINE 且 Mountpath 显示正确,才算真正就绪。性能影响提示:ACFS 默认启用压缩和快照,生产环境若无需这些特性,建议创建时加 -o noacfscompress 降低 CPU 开销
- 查资源状态:
crsctl stat res -t | grep acfs,应看到类似ora.DATA.ACFSVOL1.acfs ONLINE ONLINE node1 mounted on /u01/acfsdata - 查实际挂载:
df -Th | grep acfs,类型应为acfs,不是ext4或tmpfs - 跨节点验证读写:
touch /u01/acfsdata/test_$(hostname),然后在另一节点ls /u01/acfsdata/确认可见
compatible.advm 属性未设、acfsload 仅在单节点执行、以及用 mount 替代 srvctl add filesystem 导致资源未纳入集群生命周期管理。


















