启动后,我的 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 认为阵列已经处于活动状态,这是一个错误)。