Восстановление снапшотов без snap-snapshot*.dat фалов

На elasticsearch версии 2.4 были созданы снапшоты индексов. Добавлены в архив файлы из папки indices/name-index и meta-name-index.dat. Файл snap-snapshot-index-name.dat добавлен не был.

Возможно ли восстановить снапшот без файла snap-snapshot-index-name.dat? Или же отредактировать похожий файл у другого индекса, чтобы был годен для восстановления снапшота?

На сколько я помню, в версии 2.4 файла snap-snapshot-index-name.dat не было. Структура в 2.4 примерно такая:

my_backup
├── index
├── indices
│   └── index_name
│       ├── 0
│       │   ├── __?????
│       │   ├── __?????
│       │   ├── __?????
│       │   ├── index-?
│       │   └── snap-snapshot_name.dat
│       ├── 1
│       │   ....
│       ├── 2
│       │   ....
│       ├── 3
│       │   ....
│       ├── 4
│       │   ....
│       └── meta-snapshot_name.dat
├── meta-snapshot_name.dat
└── snap-snapshot_name.dat

Какой файл не был добавлен? snap-snapshot_name.dat на уровней шард?

Вы правы. Я ошибся. В вашем примере структуры директории - интересует последний файл - snap-snapshot_name.dat (который идет после meta-snapshot_name.dat). Этот файл был удален, а все все остальное - нет. Возможно ли восстановление снапшота без этого файла?

P.S.
Сам снапшот тоже был удален из эластика командой:
DELETE /_snapshot/my_backup/snapshot-name

В итоге, структура архива такая:

my_backup
├── indices
│   └── index_name
│       ├── 0
│       │   ├── __?????
│       │   ├── __?????
│       │   ├── __?????
│       │   ├── index-?
│       │   └── snap-snapshot_name.dat
│       ├── 1
│       │   ....
│       ├── 2
│       │   ....
│       └── meta-snapshot_name.dat
├── meta-snapshot_name.dat

Восстановить снапшот без этого файла напрямую нельзя. Но, теоретически, если очень нужно, то этот файл можно воссоздать, так как он, по сути, никакой особо ценной информации не содержит. Все что в нем содержится - это имя снапшота, список индексов, состояние снапшота и всякая статистика. Статистика для восстановления - не нужна, имя снапшота и индекса - вы знаете. Проблема только в воссоздании файла в нужном формате. Проще всего, наверное, будет сделать новый кластер из одного узла с версией 2.4, создать в этом кластере нужный индекс, сделать файловый снапшот с этим индексом с тем-же именем снапшота, и перенести этот файл в архив. Думаю, что это должно сгенерировать совместимый э.datэ файл.

Тут вот, что еще надо учесть. Вы знаете, почему этот файл не был добавлен? Это была ошибка пользователя или этого файла в репозитории не было. В 2.4 была такая проблема, что если в процессе удаления снапшота возникали какие-нибудь ошибки, то репозиторий мог остаться в таком состоянии, что snap-snapshot_name.dat отуствовал, когда как некоторые другие файлы все еще оставались. Если это ваша ситуация, то полное восстановление может не произойти, даже если вы восстановите snap-snapshot_name.dat, как я показал выше.

1 Like

Вы знаете, почему этот файл не был добавлен?
Знаю. Это моя ошибка. Файл не был добавлен по невнимательности и заметил это позже.

Без этого файла в версии 2.4 - восстановить снапшот не получается. Я создал другой индекс, создал его снапшот (файл snap-snapshot_name.dat появился при создании снапшота) и попробовал восстановить на другом эластике с версией 2.4 без файла snap-snapshot_name.dat - не получилось. Если же добавить данный файл - восстановление происходит удачно.

Попробую проделать трюк с созданием индекса в другом кластере. По результату отпишусь.

Ваш способ помог восстановить снапшот. Спасибо.

  1. на другом кластере эластика (копии) были созданы индексы, что входили в снапшот, сделанные в оригинальном кластере
  2. был сделан снапшот индексов на кластере-копии
  3. из снапшота-копии забрал только snap-snapshot_name.dat файл и добавил его к снапшоту, что был сделан на оригинальном кластере
  4. на кластере копии удалил созданные индексы, удалил снапшот
  5. скопировал оригинальный снапшот (с файлом snap-snapshot_name.dat из снапшота копии) и попытался восстановить - удачно.