重新启动后新的 mdadm RAID 消失

peo*_*eon 3 raid debian software-raid mdadm

重新启动后 mdadm 出现问题,我无法重新组装/dev/md0

我在 debian wheezy 上工作。

我已经完成了以下步骤::

sudo mdadm --create --verbose /dev/md0 --level=6 --raid-devices=4 /dev/sd[b-e]
cat /proc/mdstat
sudo mdadm --readwrite /dev/md0
sudo mdadm --detail --scan >> /etc/mdadm/mdadm.conf
echo check > /sys/block/md0/md/sync_action
sudo pvcreate /dev/md0
sudo pvdisplay
sudo vgcreate vgraid6 /dev/md0
sudo lvcreate -l 100%FREE -n lvHD vgraid6
sudo mkfs.ext4 -v /dev/vgraid6/lvHD
Run Code Online (Sandbox Code Playgroud)

这里一切顺利。

挂载 RAID 后,我可以使用它、创建文件、从其他 PC 访问它...

现在问题来了:

重新启动服务器(现在重新启动)后,RAID 不再存在,/dev/md0消失了。

首先我检查/etc/mdadm/mdadm.conf

# mdadm.conf
#
# Please refer to mdadm.conf(5) for information about this file.
#
#DEVICE partitions containers
...
CREATE owner=root group=disk mode=0660 auto=yes
MAILADDR root
ARRAY /dev/md0 metadata=1.2 name=media:0 UUID=cb127a0b:ad4eb61d:e0ba8f82:db4b062d
Run Code Online (Sandbox Code Playgroud)

在我尝试之后:

$ mdadm --stop --scan
$ mdadm --assemble --scan
Run Code Online (Sandbox Code Playgroud)

或者:

$ sudo  mdadm --assemble /dev/md0 /dev/sd[b-e]
    mdadm: Cannot assemble mbr metadata on /dev/sdb
    mdadm: /dev/sdb has no superblock - assembly aborted


$ sudo  mdadm --examine /dev/sd[b-e]
/dev/sdb:
   MBR Magic : aa55
Partition[0] :   4294967295 sectors at            1 (type ee)
/dev/sdc:
   MBR Magic : aa55
Partition[0] :   4294967295 sectors at            1 (type ee)
/dev/sdd:
   MBR Magic : aa55
Partition[0] :   4294967295 sectors at            1 (type ee)
/dev/sde:
   MBR Magic : aa55
Partition[0] :   4294967295 sectors at            1 (type ee)
Run Code Online (Sandbox Code Playgroud)

mdadm 守护进程正在运行 ( ps aux | grep mdadm)

空 /proc/mdstat

$ cat /proc/mdstat
Personalities :
unused devices: <none>
Run Code Online (Sandbox Code Playgroud)

怎么了?

kos*_*tix 12

原因有两个:

  • 在组装数组时,您的(新的)mdadm.conf未被读取。

    这是因为它发生在你的根文件系统被挂载之前(显然:你必须有一个工作的 RAID 设备才能访问它),所以这个文件是从包含所谓的预引导环境的 initramfs 映像中读取的。

    所以为了使这项工作,在更新配置后,运行

    # update-initramfs -u
    
    Run Code Online (Sandbox Code Playgroud)

    更新initramfs。

  • 您的 RAID 设备不会在启动时被自动发现和组装。

    为此,请将成员分区的类型更改为0xfd(Linux RAID 自动检测)—对于 MBR 样式的分区表或更改为00FD(相同)对于 GPT。您可以分别使用fdiskgdisk来做到这一点。

    mdadm在启动时运行(在 initramfs 之外),扫描可用分区,从所有分区中读取具有类型的元数据块,0xfd然后组装并启动它能够运行的所有 RAID 设备。这不需要mdadm.confinitramfs 映像中的最新副本。

更喜欢哪种方法,取决于你。我个人喜欢第二种,但如果您碰巧有几个(许多)RAID 设备并且只想在启动时启动其中几个(需要有一个工作的根文件系统)并稍后激活其余的,第一种方法或组合其中有一条路要走。