Восстановление кластера БД при помощи драйвера FUSE
Исполнять сценарий необходимо от имени пользователя postgres.
Описание сценария
Решение, позволяющее восстанавливать кластер СУБД непосредственно из смонтированного каталога PGDATA (архив CWL), минуя полное восстановление (используя драйвер FUSE).
Чтобы восстановить экземпляр базы данных, используют команду copywala restore. Этот метод требует полной распаковки всего архива, что занимает значительное время и может оказаться крайне неудобным, особенно если необходимо быстро провести диагностику ошибок, возникающих при эксплуатации экземпляра.
Команда copywala fuse задействует механизм FUSE (Filesystem in Userspace, файловая система в пространстве пользователя), монтируя виртуальное представление каталога РК. Система воспринимает этот смонтированный каталог так же, как обычный каталог PGDATA, а все обращения к файловой системе перенаправляются в соответствующие файлы резервной копии. Поскольку изменения записываются лишь в промежуточный кеш, сама резервная копия остается неизменной. Операции осуществляются исключительно в режиме чтения.
:align: center
:::
Последовательность выполнения
-
Остановите текущий экземпляр базы данных:
sudo su - postgres
pg_ctl stop -
Создайте каталог для последующего монтирования:
mkdir /mnt/restore_dir
chmod 700 /mnt/restore_dir
chown postgres:postgres /mnt/restore_dir -
Запустите команду для монтирования архива через CLI copywala:
copywala fuse <mount-directory> <archive-uri-or-path> [--cache-swap-size | размер кеша подкачки][--cache-dir | путь к директории с выгружаемым кешем ]Для стабильной работы файловой системы, смонтированной через FUSE, важно установить ряд ключевых параметров:
- Флаг
cache-swap-size - Флаг
cache-dir
cache-swap-size– размер данных, выгружаемых из архива CWL и хранимых в оперативной памяти. При превышении указанного объема данные, находящиеся в памяти, выгружаются на диск в директорию, указанную в параметреcache-dir. По окончании работы временные данные автоматически удаляются (по умолчанию 256 МБ)cache-dir– директория, в которую переносятся на диск данные из оперативной памяти при превышении значенияcache-swap-size. Значение по умолчанию —/tmp.Пример запуска команды:
$ copywala fuse /pgdata/06/data database_backup.cwl
2025-09-22 12:56:24.313 INF start fuse mounting mount_path=/pgdata/06/data cache_swap_size=268435456 cache_dir=/tmp - Флаг
-
Откройте новое окно терминала под пользователем postgres.
-
Запустите экземпляр базы данных, указывая смонтированную директорию
pg_ctl start -D <mount-directory> -
По завершении использования остановите экземпляр базы данных:
pg_ctl stop -D <mountpath> -
Вернитесь в терминал с командой
copywala fuseи завершите ее работу.
Результат
В результате выполнения команды будет обеспечено восстановление базы данных с использованием технологии FUSE.
Исключительные сценарии
- Не удалось установить подключение к смонтированному каталогу.
- Недостаточно оперативной памяти.
- Ошибка в назначении прав доступа к файлам.