从 gmirror 迁移到 graid
谷奥 的服务器硬盘坏了,而且托管商很奇怪地用了gmirror而不是BIOS直接支持的graid(我厂Alexander Motin实现的与BIOS兼容的软件RAID,支持Intel、Adaptec、JMicron、nVidia、Promise和SiL等多家厂商的软RAID格式),所以趁这个机会给它换掉。记一下迁移的过程。
启动的时候,gmirror已经degraded了(有一个硬盘已经换掉):
% gmirror status
Name Status Components
mirror/gm0 DEGRADED ada0 (ACTIVE)检查分区(gpart show),确认磁盘的最后部分没被占用:
| |
Intel的元数据格式需要占用磁盘的最后4K。(如果是GPT格式的,处理起来就复杂得多了,但MBR在磁盘最后并不放任何内容,因此可以直接来用)。
修改fstab将所有内容指向第一块磁盘:sed -e s,mirror/gm0s1,ada0s1,g /etc/fstab,没问题的话就sed -i ’’ 来将修改写回。去掉loader.conf中关于gmirror的部分,重启系统。
用gmirror clear清除掉ada0上的元数据信息。由于 / 在ada0上面,因此需要先用sysctl kern.geom.debugflags=16去掉防护。
| |
下面是在ada0上建立mirror。
# graid label Intel gm0 RAID1 ada0 NONE
Intel-9b7e50e1 created修改fstab: sed -i '' -e s,ada0s1,raid/r0s1,g /etc/fstab,重启(这里 r0 是因为是第一个设备)。这步做完之后,gpart输出变为:
| |
将换上的新硬盘加入到mirror阵列中:
# graid insert raid/r0 ada1📓 注意
(9.1-RELEASE不能这样用;9.2经过改进已经可以了。9.1上用:
graid insert Intel-9b7e50e1 ada1)
剩下的事情就是等graid重建mirror。如果机器不太忙的话这个过程不会需要太久(因为是顺序读写)。如果这个过程被打断,下次启动会从断点恢复。