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 年前に遡るので、修正されるまでにはもうしばらくかかるかもしれません。