您的位置:首页 > 大数据 > 人工智能

Ubuntu下使用mdadm更换软RAID1故障硬盘实战

2016-11-17 14:03 597 查看
转载自:点击打开链接

参考文章:

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
56
7
8
9
10
1112

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.2 [2/1] [U_]

md3 : active raid1 sda4[0]
296942400 blocks super 1.2 [2/1] [U_]

unused devices: <none>

可以看到,sdb1和sdb4都找不到了,sdb2处于故障状态。考虑到之前的两个硬盘都用了好几年了,于是决定全都换掉,买了两个新的硬盘(相同容量)。

之前也没有更换的经验,只能Google一下现学现用了。


更换过程


删除旧sdb

首先将故障的硬盘从md设备中移除:
1

sudo mdadm --manage /dev/md1 --remove /dev/sdb2

注:如果想要移除一个正常的设备(没有标记为F),则需要先设为Fail,如下:

1

sudo mdadm --manage /dev/md? --fail /dev/?


更换硬件

关机,并打开机箱,把坏的硬盘拆下,并装入新买的两个硬盘。

开机,进入系统后发现新的硬盘被识别为sdb和sdc。


加入并同步新sdb

首先需要为sdb创建与sda相同的分区表结构,使用以下命令可快速完成:
1

sudo sfdisk -d /dev/sda | sudo sfdisk /dev/sdb

使用 
sudo fdisk -l
确认分区正确。

然后使用
mdadm
添加新的设备:
12
3

sudo mdadm --manage /dev/md0 --add /dev/sdb1sudo mdadm --manage /dev/md1 --add /dev/sdb2
sudo mdadm --manage /dev/md3 --add /dev/sdb4

然后观察状态可以看到已经开始同步了:
1
2
3
4
56
7
8
9
10
1112
13
14
15

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb2[2] sda2[0]
585806656 blocks super 1.2 [2/1] [U_]
resync=DELAYED

md0 : active raid1 sdb1[2] sda1[0]
78058368 blocks super 1.2 [2/1] [U_]
[=>...................]  recovery =  3.9% (2423168/78058368) finish=15.4min speed=127535K/sec

md3 : active raid1 sdb4[2] sda4[0]
296942400 blocks super 1.2 [2/1] [U_]
resync=DELAYED

unused devices: <none>

几个小时后就都同步完成了:
1
2
3
4
56
7
8
9
10
1112

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb2[3] sda2[2]
585806656 blocks super 1.2 [2/2] [UU]

md0 : active raid1 sdb1[3] sda1[2]
78058368 blocks super 1.2 [2/2] [UU]

md3 : active raid1 sdb4[3] sda4[2]
296942400 blocks super 1.2 [2/2] [UU]

unused devices: <none>


用sdc替换sda

下一步是将还没有挂掉的sda替换成新的硬盘。

首先初始化sdc分区表:
1

sudo sfdisk -d /dev/sda | sudo sfdisk /dev/sdc

接下来的替换过程与之前类似,但是因为sda还处于正常状态,所以在删除之前需要先置为Fail。以下是md0设备的替换过程:
12
3

sudo mdadm --manage /dev/md0 --fail /dev/sda1sudo mdadm --manage /dev/md0 --remove /dev/sda1sudo mdadm --manage /dev/md0 --add /dev/sdc1

对于md1、md3,用同样的方式操作。若干小时后,两个新硬盘就都正常工作了:
1
2
3
4
56
7
8
9
10
1112

cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdc2[3] sdb2[2]
585806656 blocks super 1.2 [2/2] [UU]

md0 : active raid1 sdc1[3] sdb1[2]
78058368 blocks super 1.2 [2/2] [UU]

md3 : active raid1 sdc4[3] sdb4[2]
296942400 blocks super 1.2 [2/2] [UU]

unused devices: <none>


启用swap

此时我发现新硬盘的swap分区还没有启用(sdb3和sdc3)。由于分区表是通过sfdisk创建的,swap分区还没有初始化,所以需要使用以下命令:
12
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:
12

sudo grub-install /dev/sdb
sudo grub-install /dev/sdc

至此,所有设置均已完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mdadm softraid