Бывает проблема когда кто-то по ошибке или умышленно удаляет WAL-файлы и после этого PostgreSQL не стартует. Понимаю, что без WAL состояние базы неконсистентное. Понимаю, что можно принудительно заставить PostgreSQL стартануть без WAL и попытаться что-то вытащить из базы. Но это все не панацея. Поэтому решил рассмотреть другой путь: чаще всего на моих серверах в качестве файловой системы используется ext4 и xfs.
Решил провести эксперимент:
- Поднимаю виртуалку на Rocky 9 (отдельный раздел под
/var/lib/pgsql
). - Устанавливаю PostgreSQL 16 из стандартных репозиториев.
- Создаю пустую базу, в ней таблица с 2 полями, в таблицу помещаю тестовую запись.
- Останавливаю PostgreSQL.
- Удаляю WAL-файл из
/var/lib/pgsql/16/data/pg_wal
. - Отмонтирую
/var/lib/pgsql
. - Пытаюсь восстановиться.
Итог:
- extundelete не видит удаленный файл (искал по имени и размеру)
- xfs_undelete не видит удаленный файл (искал по имени и размеру)
- R-Studio не видит удаленный файл (искал по имени и размеру)
При этом, если создать какой-нибудь текстовый файл и удалить его, то все средства восстановления видят и восстанавливают файл.
Имхо, условия максимально комфортные для восстановления. Что я делаю не так?