Linux 上 ZFS 磁盘替换最佳实践

Linux 上 ZFS 磁盘替换最佳实践

我有一个 8 盘位 NAS,运行 Fedora 29(内核版本 4.20.8)和 zfs 版本 0.7.12。所有驱动器盘位都用于名为“tank”的 zfs 池。以下是 zpool 布局:

tank
  mirror-0
    sda
    sdb
  mirror-1
    sdc
    sdd
  mirror-2
    sde
    sdf
  cache
    sdg
  spare
    sdh

其中一个驱动器 (sdb) 因未更正的脱机重新分配扇区而未通过 SMART 测试,但“zpool status”仍显示为“ONLINE”。我想用新驱动器 (sdi) 物理替换 sdb。

由于没有可用的物理托架,我计划使用以下方法更换驱动器:

 zpool offline tank sdb
 zpool replace tank sdb sdh
 zpool detach tank sdb
 echo 1 | sudo tee /sys/block/sdb/device/delete
 # Remove the physical hard drive associated with sdb and plug in new physical drive mapped to sdi

我不知道如何才能最好地继续下去。是否最好:(a) 只添加 sdi 作为新的备用(让 sdh 永久替代 sdb) zpool add tank spare sdi (b) 用 sdi 替换 sdh,并让 sdh 返回备用驱动器池?

 zpool replace tank sdi sdh
 zpool detach tank sdh

在这种情况下,“更好”意味着今后的管理复杂性更低(例如,如果在应用选项 (a) 时 sdh 出现故障,那么由于 sdh 曾经是备用的,因此“分离”或其他命令是否会失败或产生意外结果?)?此外,我不确定选项 (b) 下的步骤是否遗漏或不正确。

笔记:

  1. 简化池名称(例如 vdev 是映射 ID)
  2. 知道内核/zfs 已经过时了,但在升级之前解决这个故障驱动器
  3. 控制卡和托架支持热插拔
  4. 搜索并阅读了有关 ZoL 磁盘替换以及 Oracle 文档的主题,但没有看到有关最佳实践的主题(如果我错过了,请见谅)

答案1

总的来说,这两个选项没有区别——驱动器是可以互换的。“只需添加sdi为新备用”需要更少的步骤,并最大限度地减少您在重新同步状态下所花费的时间,因此这是自然的选择。

答案2

首先创建一个好的备份。

然后

1:(将故障驱动器脱机:) zpool offline tank sdb

2:(将 sdb 替换为 sdi:) zpool replace tank sdb sdi

3:分离旧驱动器(sdh): zpool detach tank sdh

相关内容