oracle 19c安装报错prvf-0401/prvf-0657的根本原因是其预检查脚本不兼容cgroup v2,而非swap空间不足;需通过内核参数cgroup_no_v1=memory降级内存控制器至v1,或临时绕过检查。
oracle 19c安装报错 error: prvf-0401: failed to retrieve swap space information 或 error: prvf-0657: could not retrieve available swap space
根本原因不是“没检测到交换空间”,而是 oracle 安装检查脚本 runinstaller 在调用系统接口获取 /proc/swaps 和 /sys/fs/cgroup/memory/memory.memsw.limit_in_bytes 等信息时失败——常见于启用了 cgroup v2 的较新 linux 发行版(如 rhel 8.4+、oracle linux 8.5+、ubuntu 20.04+),其内存子系统路径和语义已变更,而 oracle 19c(包括 19.19 及之前补丁集)的预检查逻辑未适配。
此时即使 free -h 显示 swap 正常,swapon --show 列出活动分区,安装程序仍会报错并中止。
- 不要盲目扩容 swap 文件或分区——这解决不了 cgroup v2 兼容性问题
- 检查是否启用 cgroup v2:
mount | grep cgroup,若输出含cgroup2或unified,即为问题根源 - 临时绕过检查:启动安装时加参数
-ignorePrereq -J"-Doracle.install.db.validate.supportedOSCheck=false",但仅限测试环境,不推荐生产使用
在 RHEL/OL 8+ 上安全启用传统 cgroup v1 支持
Oracle 19c 依赖 cgroup v1 的 memory.memsw.limit_in_bytes 接口。RHEL/OL 8 默认启用 cgroup v2,需显式降级部分控制器回 v1 才能通过 swap 检查。
操作前确认当前内核支持:zcat /proc/config.gz | grep CGROUP_V1(应返回 CONFIG_CGROUP_V1=y)
- 编辑
/etc/default/grub,在GRUB_CMDLINE_LINUX行末尾追加:cgroup_no_v1=memory - 执行
grub2-mkconfig -o /boot/grub2/grub.cfg - 重启系统后验证:
cat /proc/cmdline | grep cgroup_no_v1应有输出;ls /sys/fs/cgroup/memory/应存在memory.memsw.limit_in_bytes - 无需修改 swap 大小,Oracle 安装即可正常识别已有 swap
swap 大小本身是否真不够?看 Oracle 官方最低要求
Oracle 文档对 swap 的要求是动态的,取决于物理内存大小,不是固定值。19c 要求:
- ≤ 2GB RAM → swap ≥ 1.5× RAM
- 2GB–16GB RAM → swap ≥ 1× RAM
- > 16GB RAM → swap ≥ 16GB(上限)
例如:机器有 32GB 内存,swap 设为 16GB 即满足,不必设成 32GB。用 swapon --show 查看当前大小,用 free -h 确认已激活。
若确实不足(比如 64GB 内存却只有 4GB swap),可在线扩容 swap 文件:
sudo fallocate -l 12G /swapfile_new sudo chmod 600 /swapfile_new sudo mkswap /swapfile_new sudo swapon /swapfile_new # 永久生效:echo '/swapfile_new none swap sw 0 0' | sudo tee -a /etc/fstab
为什么 systemd-swap 或容器环境里总过不去?
Oracle 19c 的 cluvfy 和 runInstaller 预检脚本硬编码依赖 /proc/swaps 中的设备路径格式(如 /dev/mapper/vg0-lv_swap),而 systemd-swap 创建的 swap 是基于 loop 设备或 zram 的,路径形如 /dev/loop0 或 /dev/zram0,且部分字段(如 priority)解析异常;容器中则根本无权访问宿主机 swap 接口。
- 生产环境禁用
systemd-swap,改用传统mkswap + swapon - 容器部署 Oracle 不是标准场景,swap 检查必然失败,应跳过预检(
-ignorePrereq)并在宿主机层面保障资源 - 云平台(如 OCI、AWS EC2)上若用 NVMe 实例,swap 文件性能远低于专用 swap 分区,建议分配独立 LV
cgroup v2 兼容性是 Oracle 19c 在新系统上最隐蔽的障碍,swap 大小反而是次要问题。改内核参数比反复调整 swap 更治本,也更安全。











