При работе с базами данных 1С:Предприятие на операционной системе Astra Linux Special Edition 1.7 системные администраторы часто сталкиваются с критическим сбоем при попытке создать резервную копию. При выполнении стандартной команды pg_dump процесс аварийно завершается с сообщением "free: double free detected in tcache 2". Рассмотрим подробно, почему это происходит и как обеспечить стабильное резервное копирование вашей информационной базы.
Проанализируем техническую сторону вопроса. Ошибка double free detected in tcache генерируется системной библиотекой glibc. Она означает, что программа пытается дважды освободить один и тот же участок оперативной памяти. В большинстве обычных дистрибутивов Linux (таких как Debian или Ubuntu) подобные недочеты в коде могут игнорироваться, однако Astra Linux 1.7 обладает повышенными требованиями к безопасности (уровень доверия №1 ФСТЭК).
В этой ОС включены усиленные механизмы контроля целостности памяти. Как только приложение (в нашем случае pg_dump) совершает некорректную операцию с указателями, ядро системы немедленно прерывает процесс во избежание эксплуатации потенциальных уязвимостей. Ситуация усугубляется при использовании PostgreSQL 11.10 из стандартного репозитория Astra, который содержит специфические патчи для поддержки мандатного управления доступом (МРД), иногда конфликтующие со структурами данных 1С.
Прежде чем переходить к сложным манипуляциям, нам необходимо убедиться, что система находится в актуальном состоянии. Разработчики Astra Linux оперативно выпускают оперативные обновления (Cumulative Updates), которые исправляют ошибки в системных библиотеках и штатных пакетах PostgreSQL.
Выполним последовательность команд для полного обновления системы:
sudo apt update
sudo apt full-upgrade
sudo apt autoremove
После обновления обязательно перезагрузите сервер. Проверьте версию установленного PostgreSQL. Если после установки последних обновлений (например, Update 2 или 3 для Astra 1.7) ошибка сохраняется, перейдем к более радикальным методам.
Как показывает практика эксплуатации 1С в защищенных средах, стандартные версии PostgreSQL из репозиториев ОС не всегда учитывают специфику работы платформы 1С:Предприятие. Посмотрим на альтернативный вариант — использование сборок от компании Postgres Professional, которые адаптированы под требования 1С и корректно работают в Astra Linux.
Для настройки выполним следующие шаги:
postgrespro-1c-11 или postgrespro-1c-14).Сборки с суффиксом -1c содержат необходимые патчи для работы с типами данных 1С и, что более важно, протестированы на совместимость с механизмами защиты Astra Linux, что исключает появление ошибок типа double free.
Если вам необходимо срочно сделать выгрузку, а времени на переустановку СУБД нет, можно воспользоваться "костылем", который снижает строгость проверок аллокатора памяти для конкретной команды. Рассмотрим, как запустить pg_dump с игнорированием ошибок памяти:
export MALLOC_CHECK_=0 && pg_dump -U postgres base > /backup/base.sql
Параметр MALLOC_CHECK_=0 заставляет библиотеку glibc игнорировать повреждения кучи. Важно: этот метод не рекомендуется использовать на постоянной основе, так как он не устраняет причину ошибки, а лишь маскирует её. Полученный таким образом файл бэкапа следует обязательно проверить на валидность путем тестового восстановления на другом сервере.
Выясним причину, по которой pg_dump может быть не лучшим выбором. pg_dump — это логический бэкап, который перебирает все записи во всех таблицах. На больших базах 1С это создает колоссальную нагрузку и часто приводит к ошибкам памяти. Более надежным и современным способом является физическое резервное копирование.
Проанализируем преимущества использования инструмента pg_probackup:
Для создания бэкапа через pg_probackup процедура выглядит так:
pg_probackup-11 init -B /backup/dir.pg_probackup-11 add-instance -B /backup/dir -D /var/lib/postgresql/11/main --instance=mybase.pg_probackup-11 backup -B /backup/dir --instance=mybase -b FULL.Иногда ошибка может быть вызвана некорректной интерпретацией параметров командной строки. Попробуем использовать более явное указание параметров подключения через строку соединения (Connection String), как советуют опытные администраторы:
pg_dump "host=127.0.0.1 port=5432 dbname=base_1c user=postgres password=my_pass" > /home/admin/backup_$(date '+%d-%m-%Y').sql
Использование host=127.0.0.1 заставляет pg_dump работать через TCP/IP стек вместо UNIX-сокетов, что в некоторых конфигурациях Astra Linux позволяет обойти ограничения прав доступа и специфические ошибки библиотек.
Ошибка double free в Astra Linux — это сигнал о том, что системная защита пресекла некорректную работу с памятью. Для стабильной работы 1С мы рекомендуем отказаться от штатного PostgreSQL 11 в пользу сертифицированных версий от Postgres Pro и внедрить систему физических бэкапов. Это не только решит проблему с падением pg_dump, но и значительно ускорит процесс восстановления данных в случае аварии.