每次启动时都必须手动构建 RAID 阵列,并且无法添加第三个驱动器 - MDADM

每次启动时都必须手动构建 RAID 阵列,并且无法添加第三个驱动器 - MDADM

我有一个 RAID1 阵列,很长时间以来每次系统启动时我都必须手动重建它。从来没有时间弄清楚为什么。这是我每次启动时用来重建它的命令: sudo mdadm --build /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sde1

这很有效,不会丢失任何数据。然后我可以手动将 /dev/md0 挂载到我需要的位置(在本例中为 /mnt/plex)。但是,我刚刚在服务器上安装了第三个硬盘,我想升级到 RAID5。我使用 cfdisk 在我的驱动器上创建了一个分区。

然后我将阵列升级为 RAID5:
sudo mdadm --grow /dev/md0 -l 5

然后,我将新驱动器添加到阵列 sudo mdadm /dev/md0 --add /dev/sda1

最后,我尝试将阵列增加到 3 个驱动器, sudo mdadm /dev/md0 --grow -n 3 此时出现以下错误:

mdadm: ARRAY line /dev/md0 has no identity information.
mdadm: /dev/md0: cannot get superblock from /dev/sda1

第一个错误经常出现,第二个错误导致了这个问题。为什么我不能将 /dev/sda1 添加到阵列中?既然如此,为什么系统启动时阵列没有自动构建?

如果有帮助的话,这是我的驱动器/分区:

sda       8:0    0   3.7T  0 disk
+-sda1    8:1    0   3.7T  0 part
  +-md0   9:0    0   3.7T  0 raid5 /mnt/plex
sdb       8:16   0   3.7T  0 disk
+-sdb1    8:17   0   3.7T  0 part
  +-md0   9:0    0   3.7T  0 raid5 /mnt/plex
sdc       8:32   0 931.5G  0 disk
+-md1     9:1    0 931.4G  0 raid1 /mnt/nas
sdd       8:48   0 931.5G  0 disk
+-md1     9:1    0 931.4G  0 raid1 /mnt/nas
sde       8:64   0   3.7T  0 disk
+-sde1    8:65   0   3.7T  0 part
  +-md0   9:0    0   3.7T  0 raid5 /mnt/plex
sdf       8:80   0 149.1G  0 disk
+-sdf1    8:81   0   512M  0 part  /boot/efi
+-sdf2    8:82   0 148.6G  0 part  /

SDB 和 SDF 是正常运行的 RAID 成员。以下是来自 mdadm 的阵列详细信息(如果有帮助)

gradyn@hbi-server:~$ sudo mdadm --detail /dev/md0
mdadm: ARRAY line /dev/md0 has no identity information.
/dev/md0:
           Version :
     Creation Time : Thu Oct 14 22:19:50 2021
        Raid Level : raid5
        Array Size : 3906886464 (3725.90 GiB 4000.65 GB)
     Used Dev Size : 3906886464 (3725.90 GiB 4000.65 GB)
      Raid Devices : 2
     Total Devices : 3

             State : clean
    Active Devices : 2
   Working Devices : 3
    Failed Devices : 0
     Spare Devices : 1

            Layout : left-symmetric
        Chunk Size : 64K

Consistency Policy : resync

    Number   Major   Minor   RaidDevice State
       0       8       17        0      active sync   /dev/sdb1
       1       8       65        1      active sync   /dev/sde1

       2       8        1        -      spare   /dev/sda1

答案1

如果你需要发出mdadm --build组装数组,这意味着你创建了一个“旧式”数组,使用没有超级块换句话说,阵列几何形状(和其他元数据)不是存储在受影响的磁盘上,而系统期望这些信息在命令行上提供,或者在名为/etc/mdadm.conf

关于另一个问题(无法添加第三个活动磁盘),让我们看看手册页中关于--build(无超级块)阵列的内容:

与 --build 一起使用时,只有 linear、stripe、raid0、0、raid1、multipath、mp 和aulty 有效。

如您所见,RAID5 不适用于传统阵列。通过发出第一个--grow命令,您强制系统进入意外情况,而后面的命令--add只能将新磁盘设置为备用磁盘。--grow然后第二个命令失败,因为它无法在成员磁盘上找到有效的超级块。

我强烈建议您备份数据,并重新创建一个具有超级块和写入位图的 RAID5 阵列。要做到这一点,您只需使用mdadm默认设置。换句话说,

mdadm --create /dev/md0 -l 5 -n 3 /dev/sda1 /dev/sdb1 /dev/sde1

应该足够了。一定要理解上面的命令将从受影响的磁盘中删除所有数据,就这样当然在发布之前要有一个确认良好的备份。

相关内容