前段时间手里的一台OVH独服出现了硬盘故障,因为是用OVH默认的模版组了软RAID10,在让机房更换了故障的硬盘之后阵列默认降级了,因为不是硬RAID卡没有自动重建功能,需要手动重建阵列。这里贴出重建的过程,怕自己忘记也同时给其他有需要的人参考。

在机房更换完硬盘之后,我们进入系统,输入以下命令先查看硬盘状态:

fdisk -l

在raid10状态下,我们应该能看到有4块硬盘。这里我们把四块硬盘分为/dev/sda、/dev/sdb、/dev/sdc、/dev/sdd。由于我坏的硬盘是/dev/sdd,所以我更换了硬盘之后,在系统敲出此命令的时候我们应该能看到新换上的硬盘是没有任何分区信息的。这时候我们首先要把其他硬盘的分区表复制到新硬盘上。

用下面的命令把/dev/sda硬盘的分区表复制到新的硬盘/dev/sdd上。

sfdisk -d /dev/sda | sfdisk /dev/sdd

需要注意的是,如果是GPT分区是无法使用sfdisk命令来复制分区表的,如果使用的是GPT分区我们需要使用sgdisk命令来复制分区表信息(/dev/sdd为新硬盘,注意顺序):

sgdisk -R=/dev/sdd /dev/sda

假设我们在复制分区表信息复制错了该怎么清除这分区表信息呢?以新硬盘/dev/sdd为例,使用如下命令:

wipefs -a /dev/sdd


在设置完分区表之后,我们可以先用下列命令查看一下RAID阵列的状态:

cat /proc/mdstat

这时候反馈的结果一般是这样:

Personalities : [raid1] [raid10] 
md4 : active raid10 sda4[0] sdc4[2] sdb4[1]
  3863960576 blocks 512K chunks 2 near-copies [4/3] [UUU_]
  bitmap: 3/29 pages [12KB], 65536KB chunk

md2 : active raid1 sda2[0] sdc2[2] sdb2[1]
  20478912 blocks [4/3] [UUU_]
  
unused devices: <none>

这里我们可以看到OVH的RAID模版是有一个RAID10和一个RAID1的模式。系统盘是RAID1。我们可以看一下我们新的硬盘的分区形式是什么:

Device        Start        End    Sectors    Size Type
/dev/sdd1        40       2048       2009 1004.5K BIOS boot
/dev/sdd2      4096   40962047   40957952   19.5G Linux RAID
/dev/sdd3  40962048   43057151    2095104   1023M Linux swap
/dev/sdd4  43057152 3907018751 3863961600    1.8T Linux RAID

记下哪个分区是系统盘哪个分区是数据盘,进行添加RAID重建操作:

数据盘RAID10的添加重建命令,这时候我们要记好上面查看RAID阵列状态的RAID序号,然后使用mdadm -add命令添加重建:

mdadm --manage /dev/md4 --add /dev/sdd4

这句命令的意思就是将/dev/sdd4分区加入名为md4的RAID10阵列中。

再敲入上面的命令后我们还可以同时加上对系统盘的RAID1的阵列重建命令,系统将会按照执行顺序在后台自动进行重建。对系统盘的RAID1重建命令如下:

mdadm --manage /dev/md2 --add /dev/sdd2

这句命令的意思就是将/dev/sdd2分区加入名为md2的RAID1阵列中。

这个时候我们可以使用下面的命令来查看重建的进度。

查看md2阵列的重建进度:

mdadm -D /dev/md2

查看md4阵列的重建进度也是同理。

当然我们也可以直接使用以下命令来查看总体的进度:

cat /proc/mdstat

静静等候个几个小时系统就能重建完成了。完成了之后就没有任何问题了。不过这重建过程是很漫长很无趣的,建议去睡个觉再来看。不过在睡觉之前我们还需要把swap分区激活。

我们可以先用以下命令查看swap分区的状态:

cat /proc/swaps

不过这状态看了看也没啥用,只是告诉我只有3G的SWAP空间。我需要把新硬盘划分出来的SWAP分区/dev/sdd3手动挂载上去:

mkswap /dev/sdd3

最后刷新swap分区:

swapon -a

做到这一步,我们就可以安心的去睡一觉了,起来之后如果没有什么意外,RAID阵列已经重建完毕了。