Не удается восстановить резервную копию из CLI

Здравствуйте,

Я пытаюсь восстановить резервную копию, но постоянно получаю эту ошибку:

Starting restore: blackiron-2022-12-03-163112-v20221201035918.tar.gz
[STARTED]
'system' has started the restore!
Marking restore as running...
Making sure /var/www/discourse/tmp/restores/default/2023-11-28-040817 exists...
Copying archive to tmp directory...
Unzipping archive, this may take a while...
EXCEPTION: /var/www/discourse/lib/discourse.rb:138:in `exec': Failed to decompress archive.

gzip: stdin: unexpected end of file
tar: Unexpected EOF in archive
tar: Unexpected EOF in archive
tar: Error is not recoverable: exiting now
/var/www/discourse/lib/discourse.rb:172:in `execute_command'
/var/www/discourse/lib/discourse.rb:138:in `exec'
/var/www/discourse/lib/discourse.rb:34:in `execute_command'
/var/www/discourse/lib/backup_restore/backup_file_handler.rb:78:in `decompress_archive'
/var/www/discourse/lib/backup_restore/backup_file_handler.rb:23:in `decompress'
/var/www/discourse/lib/backup_restore/restorer.rb:42:in `run'
script/discourse:149:in `restore'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.0/lib/thor/command.rb:28:in `run'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.0/lib/thor/invocation.rb:127:in `invoke_command'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.0/lib/thor.rb:527:in `dispatch'
/var/www/discourse/vendor/bundle/ruby/3.2.0/gems/thor-1.3.0/lib/thor/base.rb:584:in `start'
script/discourse:290:in `<top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:58:in `load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:58:in `kernel_load'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/cli/exec.rb:23:in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:492:in `exec'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:34:in `dispatch'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/cli.rb:28:in `start'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/exe/bundle:45:in `block in <top (required)>'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/lib/bundler/friendly_errors.rb:117:in `with_friendly_errors'
/usr/local/lib/ruby/gems/3.2.0/gems/bundler-2.4.13/exe/bundle:33:in `<top (required)>'
/usr/local/bin/bundle:25:in `load'
/usr/local/bin/bundle:25:in `<main>'
Trying to rollback...
There was no need to rollback
Cleaning stuff up...
Removing tmp '/var/www/discourse/tmp/restores/default/2023-11-28-040817' directory...
Marking restore as finished...
Notifying 'system' of the end of the restore...
Finished!
[FAILED]
Restore done.

Не понимаю, почему выводится это сообщение, ведь резервная копия не менялась с момента её скачивания. Спасибо.

Та же ошибка в веб-версии.

Вероятно, это критическая ошибка. Вы пробовали проверить, не повреждена ли резервная копия? Думаю, это сработает:

$ gunzip -c  blackiron-2022-12-03-163112-v20221201035918.tar.gz | tar -t > /dev/null

Та же проблема. Я не могу создать новую резервную копию, так как конфигурация RAID для сервера давно утеряна, но мне нужны эти данные.

image

Проверено внутри резервной копии. Похоже, что всё в порядке.

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

Резервная копия находится на моём компьютере под управлением Windows, и я использую scp:

scp blackiron-2022-12-03-163112-v20221201035918.tar.gz root@#.#.#.#:/var/discourse/shared/standalone/backups/default

Совпадают ли контрольные суммы в обоих файлах? (Инструкции по генерации контрольной суммы здесь.)

Кажется, да. Я продолжу поиск с помощью WinRAR, но буду признателен за любые ваши предложения. Там я тоже получаю то же предупреждение, но в VSCode всё отображается корректно.

Если это поможет, pigz показывает:

/blackiron-2022-12-03-163112-v20221201035918.tar.gz в <stdout> pigz: пропуск: /blackiron-2022-12-03-163112-v20221201035918.tar.gz: повреждён — неполные данные сжатия deflate

У меня там не так много опыта. Если у вас есть копия файлов, вы должны создать новый файл резервной копии и заменить им старый.

Я пытался написать свой собственный скрипт для исправления, но это не сработало.

Также я не эксперт в работе с gzips, поэтому мало что могу сделать. Если кто-то другой знает, как я могу восстановить их с полным доступом к SQL-скрипту и загрузкам, пожалуйста, дайте знать. SQL-скрипт выглядит нормально с первого взгляда, и загрузки тоже в порядке.

Обновление: Мне удалось успешно восстановить более старую версию сайта, примерно за 2 месяца. Всё ещё пытаюсь загрузить новую (более свежую) версию.

Это хорошие новости. Я нашел предложение использовать The gzip Recovery Toolkit, которое звучит многообещающе.

Следовал этой инструкции, переместил файл и получил эту ошибку:

root@ftsweb-app:/var/www/discourse# discourse restore blackiron-2022-12-03-163112-v20221201035918.tar.gz
Начало восстановления: blackiron-2022-12-03-163112-v20221201035918.tar.gz
[ЗАПУЩЕНО]
Система начала восстановление!
Отметка восстановления как запущенного...
Проверка существования /var/www/discourse/tmp/restores/default/2023-11-28-060452...
Копирование архива во временный каталог...
ИСКЛЮЧЕНИЕ: /var/www/discourse/lib/discourse.rb:138:in `exec': Не удалось скопировать архив во временный каталог.
cp: невозможно открыть для чтения '/var/www/discourse/public/backups/default/blackiron-2022-12-03-163112-v20221201035918.tar.gz': Отказано в доступе

Скорее всего, файл принадлежит другому пользователю. Команда ls -l /var/www/discourse/public/backups/default/blackiron-2022-12-03-163112-v20221201035918.tar.gz должна показать проблему, вероятно.

Там сказано, что владельцем является root. Нужно ли мне изменить владельца на пользователя discourse?

Редактирование: похоже, что инструмент нанес ещё больший ущерб.