You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CentOS 8下Postgres 13数据目录存VirtualBox共享盘initdb失败问题咨询

PostgreSQL 13数据目录放置在VirtualBox Windows共享盘无法初始化问题解决方案

核心原因

你遇到的报错与目录权限配置无关,根源是VirtualBox的Windows共享文件夹(vboxsf文件系统)未实现PostgreSQL运行必需的POSIX硬链接系统调用:
PostgreSQL在初始化生成WAL预写日志时,会通过硬链接完成临时日志文件到正式日志文件的原子替换,该操作在vboxsf文件系统下被禁止,直接触发Operation not permitted报错,后续文件找不到是硬链接失败的连锁反应。

可行方案

方案1(推荐,可用于生产环境):使用虚拟磁盘文件替代共享文件夹

  • 关闭CentOS 8虚拟机,在VirtualBox设置中为虚拟机添加一块新的虚拟磁盘,将虚拟磁盘的存储路径指定到Windows宿主上你想要存放PG数据的目录
  • 启动虚拟机后,将新添加的磁盘格式化为ext4或xfs这类Linux原生文件系统
  • 将格式化后的磁盘挂载到/var/pgshared路径,配置/etc/fstab实现开机自动挂载,调整挂载目录权限为postgres:postgres,权限值设为700
  • 重新执行initdb操作即可正常完成初始化
    该方案完全兼容PostgreSQL的所有特性,读写性能远高于共享文件夹方案。

方案2(仅可用于测试环境):修改PG参数适配共享文件夹

如果必须使用共享文件夹存储数据,可通过关闭WAL硬链接相关参数实现运行:

  • 先将数据目录初始化在CentOS 8本地的原生文件系统上
  • 编辑初始化完成的data目录下的postgresql.conf,将以下两个参数修改为off:
wal_init_zero = off
wal_recycle = off
  • 将整个data目录复制到VirtualBox共享文件夹下,再指定该目录启动PostgreSQL即可
    注意:该方案会大幅降低WAL写入性能,且共享文件夹的文件锁实现存在缺陷,高负载下有数据损坏风险,禁止在生产环境使用。

内容的提问来源于stack exchange,提问作者Captain Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 15:30:01