如何告诉 mdadm 再次开始使用 RAID5 阵列中丢失的磁盘?

Jon*_*age 2 linux software-raid raid-5 mdadm ubuntu

我的 Ubuntu 服务器上运行着一个 3 磁盘 RAID 阵列。这台机器已经完美运行了一年多,但最近我被迫拆除、移动和重建机器。

当我把它们全部重新组合起来并运行 Ubuntu 时,我遇到了一些无法检测到磁盘的问题。几次重新启动后,我解决了这个问题。现在的问题是,每次启动时,3 磁盘阵列都显示为降级。由于某种原因,Ubuntu 似乎创建了一个新阵列并将丢失的磁盘添加到其中。

我尝试停止新的 1 磁盘阵列并添加丢失的磁盘,但我很挣扎。启动时我得到这个:

root@uberserver:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md_d1 : inactive sdf1[2](S)
      1953511936 blocks

md0 : active raid5 sdg1[2] sdc1[3] sdb1[1] sdh1[0]
      2930279808 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
Run Code Online (Sandbox Code Playgroud)

我有两个 RAID 阵列,通常显示为 md1 的那个阵列没有出现。

我在某处读到调用mdadm --assemble --scan会重新组装丢失的数组,所以我尝试首先停止 ubuntu 启动的现有数组:

root@uberserver:~# mdadm --stop /dev/md_d1
mdadm: stopped /dev/md_d1
Run Code Online (Sandbox Code Playgroud)

...然后尝试告诉 ubuntu 再次拾取磁盘:

root@uberserver:~# mdadm --assemble --scan
mdadm: /dev/md/1 has been started with 2 drives (out of 3).
Run Code Online (Sandbox Code Playgroud)

这样就再次启动了 md1,但它没有从 md_d1 中获取磁盘:

root@uberserver:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid5 sde1[1] sdf1[2]
      3907023872 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU]

md_d1 : inactive sdd1[0](S)
      1953511936 blocks

md0 : active raid5 sdg1[2] sdc1[3] sdb1[1] sdh1[0]
      2930279808 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
Run Code Online (Sandbox Code Playgroud)

这里出了什么问题?为什么 Ubuntu 试图拾取sdd1到不同的阵列?如何将丢失的磁盘重新找回?

[编辑] - 我意识到我没有将 md1 添加到mdadm.conf. 添加 md1 后,mdadm.conf现在尝试在启动时安装阵列,但它仍然丢失sdd1。如果我告诉它尝试自动组装,我会觉得它知道它需要sdd1但无法使用它:

root@uberserver:~# mdadm --assemble --scan
/dev/md1: File exists
mdadm: /dev/md/1 already active, cannot restart it!
mdadm:   /dev/md/1 needed for /dev/sdd1...
Run Code Online (Sandbox Code Playgroud)

我缺少什么?

Jon*_*age 6

不确定这是否是解决该问题的最干净的方法,但以下似乎又让它重新开始:

root@uberserver:~# mdadm --stop /dev/md_d1
mdadm: stopped /dev/md_d1

root@uberserver:~# mdadm --add /dev/md1 /dev/sdd1
mdadm: re-added /dev/sdd1

root@uberserver:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid5 sdd1[3] sde1[1] sdf1[2]
      3907023872 blocks level 5, 64k chunk, algorithm 2 [3/2] [_UU]
      [>....................]  recovery =  0.0% (121728/1953511936) finish=1337.0min speed=24345K/sec

md0 : active raid5 sdg1[2] sdc1[3] sdb1[1] sdh1[0]
      2930279808 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]
Run Code Online (Sandbox Code Playgroud)

仍然不明白为什么它不能将磁盘添加回:-/