mdadm:组装使用缺失磁盘创建的 raid5

mdadm:组装使用缺失磁盘创建的 raid5

2 年前我创建了一个有 2 个磁盘的 raid5 阵列,如下所示:

mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sdb1 /dev/sdc1 missing

现在我已经用最新的 ubuntu 服务器 LTS 重建了我的系统,并且 mdadm 不会重新组装正在运行的阵列:

root@htpc:~# mdadm -E /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 530afddc:f4e62791:eba1539c:15672d1d
           Name : ubuntu:0
  Creation Time : Sat Aug 17 11:37:44 2019
     Raid Level : raid5
   Raid Devices : 3

 Avail Dev Size : 11720778895 (5588.90 GiB 6001.04 GB)
     Array Size : 11720778752 (11177.81 GiB 12002.08 GB)
  Used Dev Size : 11720778752 (5588.90 GiB 6001.04 GB)
    Data Offset : 264192 sectors
   Super Offset : 8 sectors
   Unused Space : before=264112 sectors, after=143 sectors
          State : active
    Device UUID : 1c03a042:a40c1eb8:8aa0533c:22a74311

Internal Bitmap : 8 sectors from superblock
    Update Time : Fri Apr  9 17:24:44 2021
  Bad Block Log : 512 entries available at offset 32 sectors
       Checksum : eaaa2b7f - correct
         Events : 223469

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 0
   Array State : AA. ('A' == active, '.' == missing, 'R' == replacing)
root@htpc:~# mdadm -E /dev/sdc1
/dev/sdc1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x9
     Array UUID : 530afddc:f4e62791:eba1539c:15672d1d
           Name : ubuntu:0
  Creation Time : Sat Aug 17 11:37:44 2019
     Raid Level : raid5
   Raid Devices : 3

 Avail Dev Size : 11720778895 (5588.90 GiB 6001.04 GB)
     Array Size : 11720778752 (11177.81 GiB 12002.08 GB)
  Used Dev Size : 11720778752 (5588.90 GiB 6001.04 GB)
    Data Offset : 264192 sectors
   Super Offset : 8 sectors
   Unused Space : before=264112 sectors, after=143 sectors
          State : active
    Device UUID : 019a2ef9:f11076b3:7060bf02:3b6ba98e

Internal Bitmap : 8 sectors from superblock
    Update Time : Fri Apr  9 17:24:44 2021
  Bad Block Log : 512 entries available at offset 32 sectors - bad blocks present.
       Checksum : e0624aba - correct
         Events : 223469

         Layout : left-symmetric
     Chunk Size : 512K

   Device Role : Active device 1
   Array State : AA. ('A' == active, '.' == missing, 'R' == replacing)
root@htpc:~# mdadm --assemble --scan
mdadm: /dev/md/ubuntu:0 assembled from 2 drives - not enough to start the array while not clean - consider --force.
mdadm: No arrays found in config file or automatically
root@htpc:~# mdadm --detail /dev/md127
/dev/md127:
           Version : 1.2
        Raid Level : raid0
     Total Devices : 2
       Persistence : Superblock is persistent

             State : inactive
   Working Devices : 2

              Name : ubuntu:0
              UUID : 530afddc:f4e62791:eba1539c:15672d1d
            Events : 223469

    Number   Major   Minor   RaidDevice

       -       8       33        -        /dev/sdc1
       -       8       17        -        /dev/sdb1
root@htpc:~#

当我创建缺少磁盘的 raid5 阵列时,根本没有同步,所以这是一个“假”raid5,可能有点像 raid0,而且 mdadm assemble 输出并不让我感到惊讶。但我不想犯任何错误,那么此时我有什么选择呢?

  • 启动该状态下的阵列

    mdam——启动/dev/md127

我不确定这一点,因为每个磁盘上的元数据都谈到了 raid 5......

  • 我现在有第三个磁盘,其中有一个干净的 /dev/sdd1 分区,我应该尝试

    mdadm --assemble /dev/md0 /dev/db1 /dev/sdc1 /dev/sdd1

在这种情况下,我认为 mdadm 将尝试重建阵列,但对于这个 mdadm 将在前两个磁盘上期望 raid 5 条带数据,但事实并非如此,因为它是一种 raid 0...

我确实需要恢复这些数据,但我找不到好的命令。任何帮助都将不胜感激 :)

答案1

总结

首先,最好手动再检查一下事情是否真的处于预期状态,这样你就不会丢失任何信息。这可以通过使用mdadm --examine --scanmdadm --examine /dev/sdXY(组件)、、、lsblk检查blkiddmesg来完成。从examine命令中,你会知道你拥有的数组的 UUID:

# mdadm --examine --scan
ARRAY /dev/md/0  metadata=1.2 UUID=6bbeca3f:5284fd0a:e15d62ec:b6a5a9a4 name=vh1:0
ARRAY /dev/md/1  metadata=1.2 UUID=cc82d789:94c6c7c2:11e57657:710a4175 name=vh1:1
ARRAY /dev/md/2  metadata=1.2 UUID=ddfbcbfd:9c11fd11:72eab0f2:88e595b1 name=vh1:2

当您确信自己知道自己在做什么时,请使用--assemble --force强制组装特定数组:

mdadm --assemble --force --uuid ddfbcbfd:9c11fd11:72eab0f2:88e595b1 /dev/md/2

或一次处理所有数组:

mdadm --assemble --force --scan

玩得开心!

解释

Linux 软件 RAID 会跟踪阵列上次运行时的状态。它会记录阵列是在最佳状态还是降级状态,以及存在哪些设备(哪些阵列插槽被占用)。此信息存储在 MD 超级块中。详细信息在MD RAID 维基

如果存在超级块,该命令mdadm --examine /dev/sdXY将显示其解码的内容:/dev/sdXY

/dev/sdc1:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : cc82d789:94c6c7c2:11e57657:710a4175
           Name : vh1:1  (local to host vh1)
  Creation Time : Fri Aug 28 16:54:57 2020
     Raid Level : raid1
   Raid Devices : 2

 Avail Dev Size : 1953257472 (931.39 GiB 1000.07 GB)
     Array Size : 976628736 (931.39 GiB 1000.07 GB)
    Data Offset : 264192 sectors
   Super Offset : 8 sectors
   Unused Space : before=264112 sectors, after=0 sectors
          State : active
    Device UUID : 93be2645:7b75bdb5:89f489ac:003794ff

Internal Bitmap : 8 sectors from superblock
    Update Time : Thu Jun  3 10:26:30 2021
  Bad Block Log : 512 entries available at offset 16 sectors
       Checksum : 4c9ddac1 - correct
         Events : 16674


   Device Role : Active device 0
   Array State : AA ('A' == active, '.' == missing, 'R' == replacing)

这可能有助于回答一些“为什么”的问题。

当 MD 启动并扫描所有适合的超级块设备时,它会检查内容是否与存储的信息真正匹配。如果内容不匹配,它将不会自动组装该阵列。这样做有几个原因,例如,某些设备初始化速度可能很慢,最好等到一切正常后直接以最佳状态启动阵列,而不是以降级状态启动阵列,然后在迟到的设备出现后执行恢复。

但是如果迟到的设备从未出现,例如它被物理移除,阵列将不会自行启动。在这种情况下,您可以使用命令它启动,--force如果仍然有足够的设备供它在降级状态下运行。

也可以看看这个答案

相关内容