ZFS硬盘替换
起因
去年《配置smartmontools监控硬盘状态》这就派上用场了,前几天收到告警说服务器硬盘的smart自检有问题:
SMART error (FailedHealthCheck) detected on host: xxx
=====
This message was generated by the smartd daemon running on:
host name: xxx
DNS domain: xxx
The following warning/error was logged by the smartd daemon:
Device: /dev/sda [SAT], not capable of SMART self-check
Device info:
Micron_M600_xxxx, S/N:xxxx, WWN:x-xxxx-xxxx, FW:MU05, 1.02 TB
For details see host's SYSLOG.
You can also use the smartctl utility for further investigation.
Another message will be sent in 24 hours if the problem persists.
这块大船货的镁光M600号称库存全新实则清零的盘果然靠不住,才用了两年不到就出问题了……
赶紧下单买了一块机械硬盘,SSD还是风险大啊。结果到货一看,居然跟我之前报错的那块是同一型号的日立。这回似乎真的是库存全新货,看看这块能不能用上5年3个月吧。
替换
本来想直接做成zmirror,然后把旧盘换下来:
zpool list # 看了一下当前zpool名字: ztank,当前状态已经是degraded了
zpool status # 看一下现有的盘: /dev/sda
lsblk # 看一下新硬盘的路径: /dev/sdb
zpool attach ztank /dev/sda /dev/sdb # 新旧硬盘组mirror
zpool status # 显示状态为resilvering状态
zpool detach ztank /dev/sda # 同步完成后就可以移除旧硬盘了
结果在attach时报错了:device is too small,因为这个SSD是1.02T的,比1T的机械硬盘大了一点,镜像组建失败。
只好手工迁移数据:
zpool create znew /dev/sdb # 创建一个新的pool
zfs snapshot -r ztank@mig # 创建快照
zfs send -R ztank@mig | zfs recv -F znew # 迁移数据
zfs list -r znew # 检查迁移结果
# 暂停ZFS的使用,断开所有mountpoint
zfs snapshot -R ztank@mig1 # 创建差异快照
zfs send -RI ztank@mig ztank@mig1 | zfs recv -F znew # 迁移差异数据
zpool export ztank # 导出旧的zpool
zpool import znew ztank # 用原来的名字导入新的zpool
这样就完成了迁移。之所以要先做一次完全数据迁移,再做一次差异数据迁移,是为了减少中断服务的时间。
推送到[go4pro.org]