更换软件RAID1阵列中的故障硬盘驱动器

更换软件RAID1阵列中的故障硬盘。 本指南介绍如何从Linux RAID1阵列(软件RAID)中删除故障硬盘,以及如何在不丢失数据的情况下将新硬盘添加到RAID1阵列。

注意:本教程有一个新版本可用,使用gdisk而不是sfdisk来支持GPT分区

1初步说明

在这个例子中,我有两个硬盘驱动器/ dev / sda/ dev / sdb ,分区为/ dev / sda1/ dev / sda2以及/ dev / sdb1/ dev / sdb2

/ dev / sda1/ dev / sdb1组成RAID1阵列/ dev / md0

/ dev / sda2/ dev / sdb2组成RAID1阵列/ dev / md1

/dev/sda1 + /dev/sdb1 = /dev/md0
/dev/sda2 + /dev/sdb2 = /dev/md1

/ dev / sdb失败,我们要替换它。

2如果硬盘出现故障,该怎么办?

如果磁盘发生故障,您可能会在日志文件中找到许多错误消息,例如/ var / log / messages/ var / log / syslog

你也可以跑

cat /proc/mdstat

而不是字符串[UU],您将看到[U_],如果您有一个降级的RAID1数组。

3删除失败的磁盘

要删除/ dev / sdb ,我们将/ dev / sdb1/ dev / sdb2标记为失败,并将它们从各自的RAID阵列( / dev / md0/ dev / md1 )中删除。

首先我们将/ dev / sdb1标记为失败:

mdadm --manage /dev/md0 --fail /dev/sdb1

的输出

cat /proc/mdstat

应该是这样的:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[2](F)
      24418688 blocks [2/1] [U_]

md1 : active raid1 sda2[0] sdb2[1]
      24418688 blocks [2/2] [UU]

unused devices: <none>

然后我们从/ dev / md0中删除/ dev / sdb1

mdadm --manage /dev/md0 --remove /dev/sdb1

输出应该是这样的:

server1:~# mdadm --manage /dev/md0 --remove /dev/sdb1
mdadm: hot removed /dev/sdb1

cat /proc/mdstat

应该显示:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
      24418688 blocks [2/1] [U_]

md1 : active raid1 sda2[0] sdb2[1]
      24418688 blocks [2/2] [UU]

unused devices: <none>

现在我们对/ dev / sdb2 (它是/ dev / md1的一部分)再次执行相同的步骤:

mdadm --manage /dev/md1 --fail /dev/sdb2
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
      24418688 blocks [2/1] [U_]

md1 : active raid1 sda2[0] sdb2[2](F)
      24418688 blocks [2/1] [U_]

unused devices: <none>
mdadm --manage /dev/md1 --remove /dev/sdb2
server1:~# mdadm --manage /dev/md1 --remove /dev/sdb2
mdadm: hot removed /dev/sdb2
cat /proc/mdstat
server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0]
      24418688 blocks [2/1] [U_]

md1 : active raid1 sda2[0]
      24418688 blocks [2/1] [U_]

unused devices: <none>

然后关闭系统电源:

shutdown -h now

并用旧的/ dev / sdb硬盘替换旧的( 它必须至少与旧的一样大小 - 如果它比旧的只有几个MB,那么重建数组将会失败 )。

4添加新的硬盘

更改硬盘/ dev / sdb后 ,引导系统。

我们现在必须做的第一件事是创建与/ dev / sda完全相同的分区。 我们可以用一个简单的命令:

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

你可以跑

fdisk -l

以检查两个硬盘驱动器现在是否具有相同的分区。

接下来我们将/ dev / sdb1添加到/ dev / md0/ dev / sdb2/ dev / md1

mdadm --manage /dev/md0 --add /dev/sdb1
server1:~# mdadm --manage /dev/md0 --add /dev/sdb1
mdadm: re-added /dev/sdb1
mdadm --manage /dev/md1 --add /dev/sdb2
server1:~# mdadm --manage /dev/md1 --add /dev/sdb2
mdadm: re-added /dev/sdb2

现在两个arays( / dev / md0/ dev / md1 )将被同步。 跑

cat /proc/mdstat

看看它什么时候完成。

在同步期间,输出将如下所示:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
      24418688 blocks [2/1] [U_]
      [=>...................]  recovery =  9.9% (2423168/24418688) finish=2.8min speed=127535K/sec

md1 : active raid1 sda2[0] sdb2[1]
      24418688 blocks [2/1] [U_]
      [=>...................]  recovery =  6.4% (1572096/24418688) finish=1.9min speed=196512K/sec

unused devices: <none>

同步完成后,输出将如下所示:

server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid5] [raid4] [raid6] [raid10]
md0 : active raid1 sda1[0] sdb1[1]
      24418688 blocks [2/2] [UU]

md1 : active raid1 sda2[0] sdb2[1]
      24418688 blocks [2/2] [UU]

unused devices: <none>

就这样,你已经成功地替换了/ dev / sdb

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏