Oracle 21c 安装报“磁盘空间不足”但 df -h 显示充足,实为/tmp挂载为tmpfs(内存型)且容量不足(常仅1–2GB),需显式设置TMPDIR指向≥12GB的短路径真实磁盘目录并重启终端生效。
df -h /tmp 显示空间充足但 Oracle 21c 安装仍报磁盘不足
oracle 21c 安装失败时提示“磁盘空间不足”,但 df -h / 和 df -h /tmp 都显示剩余几十 gb——这不是误报,而是你没看对位置。linux 下的 /tmp 很可能挂载为 tmpfs,它不占磁盘,而吃内存;oracle 解压和静默安装过程会往这里写大量临时文件(如 /tmp/orainstall*),一旦超出 tmpfs 配额就会直接中断,且错误日志里往往只显示模糊的“no space left on device”。
-
df -T /tmp查类型:若 Type 是tmpfs,说明它上限由内存决定,跟磁盘无关 -
cat /proc/mounts | grep tmpfs看实际大小,常见默认是 1–2GB,远低于 Oracle 21c 安装所需的 10GB 临时空间 - 不要依赖
df -h /的总空间判断——Oracle 不会把临时文件写到/opt或/u01下,它优先用$TMPDIR→$TMP→$TEMP→/tmp
如何让 Oracle 21c 安装绕过 tmpfs 限制
不能靠“清空 /tmp”解决,因为 tmpfs 大小是硬编码的。必须让 Oracle 进程把临时文件写到真实磁盘路径上。最稳妥的做法是显式设置 TMPDIR 环境变量,并确保该路径存在、可写、无空格、无中文、且有 ≥12GB 剩余空间。
- 创建短路径:
mkdir -p /stage/tmp(推荐放在安装目标盘,比如/u01/stage/tmp) - 设置环境变量:
export TMPDIR=/stage/tmp,且在运行runInstaller或setup.sh前执行(不要只在 ~/.bashrc 里设,要确保安装进程继承) - 验证生效:
echo $TMPDIR和ls -ld /stage/tmp(权限需含 oracle 用户可写) - 注意:仅设
TEMP或TMP不够可靠,Oracle 21c 的 Java 启动器优先读TMPDIR
Windows 上类似问题:TEMP 路径本身过长或含空格
Windows 下即使启用了 LongPathsEnabled,如果系统级 TEMP 和 TMP 环境变量指向 C:\Users\Alice\AppData\Local\Temp 这类长路径,Oracle 21c 的 Java 子进程仍会在内部拼接出超长路径并崩溃,报错如 java.io.IOException: The filename or extension is too long,且不显示完整路径。
- 必须修改系统级环境变量(不是用户级):
TEMP和TMP都设为短路径,例如D:\Temp - 路径不能含空格、中文、特殊符号;不能是符号链接;建议格式为
盘符:\短名 - 修改后需重启系统(或至少重启所有终端和资源管理器),否则
setup.exe启动的子进程无法继承新值 - 验证方式:打开新 CMD,运行
echo %TEMP%和echo %TMP%,确认输出一致且路径合理
为什么 df -h 结果容易误导安装决策
df -h 只反映挂载点的容量,但 Oracle 21c 安装过程横跨多个独立存储区域:tmpfs 内存区、安装目标分区、数据库数据文件目标分区、快速恢复区(FRA)预留区。任一环节不足都会失败,且错误提示不指明具体是哪个路径缺空间。
- 临时空间需求:官方要求 ≥10GB,实测最低需 12GB(含 JDK 提取、OPatch 解压、OUI 缓存)
- 软件安装空间:≥12GB(
$ORACLE_HOME目录下) - 数据库文件初始空间:XE 版本默认建 12GB 数据文件,SE2 默认 8GB,必须确保数据文件路径所在分区有对应余量
- 关键盲区:
df -h看不到 tmpfs 实际使用率,df -h /dev/shm才能反映共享内存使用情况,而 Oracle 有时也会用到它
df -h /,先跑 df -T 看类型,再逐个确认 TMPDIR、ORACLE_BASE、DATAFILE_DEST 对应路径的真实可用空间。











