确定驱动器从软件 RAID 阵列中移除的原因并安全重建

确定驱动器从软件 RAID 阵列中移除的原因并安全重建

我有一个相当大的 Linux 软件 raid6 阵列,有 16 个设备。最近我注意到阵列中的一个驱动器似乎出现故障:

$ cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4] [linear] [multipath] [raid0] [raid1] [raid10] 
md0 : active raid6 sdk[17] sdn[19] sdp[16] sdg[13] sdi[10] sdl[8] sdj[11] sdh[14] sde[0] sdf[12] sdo[15] sda[2] sdc[6] sdb[7] sdd[1]
      41021890560 blocks super 1.2 level 6, 512k chunk, algorithm 2 [16/15] [UUUUUUUUUUUUUUU_]
      bitmap: 22/22 pages [88KB], 65536KB chunk

unused devices: <none>

进一步检查细节:

# mdadm --detail /dev/md0
/dev/md0:
           Version : 1.2
     Creation Time : 
        Raid Level : raid6
        Array Size : 41021890560 (39121.52 GiB 42006.42 GB)
     Used Dev Size : 2930135040 (2794.39 GiB 3000.46 GB)
      Raid Devices : 16
     Total Devices : 15
       Persistence : Superblock is persistent

     Intent Bitmap : Internal

       Update Time : 
             State : clean, degraded 
    Active Devices : 15
   Working Devices : 15
    Failed Devices : 0
     Spare Devices : 0

            Layout : left-symmetric
        Chunk Size : 512K

Consistency Policy : bitmap

              Name : 
              UUID :
            Events : 1781105

    Number   Major   Minor   RaidDevice State
       0       8       64        0      active sync   /dev/sde
       1       8       48        1      active sync   /dev/sdd
       2       8        0        2      active sync   /dev/sda
      12       8       80        3      active sync   /dev/sdf
       6       8       32        4      active sync   /dev/sdc
       7       8       16        5      active sync   /dev/sdb
       8       8      176        6      active sync   /dev/sdl
      17       8      160        7      active sync   /dev/sdk
      10       8      128        8      active sync   /dev/sdi
      11       8      144        9      active sync   /dev/sdj
      13       8       96       10      active sync   /dev/sdg
      14       8      112       11      active sync   /dev/sdh
      16       8      240       12      active sync   /dev/sdp
      15       8      224       13      active sync   /dev/sdo
      19       8      208       14      active sync   /dev/sdn
       -       0        0       15      removed

是的,我使用的是整个磁盘而不是分区。我现在知道这不是最佳做法,但我在 2017 年构建 raid 时并不知道这一点。到目前为止,它还没有困扰我。我有与现有成员驱动器完全相同的品牌和型号的替换驱动器。

所以看起来/dev/sdm驱动器被移除了。我无法确定为什么它已被移除。dmesg 或 /var/log 中似乎没有任何消息指出此驱动器被踢出的原因。该驱动器通过了快速和扩展的 SMART 测试。

使用 mdadm 检查驱动器,结果让我有点困惑:

# mdadm --examine /dev/sdm
/dev/sdm:
          Magic : 
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 
           Name : 
  Creation Time : 
     Raid Level : raid6
   Raid Devices : 16

 Avail Dev Size : 5860271024 (2794.39 GiB 3000.46 GB)
     Array Size : 41021890560 (39121.52 GiB 42006.42 GB)
  Used Dev Size : 5860270080 (2794.39 GiB 3000.46 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
   Unused Space : before=262064 sectors, after=944 sectors
          State : clean
    Device UUID : 

Internal Bitmap : 8 sectors from superblock
    Update Time : 
  Bad Block Log : 512 entries available at offset 24 sectors
       Checksum : 8cfef706 - correct
         Events : 328936

         Layout : left-symmetric
     Chunk Size : 512K

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

尽管其状态为“已移除”设备,但此处显示为“活动设备 15”,并且阵列状态显示有 16 个活动设备。这值得担心吗?

为了进行比较,以下是检查阵列中另一个正常工作的驱动器的输出:

# mdadm --examine /dev/sdl
/dev/sdl:
          Magic : a92b4efc
        Version : 1.2
    Feature Map : 0x1
     Array UUID : 
           Name :
  Creation Time : 
     Raid Level : raid6
   Raid Devices : 16

 Avail Dev Size : 5860271024 (2794.39 GiB 3000.46 GB)
     Array Size : 41021890560 (39121.52 GiB 42006.42 GB)
  Used Dev Size : 5860270080 (2794.39 GiB 3000.46 GB)
    Data Offset : 262144 sectors
   Super Offset : 8 sectors
   Unused Space : before=262056 sectors, after=944 sectors
          State : clean
    Device UUID :

Internal Bitmap : 8 sectors from superblock
    Update Time : 
  Bad Block Log : 512 entries available at offset 72 sectors
       Checksum : 9bf69eb5 - correct
         Events : 1782505

         Layout : left-symmetric
     Chunk Size : 512K

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

我觉得奇怪的是这个输出现在显示丢失的驱动器。

有人能告诉我通过这样的方式移除故障驱动器来恢复阵列是否安全吗:

  1. mdadm --manage /dev/md0 --remove /dev/sdm(这可能不会产生任何效果,因为驱动器已被“移除”)
  2. 注释掉该数组,/etc/fstab这样它就不会在启动时自动挂载
  3. 关闭机器
  4. 更换故障驱动器
  5. 重新启动,mdadm --manage /dev/md0 --add /dev/sdX其中 X 是新的、干净的驱动器的字母
  6. 检查阵列是否正在恢复并等待其完成

我有备份,但其中一些输出让我感到紧张,而且丢失整个阵列仍然会很麻烦。感谢您的帮助,谢谢。

答案1

我成功重建了阵列,但我仍然不确定是什么错误导致相关驱动器出现故障。smartctl -x尽管总体状态为PASSED,但磁盘上仍记录了一些通用的 URE,这似乎是个假朋友。

如果它对任何人有帮助,我遵循了以下步骤:

  1. 运行mdadm --manage /dev/md0 --remove /dev/sdm,但正如我所想的那样,这没有任何效果,因为磁盘已被自动移除。同样mdadm --manage /dev/md0 --fail /dev/sdm没有任何效果,因为磁盘处于移除状态。
  2. 注释掉我的数组以/etc/fstab防止它在启动时被安装。
  3. 关闭系统。
  4. 从驱动器托架中取出故障驱动器,并用新驱动器替换。
  5. 重新启动,验证 HBA 在启动时可以看到所有 16 个设备。
  6. 使用 检查新驱动器(也分配了/dev/sdm)上是否存在分区表parted /dev/sdm print。我使用的 WD 驱动器确实出厂时附带了 GPT 分区表,它显示在这里。我们需要摆脱它。
  7. 使用 销毁新磁盘上的分区表sgdisk --zap /dev/sdm这是使用整个磁盘成员时的最佳实践。如果您使用分区作为阵列成员,则可能需要在此步骤中将分区表从工作驱动器复制到新驱动器 - 详细信息可参见这里。无论哪种方式,请确保选择正确的磁盘并按正确的顺序!
  8. 使用以下方法添加新磁盘mdadm --manage /dev/md0 --add /dev/sdm
  9. 等待(就我而言)大约 6 个小时,阵列才能重​​建。使用 监控状态cat /proc/mdstat
  10. 为重建成功而欢欣鼓舞。希望如此。

相关内容