备份还原失败,原因在于 .tar 与 .tar.gz 文件扩展名不一致

您好,能否告知恢复备份时可能出现的问题?
备份创建于 2019-09-03

任何建议都将不胜感激 :heart:

> root@discourse-beta-ubuntu-s-1vcpu-1gb-sgp1-01-app:/var/www/discourse# discourse restore entc-bme-forum-2019-09-03-194746-v20190603134013.tar.gz
> 开始恢复:entc-bme-forum-2019-09-03-194746-v20190603134013.tar.gz
> [已开始]
> 'system' 已启动恢复!
> 正在将恢复标记为运行中...
> 正在确保 /var/www/discourse/tmp/restores/default/2020-03-28-174121 存在...
> 正在将归档文件复制到 tmp 目录...
> 正在解压归档文件,这可能需要一些时间...
> 异常:文件已存在 - /shared/tmp/restores/default/2020-03-28-174121/PaxHeader
> /usr/local/lib/ruby/2.6.0/fileutils.rb:525:in `block in mv'
> /usr/local/lib/ruby/2.6.0/fileutils.rb:1557:in `block in fu_each_src_dest'
> /usr/local/lib/ruby/2.6.0/fileutils.rb:1566:in `block in fu_each_src_dest0'
> /usr/local/lib/ruby/2.6.0/fileutils.rb:1564:in `each'
> /usr/local/lib/ruby/2.6.0/fileutils.rb:1564:in `fu_each_src_dest0'
> /usr/local/lib/ruby/2.6.0/fileutils.rb:1555:in `fu_each_src_dest'
> /usr/local/lib/ruby/2.6.0/fileutils.rb:520:in `mv'
> /var/www/discourse/lib/compression/strategy.rb:41:in `strip_directory'
> /var/www/discourse/lib/backup_restore/backup_file_handler.rb:70:in `decompress_archive'
> /var/www/discourse/lib/backup_restore/backup_file_handler.rb:22:in `decompress'
> /var/www/discourse/lib/backup_restore/restorer.rb:42:in `run'
> script/discourse:143:in `restore'
> /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/command.rb:27:in `run'
> /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/invocation.rb:127:in `invoke_command'
> /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor.rb:392:in `dispatch'
> /var/www/discourse/vendor/bundle/ruby/2.6.0/gems/thor-1.0.1/lib/thor/base.rb:485:in `start'
> script/discourse:284:in `<top (required)>'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `load'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:63:in `kernel_load'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli/exec.rb:28:in `run'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:476:in `exec'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor.rb:399:in `dispatch'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:30:in `dispatch'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/vendor/thor/lib/thor/base.rb:476:in `start'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/cli.rb:24:in `start'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:46:in `block in <top (required)>'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/lib/bundler/friendly_errors.rb:123:in `with_friendly_errors'
> /usr/local/lib/ruby/gems/2.6.0/gems/bundler-2.1.4/exe/bundle:34:in `<top (required)>'
> /usr/local/bin/bundle:23:in `load'
> /usr/local/bin/bundle:23:in `<main>'
> 正在尝试回滚...
> 无需回滚
> 正在清理临时文件...
> 正在删除 tmp 目录 '/var/www/discourse/tmp/restores/default/2020-03-28-174121'...
> 正在取消暂停 sidekiq...
> 正在将恢复标记为完成...
> 正在通知 'system' 恢复已结束...
> 完成!
> [失败]
> 恢复结束。

首先,问题是存档是一个 .tar 文件,但我已将其重新压缩为 .tar.gz

为什么需要对 Discourse 创建的备份文件进行修改?您是在 macOS 上手动创建 tar 文件吗?有报告指出,macOS 使用的 tar 格式不同,导致解压时出现问题。

您可能需要使用 --format ustar 选项重新创建 tar 文件,或者更好的方法是,直接在 Discourse Docker 容器中创建新的备份。

我几个月前下载了之前托管的 Discourse 的备份。当我找到它时,它的扩展名是 .tar(我不知道为什么——我看到我的邮件是 .tar.gz 格式)。

我会试试你的建议!
非常感谢 @gerhard

我也遇到了同样的问题,并尝试了此操作。文件上传正常,但恢复时找不到数据库转储:

[2025-01-23 18:39:45] EXCEPTION: No such file or directory @ rb_check_realpath_internal - /var/www/discourse/tmp/restores/default/2025-01-23-183945/dump.sql.gz

有什么建议吗?谢谢。

嘿 Martim,

我看到了你的新主题 https://meta.discourse.org/t/locked-out-of-my-forum-after-restore/348684,这是否意味着你已经成功解决了这个具体问题?

它确实有!抱歉,我以为我已经删除了我的评论,因为我在不久后就恢复了。