如何让不活动的 RAID 设备重新工作?

如何让不活动的 RAID 设备重新工作?

启动后,我的 RAID1 设备 ( /dev/md_d0*) 有时会出现一些奇怪的状态,导致我无法安装它。

* 最初是我创建的,/dev/md0但它不知何故变成了/dev/md_d0

# mount /opt
mount: wrong fs type, bad option, bad superblock on /dev/md_d0,
       missing codepage or helper program, or other error
       (could this be the IDE device where you in fact use
       ide-scsi so that sr0 or sda or so is needed?)
       In some cases useful info is found in syslog - try
       dmesg | tail  or so

RAID 设备似乎不活跃不知何故:

# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] 
                [raid4] [raid10] 
md_d0 : inactive sda4[0](S)
      241095104 blocks

# mdadm --detail /dev/md_d0
mdadm: md device /dev/md_d0 does not appear to be active.

问题是,如何让设备再次活跃mdmadm我假设是使用)?

(其他时候,启动后一切正常(处于活动状态),我可以手动安装它而不会出现问题。但即使我将其放入,它仍然不会自动安装/etc/fstab

/dev/md_d0        /opt           ext4    defaults        0       0

附加问题:我应该怎么做才能使 RAID 设备在/opt启动时自动安装?

这是一个 Ubuntu 9.10 工作站。关于我在这个问题中设置的 RAID 的背景信息

编辑:我的/etc/mdadm/mdadm.conf看起来像这样。我从来没有碰过这个文件,至少没有用手碰过。

# by default, scan all partitions (/proc/partitions) for MD superblocks.
# alternatively, specify devices to scan, using wildcards if desired.
DEVICE partitions

# auto-create devices with Debian standard permissions
CREATE owner=root group=disk mode=0660 auto=yes

# automatically tag new arrays as belonging to the local system
HOMEHOST <system>

# instruct the monitoring daemon where to send mail alerts
MAILADDR <my mail address>

# definitions of existing MD arrays

# This file was auto-generated on Wed, 27 Jan 2010 17:14:36 +0200

至少现在,在重新启动后,当设备再次处于活动状态时,最后一条/proc/partitions条目也是如此。(我不确定当设备处于非活动状态时是否也会这样。)md_d0

解决: 作为Jimmy Hedman 建议,我取了以下输出mdadm --examine --scan

ARRAY /dev/md0 level=raid1 num-devices=2 UUID=de8fbd92[...]

并将其添加到 中/etc/mdadm/mdadm.conf,这似乎已经解决了主要问题。再次更改/etc/fstab为使用/dev/md0(而不是/dev/md_d0)后,RAID 设备也会自动挂载!

答案1

对于您的附加问题:

mdadm --examine --scan >> /etc/mdadm/mdadm.conf

答案2

我发现我必须手动添加阵列才能/etc/mdadm/mdadm.conf让 Linux 在重启时挂载它。否则,我得到的正是您在这里得到的 -md_d1不活动的设备等。

conf 文件应如下所示 - 即ARRAY每个 md 设备一行。在我的例子中,此文件中缺少新数组,但如果您已列出它们,则这可能无法解决您的问题。

# definitions of existing MD arrays
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=f10f5f96:106599e0:a2f56e56:f5d3ad6d
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=aa591bbe:bbbec94d:a2f56e56:f5d3ad6d

为每个 md-device 添加一个数组,并将它们添加到上述注释之后,或者如果不存在这样的注释,则添加到文件末尾。您可以通过执行以下操作获取 UUID sudo mdadm -E --scan

$ sudo mdadm -E --scan
ARRAY /dev/md0 level=raid5 num-devices=3 UUID=f10f5f96:106599e0:a2f56e56:f5d3ad6d
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=aa591bbe:bbbec94d:a2f56e56:f5d3ad6d

正如您所见,您可以将扫描结果的输出复制到文件中。

我运行的是 ubuntu 桌面 10.04 LTS,据我所知,这种行为与 Ubuntu 的服务器版本不同,但是我很久以前在服务器上创建了 md-devices,我可能错了。也可能是我错过了一些选项。

无论如何,在 conf 文件中添加阵列似乎可以解决问题。我已经运行上述 raid 1 和 raid 5 多年了,没有出现任何问题。

答案3

警告:首先我要说的是,下面的操作(由于使用了“--force”)对我来说似乎很危险,如果您有无法恢复的数据,我建议您在开始尝试以下任何操作之前复制相关分区。但是,这对我来说是有效的。

我遇到了同样的问题,阵列显示为非活动状态,而我所做的一切,包括“mdadm --examine --scan >/etc/mdadm.conf”(正如其他人所建议的那样)都没有任何帮助。

就我而言,当它在更换驱动器后尝试启动 RAID-5 阵列时,它说它很脏(通过dmesg):

md/raid:md2: not clean -- starting background reconstruction
md/raid:md2: device sda4 operational as raid disk 0
md/raid:md2: device sdd4 operational as raid disk 3
md/raid:md2: device sdc4 operational as raid disk 2
md/raid:md2: device sde4 operational as raid disk 4
md/raid:md2: allocated 5334kB
md/raid:md2: cannot start dirty degraded array.

导致其在以下位置显示为非活动状态/proc/mdstat

md2 : inactive sda4[0] sdd4[3] sdc4[2] sde4[5]
      3888504544 blocks super 1.2

我确实发现所有设备都发生了相同的事件,除了我已更换的驱动器(/dev/sdb4):

[root@nfs1 sr]# mdadm -E /dev/sd*4 | grep Event
mdadm: No md superblock detected on /dev/sdb4.
         Events : 8448
         Events : 8448
         Events : 8448
         Events : 8448

但是,阵列详细信息显示,它有 5 个设备中的 4 个可用:

[root@nfs1 sr]# mdadm --detail /dev/md2
/dev/md2:
[...]
   Raid Devices : 5
  Total Devices : 4
[...]
 Active Devices : 4
Working Devices : 4
[...]
    Number   Major   Minor   RaidDevice State
       0       8        4        0      inactive dirty  /dev/sda4
       2       8       36        2      inactive dirty  /dev/sdc4
       3       8       52        3      inactive dirty  /dev/sdd4
       5       8       68        4      inactive dirty  /dev/sde4

(以上内容来自“状态”列的内存,我在回滚缓冲区中找不到它)。

我能够通过停止阵列然后重新组装它来解决这个问题:

mdadm --stop /dev/md2
mdadm -A --force /dev/md2 /dev/sd[acde]4

此时阵列已启动,运行 5 个设备中的 4 个,我能够添加替换设备并重建它。我可以毫无问题地访问文件系统。

答案4

假设没有硬件问题并且您有足够的驱动器/分区来启动阵列,那么让阵列运行的一个简单方法如下:

md20 : inactive sdf1[2](S)
      732442488 blocks super 1.2

 sudo mdadm --manage /dev/md20  --run

可能是由于某种原因,阵列没有问题,但某些东西阻止了它启动或构建。在我的情况下,这是因为 mdadm 不知道原始阵列名称是 md127,并且该阵列的所有驱动器都已拔出。重新插入时,我必须手动组装(可能是由于离线的旧阵列名称,mdadm 认为阵列已经处于活动状态,这是一个错误)。

相关内容