更换软件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
!