Ошибка при выполнении pg_upgrade: Неверная ссылка между устройствами
В ходе апгрейда Tantor SE-1C с версии 14 на 15 возникает ошибка:
"/opt/tantor/db/15/bin/pg_ctl" -w -D "/var/lib/postgresql/tantor-se-1c-15/data" -o "" -m smart stop >> "/var/lib/postgresql/tantor-se-1c-15/data/pg_upgrade_output.d/20240305T202854.903/log/pg_upgrade_server.log" 2>&1
Adding ".old" suffix to old global/pg_control ok
Если вы захотите запустить старый кластер, вам нужно будет убрать
расширение ".old" у файла /var/lib/tantor/global/pg_control.old.
Так как применялся режим "ссылок", работа старого кластера
после того, как будет запущен новый, не гарантируется.
Linking user relation files
создание ссылки на "/var/lib/tantor/base/1/2613" в "/var/lib/postgresql/tantor-se-1c-15/data/base/1/2613"
создание ссылки на "/var/lib/tantor/base/1/2683" в "/var/lib/postgresql/tantor-se-1c-15/data/base/1/2683"
создание ссылки на "/var/lib/tantor/base/13707/1692836364" в "/var/lib/postgresql/tantor-se-1c-15/data/base/13707/1692836364"
создание ссылки на "/var/lib/tantor/base/13707/1692836367" в "/var/lib/postgresql/tantor-se-1c-15/data/base/13707/1692836367"
создание ссылки на "/var/lib/tantor/base/16384/1693040069" в "/var/lib/postgresql/tantor-se-1c-15/data/base/16384/1693040069"
ошибка при создании ссылки для отношения "pg_catalog.pg_largeobject" (из "/var/lib/tantor/base/16384/1693040069" в "/var/lib/postgresql/tantor-se-1c-15/data/base/16384/1693040069"): Неверная ссылка между устройствами
Ошибка, выполняется выход
дочерний процесс завершился нештатно с ошибкой 256
Ошибка, выполняется выход
TEXT
Апгрейд выполняли командой:
sudo -u postgres /opt/tantor/db/15/bin/pg_upgrade --old-bindir=/opt/tantor/db/14/bin/ --new-bindir=/opt/tantor/db/15/bin/ --old-datadir=/var/lib/tantor --new-datadir=/var/lib/postgresql/tantor-se-1c-15/data --jobs=12 --link -v --socketdir=/tmp
BASH
Если в ОС установлен по умолчанию английский язык, то эта ошибка может выглядеть так:
linking "/opt/symcor-foa/data/pg_tblspc/federator/PG_9.0_201008051/17055/11838" to "/opt/symcor-foa/data/pg_tblspc/federator/PG_9.4_201409291/16423/13013"
error while creating link for relation "pg_catalog.pg_largeobject" ("/opt/symcor-foa/data/pg_tblspc/federator/PG_9.0_201008051/17055/11838" to "/opt/symcor-foa/data/pg_tblspc/federator/PG_9.4_201409291/16423/13013"): No such file or directory
TEXT
Причиной подобной неполадки является особенность работы pg_upgrade в режиме --link, при котором создаются жесткие ссылки:
ln /mnt/sdb/tantor/base/16384/1693040069/SOME_RELATION_FILE /mnt/sdb/data/base/16384/1693040069/SOME_RELATION_FILE
>>
ln: создание жесткой ссылки «/mnt/sdb/tantor/base/16384/1693040069» => « /mnt/sdb/data/base/16384/1693040069»: Неверная ссылка между устройствами
TEXT
А часть баз была вынесена символьными ссылками на другие устройства (sda, sdc).
Свойство жесткой ссылки: жесткую ссылку нельзя создать на другом разделе. Между разными файловыми системами могут работать только символьные ссылки.
Решение:
При выполнении pg_upgrade в data-каталоге не должно быть баз, которые через символьные ссылки вынесены на другие устройства.