简单的 mdadm RAID 1 未激活备用

Del*_*tik 27 linux raid mdadm raid-1

我在 Ubuntu 12.04 LTS Precise Pangolin 上调用using的RAID 1阵列中创建了两个 2TB HDD 分区/dev/sdb1/dev/sdc1)。/dev/md0mdadm

该命令sudo mdadm --detail /dev/md0用于将两个驱动器指示为活动同步

然后,为了测试,我失败了/dev/sdb1,将其删除,然后使用命令再次添加它sudo mdadm /dev/md0 --add /dev/sdb1

watch cat /proc/mdstat 显示了阵列重建的进度条,但我不会花几个小时看它,所以我假设软件知道它在做什么。

进度条不再显示后,cat /proc/mdstat显示:

md0 : active raid1 sdb1[2](S) sdc1[1]
      1953511288 blocks super 1.2 [2/1] [U_]
Run Code Online (Sandbox Code Playgroud)

sudo mdadm --detail /dev/md0显示:

/dev/md0:
        Version : 1.2
  Creation Time : Sun May 27 11:26:05 2012
     Raid Level : raid1
     Array Size : 1953511288 (1863.01 GiB 2000.40 GB)
  Used Dev Size : 1953511288 (1863.01 GiB 2000.40 GB)
   Raid Devices : 2
  Total Devices : 2
    Persistence : Superblock is persistent

    Update Time : Mon May 28 11:16:49 2012
          State : clean, degraded 
 Active Devices : 1
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 1

           Name : Deltique:0  (local to host Deltique)
           UUID : 49733c26:dd5f67b5:13741fb7:c568bd04
         Events : 32365

    Number   Major   Minor   RaidDevice State
       1       8       33        0      active sync   /dev/sdc1
       1       0        0        1      removed

       2       8       17        -      spare   /dev/sdb1
Run Code Online (Sandbox Code Playgroud)

有人告诉我 mdadm 会自动用备用驱动器替换已移除的驱动器,但/dev/sdb1并未移动到预期位置 RaidDevice 1


UPDATE(30 2012年5月):badblocks整个的破坏性读-写测试/dev/sdb没有产生错误,因为预期; 两个硬盘都是新的。

在最新的编辑中,我使用以下命令组装了数组:

sudo mdadm --assemble --force --no-degraded /dev/md0 /dev/sdb1 /dev/sdc1
Run Code Online (Sandbox Code Playgroud)

输出是:

mdadm: /dev/md0 has been started with 1 drive (out of 2) and 1 rebuilding.
Run Code Online (Sandbox Code Playgroud)

重建看起来正常进行:

md0 : active raid1 sdc1[1] sdb1[2]
      1953511288 blocks super 1.2 [2/1] [U_]
      [>....................]  recovery =  0.6% (13261504/1953511288) finish=2299.7min speed=14060K/sec

unused devices: <none>
Run Code Online (Sandbox Code Playgroud)

我现在正在等待这次重建,但我期待/dev/sdb1成为一个备用,就像我之前尝试重建五六次一样。


更新(2012 年 5 月 31 日):是的,它仍然是备用的。啊!


更新(2012 年 6 月 1 日):我正在尝试Adrian Kelly建议的命令:

sudo mdadm --assemble --update=resync /dev/md0 /dev/sdb1 /dev/sdc1
Run Code Online (Sandbox Code Playgroud)

现在在等待重建...


更新(2012 年 6 月 2 日):不,仍然是备用...


更新(2012 年 6 月 4 日): PB提出了一个我忽略的问题:也许/dev/sdc1是遇到 I/O 错误。我没有费心去检查,/dev/sdc1因为它似乎工作得很好,而且是全新的,但驱动器末端的 I/O 错误是一种合理的可能性。

我在特价时购买了这些硬盘驱动器,因此其中一个已经出现故障也就不足为奇了。另外,他们都不支持SMART,所以难怪他们这么便宜......

这是我刚刚编写并遵循的数据恢复过程:

  1. sudo mdadm /dev/md0 --fail /dev/sdb1这样我就可以拿出来了/dev/sdb1
  2. sudo mdadm /dev/md0 --remove /dev/sdb1/dev/sdb1从数组中删除。
  3. /dev/sdc1 安装在 /media/DtkBk
  4. 格式/dev/sdb1为ext4。
  5. 安装/dev/sdb1/media/DtkBkTemp.
  6. cd /media 在那个领域工作。
  7. sudo chown deltik DtkBkTemp给我(用户名deltik)分区权限。
  8. 复制所有文件和目录: sudo rsync -avzHXShP DtkBk/* DtkBkTemp

更新(2012 年 6 月 6 日):我按照以下步骤对 进行了badblocks破坏性写入模式测试/dev/sdc

  1. sudo umount /media/DtkBk 以允许拆除阵列。
  2. sudo mdadm --stop /dev/md0 停止阵列。
  3. sudo badblocks -w -p 1 /dev/sdc -s -v擦除可疑硬盘驱动器,并在此过程中检查 I/O 错误。如果有 I/O 错误,这不是一个好兆头。希望我能得到退款...

我现在已经确认任何一个 HDD 上都没有输入/输出问题

从所有这些调查中,我最初的两个问题仍然成立。


我的问题是:

  1. 为什么备用驱动器没有变为主动同步?
  2. 如何使备用驱动器变为活动状态?

Ave*_*yne 17

这样做只是将驱动器放入阵列中,而实际上并未对其进行任何操作,即它是阵列的成员,但在其中并不处于活动状态。默认情况下,这会将其变为备用:

sudo mdadm /dev/md0 --add /dev/sdb1
Run Code Online (Sandbox Code Playgroud)

如果您有备用磁盘,您可以通过强制增加阵列的活动驱动器数量来增加它。有 3 个驱动器和 2 个预计处于活动状态,您需要将活动计数增加到 3。

mdadm --grow /dev/md0 --raid-devices=3
Run Code Online (Sandbox Code Playgroud)

RAID 阵列驱动程序会注意到您“短”了一个驱动器,然后寻找备用驱动器。找到备用驱动器,它会将其作为活动驱动器集成到阵列中。打开一个备用终端,让这个相当粗糙的命令行在其中运行,以密切关注重新同步的进度。请务必将其输入为一行或使用换行符 (\) 字符,一旦重建完成,只需在终端中输入 Ctrl-C。

while true; do sleep 60; clear; sudo mdadm --detail /dev/md0; echo; cat /proc/mdstat; done
Run Code Online (Sandbox Code Playgroud)

您的阵列现在将有两个同步的活动驱动器,但由于没有 3 个驱动器,因此它不会 100% 干净。移除故障驱动器,然后调整阵列大小。注意,--grow标志是有点用词不当的-它可能意味着无论是扩大或缩小:

sudo mdadm /dev/md0 --fail /dev/{failed drive}
sudo mdadm /dev/md0 --remove /dev/{failed drive}
sudo mdadm --grow /dev/md0 --raid-devices=2
Run Code Online (Sandbox Code Playgroud)

关于错误,驱动器的链接问题(即 PATA/SATA 端口、电缆或驱动器连接器)不足以触发热备用的故障转移,因为内核通常会切换到使用另一个“良好”的驱动器,同时将链接重置为“坏”驱动器。我知道这一点是因为我运行了一个 3 驱动器阵列,2 个热驱动器,1 个备用驱动器,其中一个驱动器最近决定在日志中出现一些问题。当我测试阵列中的所有驱动器时,所有 3 个驱动器都通过了 SMART 测试的“长”版本,因此盘片、机械组件或板载控制器没有问题 - 这会留下片状链接电缆或坏的 SATA 端口。也许这就是你所看到的。尝试将驱动器切换到不同的主板端口,或使用不同的电缆,看看是否有所改善。


后续:我完成了将镜像扩展到 3 个驱动器,失败并从 md 阵列中移除片状驱动器,热插拔电缆以更换新驱动器(主板支持)并重新添加驱动器。重新添加后,它立即开始重新同步驱动器。到目前为止,尽管驱动器被大量使用,但日志中没有出现任何错误。所以,是的,驱动电缆可能会变脆。


小智 8

我遇到了完全相同的问题,在我的情况下,我发现活动的 raid 磁盘在同步过程中遇到了读取错误。因此,新磁盘已成功同步更新并因此被标记为备用磁盘。

您可能需要检查您的 /var/log/messages 和其他系统日志是否有错误。此外,检查磁盘的 SMART 状态也可能是一个好主意:
1) 运行简短测试:

“smartctl -t 短 /dev/sda”

2) 显示测试结果:

“smartctl -l 自测 /dev/sda”

就我而言,这返回了如下内容:

=== 读取智能数据部分的开始 ===
智能自检日志结构修订号 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
1 Extended offline Completed:读取失败 90% 7564 27134728
2 Short offline Completed:读取失败 90% 7467 1408449701

我不得不启动一个实时发行版并手动将数据从有缺陷的磁盘复制到新的(当前为“备用”)磁盘。