Резервная копия Galleon состоит из трёх частей — все три обязательны:

  • База данных PostgreSQL — каталог артефактов всех форматов (включая метаданные образов контейнеров), пользователи и права, настройки.
  • Каталог хранилища (storage.default.local.root целиком: blobs/, docker/ и маркер galleon-storage.json) — содержимое артефактов.
  • Файл ключей шифрования (security.secret_key_file) — без него дамп базы не восстановим: не расшифруются учётные данные внешних реестров и служебные секреты (Секреты и ключ шифрования).

Резервная копия одной только базы данных бесполезна: без каталога хранилища не будет самих артефактов, без файла ключей — доступа к зашифрованным настройкам.

Порядок снятия копии

Правило согласованности: база данных никогда не должна опережать хранилище.

Лишние файлы в хранилище без записей в базе только занимают место; записи в базе без файлов в хранилище означают потерянные артефакты: каждое скачивание такого артефакта завершается ошибкой.

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

Идущая параллельно сборка мусора может нарушить это правило: если между дампом базы и копией хранилища кто-то удалит артефакт, сборка мусора успеет удалить и файл, на который ссылается уже снятый дамп.

Удалённое содержимое остаётся на диске не меньше gc.grace_period (по умолчанию сутки), поэтому копирование, которое укладывается в этот срок, согласовано само по себе.

Если окно копирования длиннее grace-периода или он уменьшен, приостановите сборку мусора на время работ кнопкой «Приостановить» на странице «Настройки» → «Сборка мусора» (Хранилище и сборка мусора). То же самое можно сделать запросом к API, если копирование запускается скриптом. Пауза останавливает и плановые циклы, и ручной запуск. Она действует ограниченное время, по умолчанию сутки, и снимается автоматически, поэтому забытая пауза не остановит освобождение места навсегда. Кнопка «Возобновить» снимает её сразу, как только копирование закончено.

Обе копии можно снять и атомарными снимками на один момент времени (LVM, ZFS, облачные снимки), приостановив запись.

Восстановление

Порядок восстановления:

  1. Восстановите файл ключей — тот же, что действовал на момент копии.
  2. Восстановите базу данных.
  3. Восстановите каталог хранилища — копией, снятой одновременно с дампом базы данных или позже. Копия хранилища, снятая раньше дампа, оставит записи, для которых нет файлов, и такие артефакты перестанут скачиваться.
  4. Перезапустите все серверы инстанса.

Каталог хранилища восстанавливайте вместе с маркером galleon-storage.json: без него сервер не стартует.

Восстанавливайте базу целиком: выборочное восстановление отдельных таблиц рассинхронизирует служебные секреты, каталог артефактов и метаданные образов. Лишние файлы хранилища, попавшие в копию, останутся на диске: сборка мусора их не удаляет. Удалять их вручную нельзя (Хранилище и сборка мусора).