Vagrant で使用すると postgresql の起動に失敗する

Vagrant で使用すると postgresql の起動に失敗する

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

関連情報