某些磁盘多次断电后 Linux 软 RAID5 无法启动,怎么办?

某些磁盘多次断电后 Linux 软 RAID5 无法启动,怎么办?

我备份了所有重要数据。最后需要恢复。但在我这样做之前,我想先尝试一些东西,这是一个了解我在这里使用的所有东西的好机会。

我有一个 mpt sas 控制器,带有 8 个 SATA 通道,连接到两个配置的内部 2.5 英寸磁盘托架。其中两个用于 SSD 驱动器,仅用于缓存 lvm 卷。

6 个 1 TB 磁盘用于配置为 RAID5 软阵列的分区 3 上的数据部分。

其中两个已用于分区 1 上的启动部分和分区 2 上的根部分。两个启动部分都是带有 ext3 fs 的简单 RAID1。两个启动部分都是使用 luks 加密的 RAID1,并且具有带有多个 lvs 的 lvm vg xenrootdg。所有 6 个数据部分都用作 RAID5,如上所述。raid 卷是 luks 加密的,在这些卷上有一个带有 vg xendatadg 的 lvm。只有在 RAID5 卷上启动它们时才会出现问题。

主要问题是装有 6 张 1TB 光盘中的 4 张的 4 盘机箱多次断电。由于移除了一张光盘,因此必须添加一张新光盘,也许快到最后必须重新同步新光盘。目前尚不清楚具体情况。

第一次故障后我可以启动卷并开始重新同步。但问题再次出现,因此这些 RAID 卷再次出现故障。

第二次故障时,系统无法读取特殊磁盘的扇区,并且由于记录了某个故障磁盘的某个扇区的永久读取错误,RAID5 已降级。

同时,内核以新名称重新注册了磁盘(例如,从 sde 重命名为 sdk 等等)。

系统重启后,我检查了哪个磁盘被记录为故障,并通过比较序列号找到了它们。将磁盘添加到 /dev/zero 没有显示任何问题,因此我尝试再次重新同步,但出现了同样的问题。

现在我意识到这可能是光盘托架电源的问题,所以我取出了所有光盘,并至少将它们连接到主板上现有的 SATA 端口。我向 sas 控制器添加了更多光盘,这样我就可以使用 dd 对分区进行备份了。

我能够将所有相关分区复制到两个新磁盘,因此读取不是问题。

此外,lvm vg 中最多只有 3 个卷在使用。因此,大多数 lvs 应该仍处于干净状态,因为在我移除第一个磁盘 #2 (sdl3) 后没有发生任何修改。

我检查了 smartctl,所以注册的磁盘本身没有永久性问题(没有显示无法恢复的错误,也没有显示重定位的扇区)。

但尽管 RAID5 卷应该有足够的磁盘,但我却无法启动它。

我有 5 张光盘(#0、1、3、4、5)和仍然存在的已移除光盘 #2。此外,新的替换光盘 #2 也在那里,但显示为备用。应该可以使用 #0、1、3、4、5 来调出卷,这是 6 个可用卷中的 5 个。但无论我尝试什么,至少 #3 给我带来了最大的问题,因为它从未被接受为卷的一部分。

由于 sdX 可以更改此处显示的设备角色的检查顺序。这里暂时列出一个简短的列表:

#0 sdc3 #1 sdk3 #3 sda3 #4 sdg3 #5 sdf3

删除 #2 sdl3 新建 #2 标记为 #S sdb3

root@newxen:~# mdadm -E /dev/sdc3
/dev/sdc3:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 8d0acbbb:73bcfac9:a26557de:c29d5434
           Name : newxen:128  (local to host newxen)
  Creation Time : Sun Nov  8 22:22:15 2015
     Raid Level : raid5
   Raid Devices : 6

 Avail Dev Size : 1909221936 (910.39 GiB 977.52 GB)
     Array Size : 4773051840 (4551.94 GiB 4887.61 GB)
  Used Dev Size : 1909220736 (910.39 GiB 977.52 GB)
    Data Offset : 260992 sectors
   Super Offset : 8 sectors
   Unused Space : before=260912 sectors, after=1200 sectors
          State : clean
    Device UUID : 1142cc76:b224395c:8fb15126:fd1801fe

Internal Bitmap : 8 sectors from superblock
    Update Time : Tue Jan 16 00:02:32 2024
       Checksum : bae896cd - correct
         Events : 248741

         Layout : left-symmetric
     Chunk Size : 64K

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

   root@newxen:~# mdadm -E /dev/sdk3
/dev/sdk3:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 8d0acbbb:73bcfac9:a26557de:c29d5434
           Name : newxen:128  (local to host newxen)
  Creation Time : Sun Nov  8 22:22:15 2015
     Raid Level : raid5
   Raid Devices : 6

 Avail Dev Size : 1909221936 (910.39 GiB 977.52 GB)
     Array Size : 4773051840 (4551.94 GiB 4887.61 GB)
  Used Dev Size : 1909220736 (910.39 GiB 977.52 GB)
    Data Offset : 260992 sectors
   Super Offset : 8 sectors
   Unused Space : before=260912 sectors, after=1200 sectors
          State : clean
    Device UUID : 701ed2ed:13a03708:da9cc185:9c9ce3e2

Internal Bitmap : 8 sectors from superblock
    Update Time : Tue Jan 16 10:26:32 2024
       Checksum : 223defb1 - correct
         Events : 248741

         Layout : left-symmetric
     Chunk Size : 64K

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

   root@newxen:~# mdadm -E /dev/sdl3
/dev/sdl3:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 8d0acbbb:73bcfac9:a26557de:c29d5434
           Name : newxen:128  (local to host newxen)
  Creation Time : Sun Nov  8 22:22:15 2015
     Raid Level : raid5
   Raid Devices : 6

 Avail Dev Size : 1909221936 (910.39 GiB 977.52 GB)
     Array Size : 4773051840 (4551.94 GiB 4887.61 GB)
  Used Dev Size : 1909220736 (910.39 GiB 977.52 GB)
    Data Offset : 260992 sectors
   Super Offset : 8 sectors
   Unused Space : before=260912 sectors, after=1200 sectors
          State : clean
    Device UUID : 1b34e8d5:f3df3e52:307a06a0:38c265e4

Internal Bitmap : 8 sectors from superblock
    Update Time : Mon Jan 15 13:36:40 2024
       Checksum : 7023234b - correct
         Events : 248741

         Layout : left-symmetric
     Chunk Size : 64K

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

   root@newxen:~# mdadm -E /dev/sda3
/dev/sda3:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x83
     Array UUID : 8d0acbbb:73bcfac9:a26557de:c29d5434
           Name : newxen:128  (local to host newxen)
  Creation Time : Sun Nov  8 22:22:15 2015
     Raid Level : raid5
   Raid Devices : 6

 Avail Dev Size : 1909221936 (910.39 GiB 977.52 GB)
     Array Size : 4773051840 (4551.94 GiB 4887.61 GB)
  Used Dev Size : 1909220736 (910.39 GiB 977.52 GB)
    Data Offset : 260992 sectors
   Super Offset : 8 sectors
Recovery Offset : 0 sectors
   Unused Space : before=260912 sectors, after=1200 sectors
          State : clean
    Device UUID : fa9d44c6:bb18bc8c:04ed5943:13a6ddfb

Internal Bitmap : 8 sectors from superblock
    Update Time : Tue Jan 16 00:02:32 2024
       Checksum : 55c99a69 - correct
         Events : 243265

         Layout : left-symmetric
     Chunk Size : 64K

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

   root@newxen:~# mdadm -E /dev/sdg3
/dev/sdg3:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x8b
     Array UUID : 8d0acbbb:73bcfac9:a26557de:c29d5434
           Name : newxen:128  (local to host newxen)
  Creation Time : Sun Nov  8 22:22:15 2015
     Raid Level : raid5
   Raid Devices : 6

 Avail Dev Size : 1909221936 (910.39 GiB 977.52 GB)
     Array Size : 4773051840 (4551.94 GiB 4887.61 GB)
  Used Dev Size : 1909220736 (910.39 GiB 977.52 GB)
    Data Offset : 260992 sectors
   Super Offset : 8 sectors
Recovery Offset : 0 sectors
   Unused Space : before=260904 sectors, after=1200 sectors
          State : clean
    Device UUID : 63a171d2:dad103ed:ff18efc4:d31bc05d

Internal Bitmap : 8 sectors from superblock
    Update Time : Tue Jan 16 10:22:01 2024
  Bad Block Log : 512 entries available at offset 72 sectors - bad blocks present.
       Checksum : a5b990c1 - correct
         Events : 244946

         Layout : left-symmetric
     Chunk Size : 64K

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

   root@newxen:~# mdadm -E /dev/sdf3
/dev/sdf3:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 8d0acbbb:73bcfac9:a26557de:c29d5434
           Name : newxen:128  (local to host newxen)
  Creation Time : Sun Nov  8 22:22:15 2015
     Raid Level : raid5
   Raid Devices : 6

 Avail Dev Size : 1909221936 (910.39 GiB 977.52 GB)
     Array Size : 4773051840 (4551.94 GiB 4887.61 GB)
  Used Dev Size : 1909220736 (910.39 GiB 977.52 GB)
    Data Offset : 260992 sectors
   Super Offset : 8 sectors
   Unused Space : before=260912 sectors, after=1200 sectors
          State : clean
    Device UUID : d6e11e48:e1258598:f9d5251c:795c8308

Internal Bitmap : 8 sectors from superblock
    Update Time : Tue Jan 16 10:26:32 2024
       Checksum : c8dc31e3 - correct
         Events : 248741

         Layout : left-symmetric
     Chunk Size : 64K

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

Here the replacing disc
root@newxen:~# mdadm -E /dev/sdb3
/dev/sdb3:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x9
     Array UUID : 8d0acbbb:73bcfac9:a26557de:c29d5434
           Name : newxen:128  (local to host newxen)
  Creation Time : Sun Nov  8 22:22:15 2015
     Raid Level : raid5
   Raid Devices : 6

 Avail Dev Size : 7720024847 (3681.19 GiB 3952.65 GB)
     Array Size : 4773051840 (4551.94 GiB 4887.61 GB)
  Used Dev Size : 1909220736 (910.39 GiB 977.52 GB)
    Data Offset : 260992 sectors
   Super Offset : 8 sectors
   Unused Space : before=260912 sectors, after=5810804111 sectors
          State : clean
    Device UUID : 1be91027:ca00bcc9:7e21dd61:76cdf787

Internal Bitmap : 8 sectors from superblock
    Update Time : Tue Jan 16 10:26:32 2024
  Bad Block Log : 512 entries available at offset 16 sectors - bad blocks present.
       Checksum : f892a18d - correct
         Events : 248741

         Layout : left-symmetric
     Chunk Size : 64K

   Device Role : spare
   Array State : .A...A ('A' == active, '.' == missing, 'R' == replacing)

现在的情况:

root@newxen:~# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md128 : inactive sda3[3](S) sdb3[6](S) sdf3[5](S) sdc3[0](S) sdg3[2](S) sdk3[1](S)
      8633067263 blocks super 1.2
...

root@newxen:~# mdadm --detail /dev/md128
/dev/md128:
           Version : 1.2
        Raid Level : raid0
     Total Devices : 6
       Persistence : Superblock is persistent

             State : inactive
   Working Devices : 6

              Name : newxen:128  (local to host newxen)
              UUID : 8d0acbbb:73bcfac9:a26557de:c29d5434
            Events : 248741

    Number   Major   Minor   RaidDevice

       -       8      163        -        /dev/sdk3
       -       8       99        -        /dev/sdg3
       -       8       83        -        /dev/sdf3
       -       8       35        -        /dev/sdc3
       -       8       19        -        /dev/sdb3
       -       8        3        -        /dev/sda3

如果我检查最新日期和数组状态,那么我的意思是首先 1 月 15 日 13:36:40 sdl3 必须设置为失败并删除(我手动完成)带有 AAAAAA 但应该是干净的 1 月 16 日 00:02:32 sda3 带有 AAAA.A 看起来干净 1 月 16 日 00:02:32 sdc3 带有 AARA.A 看起来干净 1 月 16 日 10:22:01 sdg3 带有 .AA.AA 看起来不干净 1 月 16 日 10:26:32 sdk3 带有 .A...A 看起来不干净 1 月 16 日 10:26:32 sdf3 带有 .A...A 看起来干净 1 月 16 日 10:26:32 sdb3 带有 .A..A 看起来不干净

应该可以使用现有部件 sda3 sdc3 sdg3 sdk3 sdf3 组装 raid 卷,可能是因为它位于阵列 sdb3 中。

我尝试了不同的方法,但没有一个能让我回到重新同步卷。

mdadm --assemble --scan --verbose
...
mdadm: /dev/sda3 is identified as a member of /dev/md128, slot 3.
mdadm: /dev/sdl3 is identified as a member of /dev/md128, slot 2.
mdadm: /dev/sdf3 is identified as a member of /dev/md128, slot 5.
mdadm: /dev/sdg3 is identified as a member of /dev/md128, slot 4.
mdadm: /dev/sdk3 is identified as a member of /dev/md128, slot 1.
mdadm: /dev/sdc3 is identified as a member of /dev/md128, slot 0.
mdadm: /dev/sdb3 is identified as a member of /dev/md128, slot -1.
mdadm: ignoring /dev/sdk3 as it reports /dev/sdl3 as failed
mdadm: ignoring /dev/sdf3 as it reports /dev/sdl3 as failed
mdadm: device 12 in /dev/md128 has wrong state in superblock, but /dev/sdb3 seems ok
mdadm: no uptodate device for slot 1 of /dev/md128
mdadm: added /dev/sdl3 to /dev/md128 as 2
mdadm: added /dev/sda3 to /dev/md128 as 3 (possibly out of date)
mdadm: added /dev/sdg3 to /dev/md128 as 4 (possibly out of date)
mdadm: no uptodate device for slot 5 of /dev/md128
mdadm: added /dev/sdb3 to /dev/md128 as -1
mdadm: added /dev/sdc3 to /dev/md128 as 0
mdadm: /dev/md128 assembled from 2 drives and 1 spare - not enough to start the array.
...
root@newxen:~# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md128 : inactive sdf3[5](S) sdb3[6](S) sdc3[0](S) sdk3[1](S) sdg3[2](S) sdl3[4](S)
      8633067263 blocks super 1.2
...
root@newxen:~# mdadm --detail /dev/md128
/dev/md128:
           Version : 1.2
        Raid Level : raid0
     Total Devices : 6
       Persistence : Superblock is persistent

             State : inactive
   Working Devices : 6

              Name : newxen:128  (local to host newxen)
              UUID : 8d0acbbb:73bcfac9:a26557de:c29d5434
            Events : 248741

    Number   Major   Minor   RaidDevice

       -       8      179        -        /dev/sdl3
       -       8      163        -        /dev/sdk3
       -       8       99        -        /dev/sdg3
       -       8       83        -        /dev/sdf3
       -       8       35        -        /dev/sdc3
       -       8       19        -        /dev/sdb3

因此,看起来旧的删除的 sdl3 和替换的 sdb3 造成了一些麻烦。因此再次停止了 md128,并尝试在没有它们的情况下手动启动它:

root@newxen:~# mdadm --assemble /dev/md128 /dev/sdc3 /dev/sdk3 /dev/sda3 /dev/sdg3 /dev/sdf3 --verbose
mdadm: looking for devices for /dev/md128
mdadm: /dev/sdc3 is identified as a member of /dev/md128, slot 0.
mdadm: /dev/sdk3 is identified as a member of /dev/md128, slot 1.
mdadm: /dev/sda3 is identified as a member of /dev/md128, slot 3.
mdadm: /dev/sdg3 is identified as a member of /dev/md128, slot 4.
mdadm: /dev/sdf3 is identified as a member of /dev/md128, slot 5.
mdadm: ignoring /dev/sdk3 as it reports /dev/sdc3 as failed
mdadm: ignoring /dev/sdg3 as it reports /dev/sdc3 as failed
mdadm: ignoring /dev/sdf3 as it reports /dev/sdc3 as failed
mdadm: no uptodate device for slot 1 of /dev/md128
mdadm: no uptodate device for slot 2 of /dev/md128
mdadm: added /dev/sda3 to /dev/md128 as 3 (possibly out of date)
mdadm: no uptodate device for slot 4 of /dev/md128
mdadm: no uptodate device for slot 5 of /dev/md128
mdadm: added /dev/sdc3 to /dev/md128 as 0
mdadm: /dev/md128 assembled from 1 drive - not enough to start the array.

root@newxen:~# cat /proc/mdstat 
Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5] [raid4] [raid10] 
md128 : inactive sdk3[1](S) sdf3[5](S) sdg3[2](S) sdc3[0](S)
      3818443872 blocks super 1.2
...

root@newxen:~# mdadm --detail /dev/md128
/dev/md128:
           Version : 1.2
        Raid Level : raid0
     Total Devices : 4
       Persistence : Superblock is persistent

             State : inactive
   Working Devices : 4

              Name : newxen:128  (local to host newxen)
              UUID : 8d0acbbb:73bcfac9:a26557de:c29d5434
            Events : 248741

    Number   Major   Minor   RaidDevice

       -       8      163        -        /dev/sdk3
       -       8       99        -        /dev/sdg3
       -       8       83        -        /dev/sdf3
       -       8       35        -        /dev/sdc3

所以我很疑惑,sda3 没有显示在详细信息中。

我还尝试使用 sdl3 代替 sdb3,并尝试重新添加缺失的部分,但没有什么帮助。所以我想我应该将超级块清零,并使用 --assume-clean 选项重新创建 raid。在我看来,它应该按正确的顺序进行。最好的情况下,也许应该没有 sdb3 和 sdl3,因为我不确定在第一个问题发生之前 sdb3 是否曾经达到同步状态。有办法检查吗?

因此,如果没有其他选择,我会这样做(这个顺序正确吗?)

mdadm --create --verbose --force --assume-clean /dev/md128 --level=5 --raid-devices=6 /dev/sdc3 /dev/sdk3 missing /dev/sda3 /dev/sdg3 /dev/sdf3

另一种解决方案可能是,如果我假设磁盘 sdb3 已经几乎同步。

mdadm --create --verbose --force --assume-clean /dev/md128 --level=5 --raid-devices=6 /dev/sdc3 /dev/sdk3 /dev/sdb3 /dev/sda3 /dev/sdg3 /dev/sdf3

我如何检查?:

echo check >> /sys/block/md128/md/sync_action and then check dmesg carefully?

我还想知道的是,重建完成后,哪些领域需要做好准备应对问题?有什么建议可以让我识别这些问题吗?

添加了更多详细信息:很难找到详细信息。所以如果有人可以确认或纠正我的想法就好了。

同时解密测试也必须完成。设备顺序的排列必须正确无误。

因此,通过启动并运行 RAID 阵列是可能的,但数据本身看起来仍然混合在一起并且仍然不可用。因此,我暂时无法解密它们上的 luks 数据。

相关内容