尝试在由 Vagrant 管理的 Virtualbox VM 上启动 postgresql 时出现以下错误:
LOG: could not link file "pg_xlog/xlogtemp.29" to "pg_xlog/000000010000000000000001" (initialization of log file): Operation not permitted
FATAL: could not open file "pg_xlog/000000010000000000000001": No such file or directory
```
答案1
当 postgresql 的数据目录位于 Vagrant 共享文件夹 (/vagrant
例如 ) 中,并且 Vagrant 主机是 Windows 时,就会发生这种情况。在这种情况下,无法以 unix 方式设置权限。
将该文件夹移动到另一个位置(例如 vagrant 用户的主目录)然后 postgresql 将启动。
解决方案位于:https://gitlab.com/gitlab-org/gitlab-development-kit/issues/20
答案2
造成这种情况的根本原因是 vboxsf 不支持文件系统链接(无论是硬链接还是符号链接)。您可以通过在 VirtualBox 客户机内安装主机文件夹并尝试执行以下操作来重现此问题:
ln /path/to/mounted/share/existingfile.txt /some/path/link-to-file.txt
例如(将 /var/data 安装为 vboxsf 共享)
jim@a55a005fc5a5:/~ ln /var/data/foo.txt ~/data/link-to-foo ln: failed to create hard link ‘/users/jim/data/link-to-foo’ => ‘/var/data/foo.txt’: Operation not permitted
virtualbox.org 上有很多关于此问题的票(#818,#10085),但考虑到他们已经过去 7 年了,可能还需要一段时间才能修复!