Можно смонтировать 2 зашифрованных диска с одинаковым UUID

Чтобы ответить на этот вопрос, начните с проверки содержимого двух рассматриваемых файлов. Если вы не знаете, где их найти, вы можете поискать в содержимом пакета файлы systemd:

.
 dpkg -L postgresql-common| grep systemd

Глядя на postgresql.serviceфайл, вы видите, что почти ничего не делаете:

# systemd service for managing all PostgreSQL clusters on the system. This
# service is actually a systemd target, but we are using a service since
# targets cannot be reloaded.

[Unit]
Description=PostgreSQL RDBMS

[Service]
Type=oneshot
ExecStart=/bin/true
ExecReload=/bin/true
RemainAfterExit=on

[Install]
WantedBy=multi-user.target

Из комментариев мы узнаем, что файл используется как «цель» systemd. Переходим к файлу шаблона:

# systemd service template for PostgreSQL clusters. The actual instances will
# be called "postgresql@version-cluster", e.g. "postgresql@9.3-main". The
# variable %i expands to "version-cluster", %I expands to "version/cluster".
# (%I breaks for cluster names containing dashes.)

[Unit]
Description=PostgreSQL Cluster %i
ConditionPathExists=/etc/postgresql/%I/postgresql.conf
PartOf=postgresql.service
ReloadPropagatedFrom=postgresql.service
Before=postgresql.service

[Service]
Type=forking
# @: use "postgresql@%i" as process name
ExecStart=@/usr/bin/pg_ctlcluster postgresql@%i --skip-systemctl-redirect %i start
ExecStop=/usr/bin/pg_ctlcluster --skip-systemctl-redirect -m fast %i stop
ExecReload=/usr/bin/pg_ctlcluster --skip-systemctl-redirect %i reload
PIDFile=/var/run/postgresql/%i.pid
SyslogIdentifier=postgresql@%i
# prevent OOM killer from choosing the postmaster (individual backends will
# reset the score to 0)
OOMScoreAdjust=-900
# restarting automatically will prevent "pg_ctlcluster... stop" from working,
# so we disable it here. Also, the postmaster will restart by itself on most
# problems anyway, so it is questionable if one wants to enable external
# automatic restarts.
#Restart=on-failure
# (This should make pg_ctlcluster stop work, but doesn't:)
#RestartPreventExitStatus=SIGINT SIGTERM

[Install]
WantedBy=multi-user.target

Интересными директивами являются:

PartOf=postgresql.service
ReloadPropagatedFrom=postgresql.service

Если вы не знаете, где найти документацию по директиве systemd, вы можете проверить:man systemd.directives. Оттуда мы находим обе эти директивы в man systemd.unit.

Самая большая подсказка приходит, когда вы включаете службу:

sudo systemctl enable postgresql@9.6
Created symlink /etc/systemd/system/multi-user.target.wants/postgresql@9.6.service → /lib/systemd/system/postgresql@.service.

Собираем все воедино:

  • Символическая ссылка — это то, как systemdузнает, что нужно загружать PostgreSQL 9.6 при запуске сервера.
  • Директивы PartOf=и ReloadPropagatedFrom=обеспечивают, чтобы stop, start, restartи reloadв службе postgresqlприменялись ко всем связанным установленным экземплярам PostgreSQL.
1
29.02.2020, 12:10
1 ответ

UUID должны быть универсально уникальными не только в вашей системе, но и везде.

Дублирование UUID приведет к путанице, монтированию неправильных устройств без вашего ведома; вы должны обязательно изменить их. Обычно это довольно легко сделать, большинство вещей, которые используют UUID, также предоставляют способ их изменить. Найдите соответствующие справочные страницы.

Изменить UUID для LUKS:

cryptsetup luksUUID --uuid=$(uuidgen) /dev/thing

Изменить UUID для зашифрованной файловой системы ext4:

tune2fs -U random /dev/mapper/encryptedthing

Что касается других ваших проблем, совершенно неясно, что там произошло, возможно, вы использовали ddнеправильно или запустили его, когда файловая система была смонтирована и в нее выполнялась запись, что привело к повреждению копии. В этом случае вам следует подумать о том, чтобы сделать это полностью.

0
28.04.2021, 23:21

Теги

Похожие вопросы