![Linux 上 ZFS 磁盘替换最佳实践](https://linux22.com/image/790787/Linux%20%E4%B8%8A%20ZFS%20%E7%A3%81%E7%9B%98%E6%9B%BF%E6%8D%A2%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5.png)
我有一个 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) 下的步骤是否遗漏或不正确。
笔记:
- 简化池名称(例如 vdev 是映射 ID)
- 知道内核/zfs 已经过时了,但在升级之前解决这个故障驱动器
- 控制卡和托架支持热插拔
- 搜索并阅读了有关 ZoL 磁盘替换以及 Oracle 文档的主题,但没有看到有关最佳实践的主题(如果我错过了,请见谅)
答案1
总的来说,这两个选项没有区别——驱动器是可以互换的。“只需添加sdi
为新备用”需要更少的步骤,并最大限度地减少您在重新同步状态下所花费的时间,因此这是自然的选择。
答案2
首先创建一个好的备份。
然后
1:(将故障驱动器脱机:)
zpool offline tank sdb
2:(将 sdb 替换为 sdi:)
zpool replace tank sdb sdi
3:分离旧驱动器(sdh):
zpool detach tank sdh