AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 1145532
Accepted
rptb1
rptb1
Asked: 2023-10-10 01:15:42 +0800 CST2023-10-10 01:15:42 +0800 CST 2023-10-10 01:15:42 +0800 CST

升级到 Ubuntu 22 后,ZFS 发送/接收可以帮助我从部分池丢失中恢复吗?

  • 772

我在 Ubuntu 下有一个长期运行的 ZFS 池,它已经经历了多次升级。从 Ubuntu 20 升级到 22 后,加密的文件系统拒绝挂载,但其余的似乎都正常。 在加密文件系统的根部zpool status -v报告永久错误ZFS-8000-8A 。我注意到 zfsutils-linux 的软件包版本从 0.8.3 到 2.1.5 有一个很大的跳跃。

该池仍然可以导入到 Ubuntu 20 系统,并且加密的文件系统仍然可以安装在那里。看起来还不错。更重要的是,我可以zfs send在 Ubuntu 20 和zfs receiveUbuntu 22 上进行操作,并取得了明显的成功。

如果我将zfs send整个池(或部分操作)从 Ubuntu 20 (ZFS 0.8.3) 升级到 Ubuntu 22 (ZFS 2.1.5) 并且操作成功,我是否会创建一个没有升级问题的池?也就是说,接收操作是否会构建一个与 ZFS 完全同步的池?或者链接是否会出现兼容性问题?

我对 zfs 发送/接收操作的级别了解不够,无法确保在 Ubuntu 22 下不会出现进一步的损坏。

如果有必要,我很乐意重新加密加密的文件系统,而不是发送原始文件。一切都将在本地发生。在本例中,Ubuntu 20 在连接了磁盘设备的 LXD VM 中运行,并且发送/接收管道不跨越任何网络。

请注意,我知道废弃整个池并从备份中恢复它的建议。我正在尝试恢复而不必诉诸于此,因为我似乎能够读取池。

所有磁盘都通过了长时间的 SMART 测试,并且在 Ubuntu 20 下清理池没有显示任何错误。

我很高兴被告知(带有引用)该错误仅限于加密文件系统,我可以替换它们并继续,而无需重建整个池,但我对 ZFS 内部结构了解不够,无法确定那。我很想知道如何找到答案。

zfs
  • 2 2 个回答
  • 68 Views

2 个回答

  • Voted
  1. shodanshok
    2023-10-10T03:36:45+08:002023-10-10T03:36:45+08:00

    首先,虽然从 0.8.3 到 2.1.5 的升级肯定是一个大升级,但它不应该以(部分)损坏的池结束。所以我建议打开一个 GitHub 问题(或写信到 zfs-discuss 邮件列表)。

    --raw也就是说,在没有或选项的情况下发送池--compress肯定是获取所有数据的好策略:完整zfs send与逻辑上遍历整个池非常相似,例如rsync(在记录大小处理方面存在重要差异,但对于关于加密)。

    如果失败,您可以rsync在两个池/数据集之间使用简单的方法。

    • 1
  2. Best Answer
    rptb1
    2023-10-12T12:51:39+08:002023-10-12T12:51:39+08:00

    我已经解决了这个问题,并在 zfs-discuss 邮件列表上发布了详细信息。我会将信息发布在这里,以防对其他人有帮助。我的解决方案确实涉及长时间的服务器停机。Ubuntu bug #1987190中提供了一些补丁,如果您不能容忍这种情况,它们可能会工作得更好。

    我在 GitHub 上发现了几个与我的问题相关的 ZFS 问题:

    • 升级后安装加密 fs 时出现 I/O 错误

    • 无法安装文件系统:输入/输出错误

    • 通过清理清理在以下文件中检测到永久性错误,没有其他错误

    该错误与使用旧 ZFS 版本的本机加密创建的文件系统中的元数据有关。

    我是这样修复水池的:

    1. 使用新的 ZFS 池在外部驱动器上安装 Ubuntu 22,并在该驱动器上启动服务器。

    2. 在该系统的 VM 中运行 Ubuntu 20,并将服务器的池成员磁盘附加到该 VM。

    3. 将旧池导入到虚拟机中。

    4. 在虚拟机中挂载“损坏的”文件系统。

    5. zfs 从 VM 中的旧池发送到主机系统中新池中的 zfs 接收。这修复了元数据。

    6. 检查、再检查、确认所有数据均已完成。(我在 .zfs/snapshot 中的关键快照上使用了 rsync -n --checksum。)

    7. 扩展 SMART 测试并对旧池进行全面擦洗。

    8. 将服务器启动回 Ubuntu 22。无需回滚。

    9. 从外部磁盘导入新的 ZFS 池。

    10. 销毁损坏的文件系统。

    11. zfs 从新池发送到旧池,重新创建损坏的文件系统。

    我这样做是因为我对旧水池的完整性感到怀疑,并且不想过多地碰它。事实上,我认为我可以继续在 Ubuntu 22 的旧池上运行服务器,并在服务器上启动 Ubuntu 20 VM。但是,如果操作系统本身的文件系统损坏,这当然会失败。

    我希望这可以帮助其他人解决这个问题。

    • 1

相关问题

  • 从现有目录创建 zfs 的正确方法?

  • 如何将 ZFS ACL 从一个文件克隆到另一个文件?

  • ZFS 在演示期间在舞台上失败。这是正常行为吗?

  • Sneakernet 作为备份策略有意义吗?

  • ZFS 与 XFS

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve