oracle 12c安装报java权限拒绝,主因是/tmp挂载含noexec参数;可通过mount | grep ' /tmp '确认,临时解决需设置tmpdir并用-j"-djava.io.tmpdir=..."指定非noexec目录。
oracle 12c 安装失败时提示 java 权限拒绝(如 java.lang.unsatisfiedlinkerror 或图形界面卡在启动阶段),大概率不是 jdk 版本问题,而是 /tmp 目录挂载时禁用了执行权限(noexec)——oracle 安装器会在 /tmp 解压并临时运行 java 类库和本地库,noexec 会直接拦截。
为什么 /tmp 挂载了 noexec 就会报 Java 权限拒绝
Oracle 的 runInstaller 和 CVU(Cluster Verification Utility)依赖 JVM 启动一个带本地 JNI 库的图形或命令行进程。这些库(如 libawt_xawt.so)被解压到 /tmp/CVU_*/ 或 /tmp/OraInstall* 下后需动态加载并执行。若 /tmp 是 tmpfs 且挂载参数含 noexec,内核会拒绝 mmap(PROT_EXEC),JVM 报错但不明确提示“因为 noexec”,只显示模糊的链接失败或权限异常。
常见错误现象包括:
Exception in thread "main" java.lang.UnsatisfiedLinkError: /tmp/OraInstall.../libawt_xawt.so: ... cannot open shared object file- 图形界面一闪而退,控制台仅输出
Could not create the Java Virtual Machine - 静默安装(
silent)卡在Starting Oracle Universal Installer...不再前进
如何快速确认 /tmp 是否被 noexec 挂载
别猜,直接查系统当前挂载状态:
- 运行
mount | grep ' /tmp ',看输出中是否含noexec(注意空格分隔,避免匹配到/tmpfs或子路径) - 若用的是
tmpfs,再运行grep tmpfs /proc/mounts | grep /tmp,确认是否有size=且值过小(如size=1G),这虽不直接导致 Java 拒绝,但空间不足会加剧临时文件写入失败,触发连锁异常 - 检查
df -i /tmp:inode 耗尽也会让 JVM 无法创建 .so 文件,表现为 “No space left on device” 却df -h显示还有空间
临时绕过 noexec 的实操方法(推荐用于安装阶段)
不建议直接改 /etc/fstab 重启系统——尤其生产环境。更安全的做法是让 Oracle 安装器避开 /tmp:
- 在启动
runInstaller前,设置环境变量:export TMPDIR=/home/oracle/tmp(确保该目录存在、属主为oracle、权限为755、且所在文件系统未挂noexec) - 然后运行:
./runInstaller -ignorePrereq -J"-Djava.io.tmpdir=$TMPDIR"(-J参数显式传给 JVM,覆盖其默认java.io.tmpdir) - 如果用
setup.exe(Windows),则需在快捷方式目标中添加 JVM 参数,例如:setup.exe -J"-Djava.io.tmpdir=D:\oracle\tmp",并提前建好该目录
这个组合能 100% 绕过 /tmp 的 noexec 限制,且不影响系统安全性——安装完可随时恢复原挂载策略。
永久修复:重挂载 /tmp(仅当确需保留 tmpfs)
如果必须用 tmpfs 且要长期启用 Oracle 安装能力,修改挂载选项即可,无需删重建:
- 临时重挂(立即生效,重启失效):
sudo mount -o remount,exec,size=4G /tmp - 永久生效:编辑
/etc/fstab,找到/tmp对应行,把noexec改成exec,并确认含size=4G(Oracle 12c 解压临时包约需 1.5–2GB 可用空间) - 注意:不要移除
nosuid或nodev,它们与安全相关,exec单独放开已足够
真正容易被忽略的是:很多运维人员看到 df -h /tmp 有空间、swapon -s 有 swap,就认定前置检查该过了——但 noexec 这种挂载级限制,CVU 日志(/tmp/CVU_*/cvu_err.log)里根本不会提,它只报“Java 启动失败”,得靠经验或查 mount 输出才能定位。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











