mdadm 使用驱动器而不是分区进行组装

mdadm 使用驱动器而不是分区进行组装

我有一个由 5 个驱动器上的分区( / dev/sda1、、、和)构建的 RAID 5 阵列。当我手动组装阵列时,它工作正常。/dev/sdb1/dev/sdc1/dev/sdd1/dev/sde1

/dev/sdb不幸的是,和上似乎也有超级块/dev/sdc(可能是我早期搞砸了),并且当阵列在启动时自动组装时,它会使用/dev/sdb而不是进行构建/dev/sdb1(与相同/dev/sdc),并且无法挂载(出现无效的 fs 错误)。

$ sudo mdadm --assemble --scan --force (presumably what happens on startup)
mdadm: WARNING /dev/sdb1 and /dev/sdb appear to have very similar superblocks.
      If they are really different, please --zero the superblock on one
      If they are the same or overlap, please remove one from the
      DEVICE list in mdadm.conf.

$ sudo mdadm --detail /dev/md7
/dev/md7:
        Version : 00.90
  Creation Time : Wed Apr  6 18:17:07 2011
     Raid Level : raid5
     Array Size : 7814047744 (7452.06 GiB 8001.58 GB)
  Used Dev Size : 1953511936 (1863.01 GiB 2000.40 GB)
   Raid Devices : 5
  Total Devices : 5
Preferred Minor : 7
    Persistence : Superblock is persistent

    Update Time : Sat Apr 30 13:55:50 2011
          State : clean
 Active Devices : 5
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : 224009a1:e4173bf3:2490f10a:1455ce9c (local to host ravenscar)
         Events : 0.2

    Number   Major   Minor   RaidDevice State
       0       8        1        0      active sync   /dev/sda1
       1       8       16        1      active sync   /dev/sdb
       2       8       32        2      active sync   /dev/sdc
       3       8       48        3      active sync   /dev/sdd1
       4       8       65        4      active sync   /dev/sde1

$ sudo mdadm --examine /dev/sdb
/dev/sdb:
          Magic : a92b4efc
        Version : 00.90.00
           UUID : 224009a1:e4173bf3:2490f10a:1455ce9c (local to host ravenscar)
  Creation Time : Wed Apr  6 18:17:07 2011
     Raid Level : raid5
  Used Dev Size : 1953511936 (1863.01 GiB 2000.40 GB)
     Array Size : 7814047744 (7452.06 GiB 8001.58 GB)
   Raid Devices : 5
  Total Devices : 5
Preferred Minor : 7

    Update Time : Wed Apr 27 21:15:03 2011
          State : clean
 Active Devices : 5
Working Devices : 5
 Failed Devices : 0
  Spare Devices : 0
       Checksum : f83035d3 - correct
         Events : 2

         Layout : left-symmetric
     Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
this     1       8       17        1      active sync   /dev/sdb1

   0     0       8        1        0      active sync   /dev/sda1
   1     1       8       17        1      active sync   /dev/sdb
   2     2       8       33        2      active sync   /dev/sdc
   3     3       8       49        3      active sync   /dev/sdd1
   4     4       8       65        4      active sync   /dev/sde1

然后我这样做:

$ sudo mdadm --stop /dev/md7
$ sudo mdadm --assemble /dev/md7 /dev/sd[abcde]1

然后它就起作用了。

我的问题:使用该选项删除这些错误的超级块是否安全?我还应该采取什么其他措施?我是否做出了正确的选择,使用分区而不是驱动器(而不是,等等)--zero-superblock构建阵列。/dev/sda1/dev/sda

答案1

不要将超级块清零。按照 mdadm 的建议进行编辑/etc/mdadm.conf,或/etc/mdadm/mdadm.conf将其更改DEVICE ....为:

DEVICE /dev/sda1
DEVICE /dev/sdb1
DEVICE /dev/sdc1
DEVICE /dev/sdd1
DEVICE /dev/sde1

答案2

似乎发生的情况是 MD 从两个设备看到相同的超级块(sdb1 是 sdb 的子集)。关闭超级块会关闭真正的超级块,所以不要这样做。

MD v0.90 超级块存储在设备末尾的 64k 对齐块上。在您的例子中,sdb1 是唯一的分区,超级块位于 sdb 和 sdb1 的末尾。不知何故(这似乎是一个老问题,请参阅末尾的链接)MD 感到困惑,并开始认为您在两个单独的设备上有两个超级块副本。

如果该分区上有一些额外空间,则修复很容易 - 您只需擦除超级块,然后重新分区磁盘,在磁盘结束前 64k 处结束分区;MD 将看不到 sdb 上的子块并使用 sdb1 正确组装阵列。如果您无法从 sdb 中取出 64k,则必须重建阵列。如果这不是您的启动盘,您还可以使用较新的超级块版本。v.1.1 和 v.1.2 都将超级块存储在阵列开头的某个位置,这将解决这个特定问题。

我刚刚在 raid1 上遇到了完全相同的问题。使用“fdisk -u”(使用扇区作为单位),分区以扇区 143374743 结束。我从这个数字中减去 128(128 个 512 字节扇区 = 64k),并将得到的数字用作分区的结尾。然后我可以使用以下命令验证 MD 不会在 sda 上看到超级块:

# mdadm --misc -E /dev/sda

似乎最近在分区工具中使用扇区和放弃 DOS 兼容性的行为变化导致最后一个分区总是在磁盘的最末端结束(而不是在柱面边界上)。其他一些参数可能会发挥作用 - 例如 - 我有一个正在运行的系统,当直接查询磁盘时,它会显示重复的超级块,并且仍然正确安装其阵列。

有关 MD 超级块格式的更多信息,请参阅:

https://raid.wiki.kernel.org/index.php/RAID_superblock_formats#The_version-0.90_Superblock_Format

Debian FAQ (第 11 点) 提到了这个问题:

http://git.debian.org/?p=pkg-mdadm/mdadm.git;a=blob_plain;f=debian/FAQ;hb=HEAD

答案3

如果阵列上没有任何数据,我会将其擦除并重新开始。如果阵列上有数据,我会在使用超级块之前先备份数据。

就我个人而言,我会从中取出数据,并删除每个磁盘开头的dd几个扇区,然后重新分区并重建阵列。如果知道一切从一开始就设置得当,我会感到更安心。/dev/zero

另外:在我看来,这是一个相当大的阵列,无法进行 RAID-5。请注意重建时间。如果发生单个磁盘故障,重建期间读取时出现另一个错误,您将面临灾难性的数据丢失。您可能需要考虑 RAID-6。

答案4

不幸的是,当我读到下面的信息时,我删除了RAID-Superblock:

mdadm: WARNING /dev/sdb1 and /dev/sdb appear to have very similar superblocks.
      If they are really different, please --zero the superblock on one
      If they are the same or overlap, please remove one from the
      DEVICE list in mdadm.conf.

之后我的 RAID1 就无法再启动了。

幸运的是,创建具有与原始 RAID1 相同参数的新 RAID1 后,并没有删除旧 RAID1: http://lists.debian.org/debian-user-french/2006/03/msg00607.html 通过http://kevin.deldycke.com/2007/03/how-to-recover-a-raid-array-after-having-zero-ized-superblocks/

虽然上面的 mdadm 消息有些不准确/具有误导性/无帮助,但 mdadm 在娱乐方面却很智能。

相关内容