Возможно ли иметь каталог данных Postgres (13 в CentOS 8) на общем диске с помощью Oracle VBOX (6.1 в Windows 10)?
A) Смонтировал каталог Virtualbox с необходимыми правами собственности и разрешениями:
ls-l /var:
drwx------. 1 postgres postgres 4096 Aug 20 12:43 pgshared
(и каталог / var / pgshared / data был создан с точно таким же разрешением)
Б) Изменена переменная среды PGDATA со значения по умолчанию на этот каталог данных.
C) initdb завершился с ошибкой ниже:
fixing permissions on existing directory /var/pgshared/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ... 100
selecting default shared_buffers ... 128MB
selecting default time zone ... Europe/Brussels
creating configuration files ... ok
running bootstrap script ... 2021-08-20 12:16:08.088 CEST [2807] LOG: could not link file "pg_wal/xlogtemp.2807" to "pg_wal/000000010000000000000001": Operation not permitted
2021-08-20 12:16:08.090 CEST [2807] FATAL: could not open file "pg_wal/000000010000000000000001": No such file or directory
child process exited with exit code 1
initdb: removing contents of data directory "/var/pgshared/data"
Дополнительные комментарии:
Использование опции -D дает тот же результат (независимо от переменной среды PGDATA)
2 ответа
Ошибка означает, что файловая система не поддерживает жесткие ссылки (
Даже если вам удастся разместить каталог данных, PostgreSQL не будет работать. Для подтверждения выполните несколько раз следующее:
SELECT pg_switch_xlog();
Вам придется использовать другую файловую систему, которая реализует все необходимые системные вызовы.
Это обходной путь, который я использовал, и я смог успешно продолжить создание баз данных и подключение к ним, но я (пока) не знаю, столкнусь ли я с дальнейшими проблемами. Кроме того, до сих пор неизвестна первопричина и реальное решение:
1- Поскольку инициализацию можно было выполнить на локальном диске, я отключил общий диск (umount /var/pgshared) и инициализировал базу данных. это было успешно, и папка данных была создана со всем ожидаемым содержимым.
2- Я переместил папку данных во временное место и повторно смонтировал общую папку с той же командой монтирования.
3- Я вернул папку данных на смонтированный диск.
4- Я провел простой тест с помощью команд psql.