重启后 mdadm 无法组装

重启后 mdadm 无法组装

我有 2 个磁盘,结构如下:

lsblk
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0   3,7T  0 disk
├─sda1        8:1    0   2,7T  0 part
└─sda2        8:2    0 931,5G  0 part
sdb           8:16   0   2,7T  0 disk
└─sdb1        8:17   0   2,7T  0 part

如果我执行

mdadm --misc --detail /dev/md0

返回

mdadm: cannot open /dev/md0: No such file or directory

我的 mdadm.conf 是:

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

# by default (built-in), scan all partitions (/proc/partitions) and all
# containers 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 root

# definitions of existing MD arrays

# This configuration was auto-generated on Thu, 03 Mar 2016 21:53:00 +0100 by mkconf
ARRAY /dev/md/0  metadata=1.2 UUID=6ca17528:517621d3:e1c460a2:529955dd name=rp3-0:0

如果我执行

sudo mdadm -A /dev/md0

或者

sudo mdadm --assemble --scan

返回

mdadm: /dev/md/0 has been started with 2 drives.

新的磁盘结构为:

sda           8:0    0   3,7T  0 disk
├─sda1        8:1    0   2,7T  0 part
│ └─md0       9:0    0   5,5T  0 raid0
└─sda2        8:2    0 931,5G  0 part
sdb           8:16   0   2,7T  0 disk
└─sdb1        8:17   0   2,7T  0 part
  └─md0       9:0    0   5,5T  0 raid0

raid 的 fstab 行是

/dev/md0        /mnt/ext        ext4    defaults,nobootwait,nofail      0       0

nobootwait 和 nofail 用于在启动时不使 systemd 崩溃。

当我重启系统时,raid0 消失了。每次重启后我该如何保留 raid?

谢谢。

答案1

您只需要 conf 和 initrd/initramfs 钩子。这可能因发行版而异。

首先,添加conf:

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

如果您可以找到像 /etc/mdadm/ 这样的目录,也许您的发行版需要那里的文件...对其进行符号链接或仅使用该路径。

其次,确保 mdadm initrd 钩子已安装并启用。(正常的 mdadm 包应该有它们...我只提到这一点以防你的发行版很奇怪,所以你知道要寻找第二个包)

例如基于 Arch:

$ pacman -Ql mdadm | grep hook
mdadm /usr/lib/initcpio/hooks/
mdadm /usr/lib/initcpio/hooks/mdadm

$ grep mdadm /etc/mkinitcpio.conf 
HOOKS="base ... mdadm lvm2 filesystems ..."

基于 Debian 的:

$ dpkg -L mdadm | grep initr.*hook
/usr/share/initramfs-tools/hooks
/usr/share/initramfs-tools/hooks/mdadm

(I'm not really sure where the hook is enabled, but I think it should be enabled by default... someone else please fill that in)

然后,在安装这些文件和包之后,您必须重建 initramfs,并且可能还要更新 grub,以防万一:

基于 Arch:

# mkinitcpio -p /etc/mkinitcpio.d/somekernel.preset
# update-grub

基于 Debian:

# update-initramfs -u
# update-grub

另外,请记住在 fstab 中使用 UUID 而不是 /dev/md0,以实现更可靠的启动。(例如,如果您在救援磁盘上启动它并对其进行修改,有时它会更改为 /dev/md127,有时很难将其设置回 0)。请参阅 man fstab 了解语法,并参阅 blkid 了解 UUID。

答案2

这是一个解决方法,但经过几个小时后,唯一的解决方案是编辑etc/rc.local。我之前添加了这一行exit 0

$ sudo mdadm -A /dev/md0 && sudo mount /dev/md0 /mnt/ext

现在,每次重启后 RAID 都会成功安装。

答案3

我见过许多 Debian 服务器都出现这种情况。每次对我都有效的解决方案(相信我,我花了很多很多小时才弄清楚)是修补文件“/usr/share/initramfs-tools/scripts/local-top/mdadm”。找到输出“Assembling all MD arrays”的位置,然后在其后添加“sleep 3”。完成后,运行“update-initramfs -t -u -k all”以安装修改后的脚本。

相关内容