我有一个运行 Fedora 29(内核版本 4.20.8)和 zfs 版本 0.7.12 的 8 盘位 NAS。所有驱动器托架均用于名为“tank”的 zfs 池。这是 zpool 布局:
tank
mirror-0
sda
sdb
mirror-1
sdc
sdd
mirror-2
sde
sdf
cache
sdg
spare
sdh
其中一个驱动器 (sdb) 由于未更正的脱机重新分配扇区而未能通过 SMART 测试,但“zpool 状态”仍显示为“在线”。我想用新驱动器 (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
在这种情况下,“更好”意味着未来管理复杂性会降低(例如,如果 sdh 在应用选项 (a) 时出现故障,“分离”或其他命令是否会失败或产生意外结果,因为 sdh 曾经是备用设备?)?另外,我不确定选项(b)下的步骤是否遗漏/不正确。
笔记:
- 简化的池名称(例如 vdev 是映射的 ID)
- 知道内核/ zfs 很古老,但在升级之前解决此故障驱动器
- 控制卡和托架支持热插拔
- 搜索并阅读了有关 ZoL 磁盘替换的主题以及 Oracle 文档,但没有看到有关最佳实践的主题(如果我错过了,抱歉)
首先创建一个好的备份。
然后
1:(将故障驱动器脱机:)
zpool offline tank sdb
2:(用sdi替换sdb:)
zpool replace tank sdb sdi
3:分离旧驱动器(sdh):
zpool detach tank sdh
总而言之,这些选项之间没有区别——驱动器是可以互换的。“只需添加
sdi
为新的备用设备”需要更少的步骤,并最大限度地减少您在重新同步状态下花费的时间,因此这是自然的选择。