为重新安装的操作系统重新创建 zfs 池

为重新安装的操作系统重新创建 zfs 池

我需要为 zfs root 安装的系统更换磁盘。

以前是(在出于测试目的重新安装操作系统之前,这也是我想在安装后完成的):

使用 zpool Attach rpool /dev/sda2 /dev/sdb 创建镜像

NAME        STATE     READ WRITE CKSUM
    rpool       ONLINE       0     0     0
   mirror-0  ONLINE       0     0     0
      sda2      ONLINE       0     0     0
       sdb      ONLINE       0     0     0

我重新安装了操作系统:

NAME        STATE     READ WRITE CKSUM
    rpool       ONLINE       0     0     0
      sda2      ONLINE       0     0     0

sdb 保存数据...

    pool: rpool-12312656247996879599
     id: 12312656247996879599
    state: DEGRADED
 status: One or more devices contains corrupted data.
 action: The pool can be imported despite missing or damaged devices.  The
        fault tolerance of the pool may be compromised if imported.
   see: http://zfsonlinux.org/msg/ZFS-8000-4J
 config:
        rpool-12312656247996879599  DEGRADED
          mirror-0  DEGRADED
            sda2    FAULTED  corrupted data
            sdb     ONLINE

我想在重新安装操作系统后创建镜像并将数据从 sdb 同步到当前镜像。重新安装操作系统后,我分别拥有一个 rpool 和一个 sdb 池。我可以在两个池上发送/接收数据并销毁 sdb 池并附加到 rpool 并制作镜像。但想知道是否有任何方法无需手动同步文件(发送/接收)并将池中的 sdb 附加到 rpool 而不破坏它?

答案1

您已将磁盘sda2从旧池中取出,擦除其内容并在其上安装新池(包含新系统)。由于这是一个冗余 vdev(镜像),因此您本质上有两个不同的池,每个池都有一个磁盘(意味着没有容错能力)。您仍然有两种选择 - 使用新的或恢复旧的:


如果您想放弃旧池并使用新安装 ( sda2),请按照这些步骤:

  • 格式化磁盘sdb,删除上面的所有数据
  • 将格式化的磁盘附加到新池:zpool attach rpool sda2 sdb
  • 等待重新同步完成,检查zpool status rpool
  • 复制引导扇区数据,以便系统可以从两个磁盘引导(假设您使用 GRUB):installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/sdb

如果您想放弃新池并返回到(降级的)旧池 ( sdb):

  • 关闭系统并物理删除磁盘sda2
  • 启动系统,它现在应该将您的旧池识别为有效的可引导根池(仅当您之前已将引导扇区添加到该磁盘时才有效,类似于上面的步骤,否则您将收到引导错误)
  • 将磁盘重新物理连接sda2到系统并对其进行格式化
  • 将您的磁盘附加sda2到旧池:zpool attach rpool sdb sda2

如果您有 Solaris/illumos 系统,您还可以(在将来,而不是在本例中)用于beadm就地执行升级、测试和恢复(在同一个快照内rpool,但在不同的快照上)。这样,您就可以在不暂时放弃冗余的情况下进行恢复。

相关内容