我需要为 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
,但在不同的快照上)。这样,您就可以在不暂时放弃冗余的情况下进行恢复。