每次引导后如何使mdadm自动组装RAID?


43

我通过利用成功创建了RAID(镜像)mdadm。但是,每次引导后我都必须运行以下命令:

mdadm --stop --scan // to stop /dev/md127 - I don't know where the number 127 even comes from
mdadm --assemble --scan // to start /dev/md0

我在做什么错/为什么需要在启动时运行这些命令?用每个(重新)引导自动启动RAID的正确方法是什么?

Answers:


36

注意:您要么需要以root身份登录,要么使用sudo来完成所有这些工作...

  • 使用您喜欢的编辑器来创建或编辑/etc/mdadm/mdadm.conf文件,如下所示:

如果该文件甚至不存在,请将以下内容粘贴到新的空文件中:

# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#

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 root

# definitions of existing MD arrays
  • 保存文件

  • 运行以下命令以在文件末尾添加对阵列配置的引用:

    mdadm-详细--scan >> /etc/mdadm/mdadm.conf

这应该在mdadm.conf的末尾添加如下一行:

ARRAY / dev / md0 level = raid5 num-devices = 3元数据= 0.90 UUID = a44a52e4:0211e47f:f15bce44:817d167c

如果mdadm命令在ARRAY行上方添加了其他任何内容,请将其删除。例如,在我的一台机器上,该命令返回“ mdadm:元数据格式00.90未知,已忽略”。在阵列行之前。

现在,您的阵列应该在启动时自动构建,因此您可以在/ etc / fstab中添加一个条目来挂载它(如果尚不存在)


6
我可能会补充:您还应该使用update-initramfs -u
Pablo Montepagano,2012年

1
mdadm --detail --scan不会在我的系统上打印任何内容,尽管我确定我有两个分区是raid0(镜像)的一部分。欢迎对此提出任何一般性建议。
Lennart Rolland 2014年

1
@LennartRolland-试试mdadm -Es
slm 2015年

这对我不起作用,我必须做grub-install /dev/sda才能使其起作用(将sda替换为适合您的任何东西)
gorn

另外,您也可以只使用kernel选项:md.auto=1...我实际上并未对此进行全面测试,但据推测它可以检测到它们并进行组装(或至少尝试这样做)。但随后kernel.org/doc/html/v4.15/admin-guide/md.html在这方面有点模棱两可:当将md编译到内核中(而不是作为模块)时,将扫描并自动组装类型为0xfd的分区进入RAID阵列。[...]从内核2.6.9开始,只有具有类型0超级块的驱动器才能被自动检测并在引导时运行。而且它没有引用md.auto(或其他名称),所以我现在不确定。
Pryftan

7

我意识到这是一个更老的问题,但是在32位版本的Ubuntu Server 12.04上使用此工具的时间令人沮丧。

运行mdadm --detail --scan >> /etc/mdadm/mdadm.conf附加行

ARRAY / dev / md0元数据= 1.2名称= ubuntu:0 UUID = a8a570c6:96f61865:05abe131:5c2e2f7e

重新启动后,我再也看不到/ dev / md0。mdadm --detail --scan我会再次运行(不将结果放入文件中)

ARRAY / dev / md / ubuntu:0元数据= 1.2名称= ubuntu:0 UUID = a8a570c6:96f61865:05abe131:5c2e2f7e

手动安装即可/dev/md/ubuntu:0。最后,这也是我放入fstab文件中的内容。

我不确定我是怎么做的,如果这是在Ubuntu 12.04中的工作方式,或者这不是一个好习惯。只是想分享对我有用的东西。


同样的“问题”在这里。不知道这是一个问题,但..
克里斯托夫德特洛耶

3

在Debian Wheezy上,还需要执行以下步骤:/etc/default/mdadm将set autostart从false 设置为true

#自动开启:
#mdadm应该自动启动/etc/mdadm/mdadm.conf中列出的数组
#启动期间?
AUTOSTART =真

我也不得不使用mdadm -Es >>/etc/mdadm/mdadm.conf而不是--scan选项,因为那对我不起作用。


3
sudo mdadm -Es >> /etc/mdadm/mdadm.conf

现在,以以下方式编辑添加到/etc/mdadm/mdadm.conf中的行。删除所有内容,但删除基本部分。它看起来像

ARRAY /dev/md5 UUID=031cea92:50a7a28c:6b077fe7:8817092a
ARRAY /dev/md6 UUID=53454954:4044eb66:9169d1ed:40905643

注意:为了方便,您可以在mdX中选择X。

现在重启

sudo update-initramfs -u
sudo reboot

编辑:命令已更正。


我之所以这样写是因为Linker3000的答案对我不起作用。
2015年

3

我在运行Raspbian GNU / Linux 8(jessie)的Raspberry Pi 2上遇到了这个问题。我有一个RAID阵列/dev/sda1/dev/sdb1但在启动时无法组装。我的/etc/mdadm/mdadm.conf档案中有条目

ARRAY /dev/md/0  metadata=1.2 UUID=53454954:4044eb66:9169d1ed:40905643 name=raspberrypi:0 

(您的电话号码会有所不同;有关如何获取此信息的其他答案。)

我的/etc/fstab档案中有条目

/dev/md0        /data           ext4    defaults          0       0

(当然/data确实存在)

像OP一样,我可以在引导后手工组装和安装RAID阵列,但是尽管显然设置正确,但我无法使其在引导过程中自动发生。

我能够解决以下问题。我在处调查了脚本/etc/init.d/mdadm-raid并插入了一行调试代码

ls /dev > /home/pi/devices.txt

重新启动并检查此文件后,我了解到设备在初始化发生时就存在/dev/sda并且/dev/sdb存在mdadm-raid,但是分区/dev/sda1/dev/sdb1丢失了。我编辑了/etc/init.d/mdadm-raid文件并插入了这一行

partprobe

在标题之后(即在### END INIT INFO脚本开始之后但之前)。这导致检测到分区,因此mdadm-raid脚本能够组装RAID阵列,从而解决了该问题。希望这对某人有帮助!


0

我一直在Raspbian上使用Raspberry Pi上的几个外部USB HDD来解决这个问题。我必须弄乱服务的启动顺序,以确保mdadm-raid在udev识别USB驱动器之后但在checkfs.sh(在启动时检查文件系统)之前启动。如果mdadm-raid启动得太早,则驱动器不可用,因此无法组装阵列。这意味着fsck随后失败,并且引导过程退出到维护提示(因为raid阵列是其他服务所必需的)。

修改启动依赖项以在checkroot.sh之后但在checkfs.sh和running之前启动mdadm-raid update-rc.d mdadm-raid defaults,然后update-initramfs -uv -k `uname -r`(注意周围的反引号uname)对其进行了修复(最终)。对我来说,YMMV。


请注意,上面的uname -r应该是反引号,但我不知道如何转义它们,以便将它们印在此处...
Rodney

这是哪个版本的raspbian?我在Wheezy上运行良好,但是升级到Jessie则在启动时中断了程序集。
nwaltham

0

我尝试过

mdadm --create /dev/md/abcdef ...

我看到软链接/dev/md/abcdef在重新启动后仍然存在,如果需要,可以通过软链接访问设备。

这是可以接受的解决方案吗?


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.