转载自:点击打开链接
参考文章:
https://www.howtoforge.com/replacing_hard_disks_in_a_raid1_array
背景
最近公司服务器的硬盘坏了一块,当时装系统时做的软RAID1阵列,一共是两块硬盘(sda、sdb),每块硬盘分了4个区,其中三个区用来做RAID,还有一个swap分区。
具体来说,每个硬盘的四个分区分别如下(以sda为例):
1 2 3 4 5 |
Device Boot Start End Blocks Id System /dev/sda1 * 2048 156250111 78124032 fd Linux raid autodetect /dev/sda2 156250112 1328125951 585937920 fd Linux raid autodetect /dev/sda3 1328125952 1359376383 15625216 82 Linux swap / Solaris /dev/sda4 1359376384 1953523711 297073664 fd Linux raid autodetect |
RAID设备md0、md1和md3分别对应sda1、sda2和sda4。
现在sdb出了故障,查看结果是这样的:
1 2 3 4 5 6 7 8 9 10 11 12 |
cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : active raid1 sda2[0] sdb2[2](F) 585806656 blocks super 1.2 [2/1] [U_] md0 : active raid1 sda1[0] 78058368 blocks super 1] [U_] md3 : active raid1 sda4[296942400 blocks super 1] [U_] unused devices: <none> |
可以看到,sdb1和sdb4都找不到了,sdb2处于故障状态。考虑到之前的两个硬盘都用了好几年了,于是决定全都换掉,买了两个新的硬盘(相同容量)。
之前也没有更换的经验,只能Google一下现学现用了。
更换过程
删除旧sdb
首先将故障的硬盘从md设备中移除:
1
|
sudo mdadm --manage /dev/md1 --remove /dev/sdb2
|
注:如果想要移除一个正常的设备(没有标记为F),则需要先设为Fail,如下:
sudo mdadm --manage /dev/md? --fail /dev/?
|
更换硬件
关机,并打开机箱,把坏的硬盘拆下,并装入新买的两个硬盘。
开机,进入系统后发现新的硬盘被识别为sdb和sdc。
加入并同步新sdb
首先需要为sdb创建与sda相同的分区表结构,使用以下命令可快速完成:
sudo sfdisk -d /dev/sda | sudo sfdisk /dev/sdb
|
使用sudo fdisk -l
确认分区正确。
然后使用mdadm
添加新的设备:
1 2 3 |
sudo mdadm --manage /dev/md0 --add /dev/sdb1 sudo mdadm --manage /dev/md1 --add /dev/sdb2 sudo mdadm --manage /dev/md3 --add /dev/sdb4 |
然后观察状态可以看到已经开始同步了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : active raid1 sdb2[2] sda2[1] [U_] resync=DELAYED md0 : active raid1 sdb1[2] sda1[1] [U_] [=>...................] recovery = 3.9% (2423168/78058368) finish=15.4min speed=127535K/sec md3 : active raid1 sdb4[2] sda4[1] [U_] resync=DELAYED unused devices: <none> |
几个小时后就都同步完成了:
3] sda2[2] 2] [UU] md0 : active raid1 sdb1[3] sda1[2] [UU] md3 : active raid1 sdb4[3] sda4[2] [UU] unused devices: <none> |
用sdc替换sda
下一步是将还没有挂掉的sda替换成新的硬盘。
首先初始化sdc分区表:
sudo sfdisk -d /dev/sda | sudo sfdisk /dev/sdc
|
接下来的替换过程与之前类似,但是因为sda还处于正常状态,所以在删除之前需要先置为Fail。以下是md0设备的替换过程:
sudo mdadm --manage /dev/md0 --fail /dev/sda1 sudo mdadm --manage /dev/md0 --remove /dev/sda1 sudo mdadm --manage /dev/md0 --add /dev/sdc1 |
对于md1、md3,用同样的方式操作。若干小时后,两个新硬盘就都正常工作了:
cat /proc/mdstat Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md1 : active raid1 sdc2[3] sdb2[2] [UU] md0 : active raid1 sdc1[3] sdb1[2] [UU] md3 : active raid1 sdc4[3] sdb4[2] [UU] unused devices: <none> |
启用swap
此时我发现新硬盘的swap分区还没有启用(sdb3和sdc3)。由于分区表是通过sfdisk创建的,swap分区还没有初始化,所以需要使用以下命令:
1 2 3 4 |
sudo mkswap /dev/sdb3 sudo mkswap /dev/sdc3 sudo swapon /dev/sdb3 sudo swapon /dev/sdc3 |
sudo blkid获得两个swap分区的UUID,然后替换/etc/fstab
中原硬盘的swap分区。
更新grub
为了能使系统正常从新硬盘启动,还需要在两个新硬盘上设置grub:
1 2 |
sudo grub-install /dev/sdb sudo grub-install /dev/sdc |
至此,所有设置均已完成。