2010-03-09 09:55:18 +0000 2010-03-09 09:55:18 +0000
31
31

如何让不活动的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建议】(https://superuser.com/questions/117824/how-to-get-an-inactive-raid-device-working-again/118251#118251),我取了`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设备也会自动被挂载!这就是为什么我在使用0x6&的时候,会出现这样的问题。

答案 (9)

25
25
25
2010-03-10 12:34:08 +0000

对于你的奖励问题。

mdadm --examine --scan >> /etc/mdadm/mdadm.conf
11
11
11
2011-08-01 02:41:23 +0000

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

conf-file应该像下面这样–即每个md-device都有一个ARRAY行。在我的例子中,这个文件中缺少新的数组,但是如果你已经列出了它们,这可能无法解决你的问题。

# 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添加一个数组,并将它们添加在上面的注释之后,如果没有这样的注释,则添加在文件的最后。你可以通过做sudo mdadm -E --scan来获得UUIDs。

$ 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 desktop 10.04 LTS,在我印象中,这种行为与Ubuntu的服务器版本不同,但是我在服务器上创建md-devices已经是很久以前的事了,我可能搞错了。也可能是我漏掉了一些选项。

总之,在conf-file中添加数组似乎有效果。我在上面的raid 1和raid 5中运行了很多年,都没有问题。

7
7
7
2012-03-21 22:21:47 +0000

警告:首先我要说的是,下面的操作(由于使用了"–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个在运行,我可以添加替换的设备,然后重建。我能够顺利访问文件系统。

5
5
5
2012-04-24 01:29:43 +0000

我在使用Ubuntu 10.04时遇到了问题,FStab中的一个错误使服务器无法启动。

我运行了上述解决方案中提到的这个命令。

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

这将把 “mdadm –examine –scan "的结果追加到”/etc/mdadm/mdadm.conf"

在我的例子中,这是:

ARRAY /dev/md/0 metadata=1.2 UUID=2660925e:6d2c43a7:4b95519e:b6d110e7 name=localhost:0

这是一个fakeraid 0。我在/etc/fstab中自动挂载的命令是:

/dev/md0 /home/shared/BigDrive ext3 defaults,nobootwait,nofail 0 0

这里重要的是你有 “nobootwait "和 "nofail"。Nobootwait会跳过任何阻止你启动的系统信息。在我的例子中,这是在一个远程服务器上,所以它是必不可少的。

希望能帮到一些人。

2
2
2
2010-03-09 10:46:27 +0000

你可以用

mdadm -A /dev/md_d0

来激活你的md设备,我想是一些启动脚本启动的太早了,在一个RAID成员被发现之前或者一些类似的问题。作为一个快速和肮脏的变通方法,你应该可以在/etc/rc.local中添加这一行:

mdadm -A /dev/md_d0 && mount /dev/md_d0

编辑:显然你的/etc/mdadm/mdadm.conf仍然包含旧的配置名称。编辑这个文件,用 md_d0 替换 md0 的出现。

2
2
2
2011-08-15 01:56:27 +0000

我也遇到过类似的问题……我的服务器在我增长了相关设备分区后,无法加载md2。在阅读这个帖子时,我发现md2 RAID设备有一个新的 UUID,而机器正试图使用旧的那个。

正如建议的那样……使用'md2'从

mdadm --examine --scan

输出,我编辑了/etc/mdadm/mdadm.conf,并将旧的 UUID行替换为上面命令输出的那行,我的问题消失了。

2
2
2
2010-03-10 13:14:14 +0000

md_d0 : inactive sda4[0](S)对于一个RAID1阵列来说是错误的。它似乎暗示着磁盘阵列没有活动的设备和一个备用设备(用(S)表示,你会看到(F)表示一个失败的设备,而不是OK/活动的设备)–对于一个没有降级运行的RAID1磁盘阵列,至少应该有两个OK/活动的设备(对于一个降级的磁盘阵列,至少应该有一个OK/活动的设备),你不能激活一个没有失败的非备用设备的RAID1磁盘阵列(因为备用设备不包含数据的副本,直到当另一个硬盘失败时它们才会被激活)。如果我没有读错/proc/mdstat输出,你将无法激活当前状态下的磁盘阵列。

你的机器中是否有任何物理驱动器出现故障无法旋转?ls /dev/sd*是否列出了你通常期望在该机器上看到的所有驱动器和分区?

2
2
2
2012-11-26 21:43:18 +0000

当你假装用/dev/md[012346789}做一些事情的时候,它会转到/dev/md{126,127...}./dev/md0继续挂载在/dev/md126或者/dev/md127你必须要。

umount /dev/md127或umount /dev/md126.

这是临时性的,让你在不停止系统的情况下执行命令和一些应用程序。

2
2
2
2017-02-14 23:24:17 +0000

假设没有硬件问题,并且你有足够的硬盘/分区来启动磁盘阵列,一个简单的方法是这样的:

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

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

0x1&

这可能是由于某种原因,阵列是好的,但有东西阻止它启动或建立。在我的情况下,这是因为mdadm不知道原来的磁盘阵列名称是md127,而且该磁盘阵列的所有驱动器都被拔掉了。当重新插入时,我不得不手动组装(可能是一个bug,mdadm认为这个阵列已经被激活了,因为离线的旧阵列名称)。