RAID 是否自动重新同步?

RAID 是否自动重新同步?

我随机检查了 RAID 阵列的状态,cat/proc/mdstat并意识到我的一个阵列似乎正在重新同步:

md1 : active raid1 sdb7[1] sdc7[0]
      238340224 blocks [2/2] [UU]
      [==========>..........]  resync = 52.2% (124602368/238340224) finish=75.0min speed=25258K/sec

这是为什么?这意味着什么?我似乎可以通过权限访问挂载点r/w

编辑1(回应SLM 的答案

grep如果我通过,我真的看不到任何东西dmesg,而且--detail开关也没有告诉我太多信息,即它显示重新同步正在进行中......但没有提示原因或为什么它可能不同步。 - 我想在开始更换硬件之前我可能只需要留意它。

答案1

这似乎表明 RAID 的 2 个成员之间的同步彼此不保持同步。

1. 调查日志

我会调查您的dmesg日志,看看是否有任何消息表明组成该阵列的任一物理 HDD 出现硬件故障。

2.检查mdadm

您还可以mdadm使用--detail开关来查找有关重新同步的更多信息,如下所示:

$ sudo mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Sat Jan 26 09:14:11 2008
     Raid Level : raid1
     Array Size : 976759936 (931.51 GiB 1000.20 GB)
  Used Dev Size : 976759936 (931.51 GiB 1000.20 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Fri Jan  1 01:29:16 2010
          State : clean, resyncing
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

 Rebuild Status : 50% complete

           UUID : 37a3bfcb:41393031:23c133e6:3b879f08
         Events : 0.2178969

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

如果两个设备看起来都很好,并且您无法查明哪个设备出现问题,您可能需要临时针对每个 HDD 运行 HDAT2 或 SpinRite 等诊断工具来确认其运行状况。

3. 布线

如果硬盘驱动器检查完毕,我会开始检查布线,通常会更换它们。

4. 控制器

接下来我将仔细检查控制器本身,要么将驱动器从受影响的系统中取出并在辅助系统中对其进行诊断,要么将第 3 方控制器卡添加到受影响的系统中以进一步诊断问题。

5、电源

不管你相信与否,我过去曾遇到过 HDD 和 RAID 问题,更换出现故障或即将出现故障的电源就解决了我的 RAID 运行状况问题。

答案2

检查您的 cron 文件,许多发行版每周执行一次计划的重新同步/重新检查。

在 CentOS 7.1 上,它位于 /etc/cron.d/raid-check 中

# Run system wide raid-check once a week on Sunday at 1am by default
0 1 * * Sun root /usr/sbin/raid-check

要配置行为,请编辑 /etc/sysconfig/raid-check

答案3

在 Debian 上,它是从以下位置完成的:

/etc/cron.d/mdadm

禁用:

chmod -x /usr/share/mdadm/checkarray

cron 作业checkarray在运行之前检查是否可执行。

也可以看看。

答案4

在较新的 Ubuntu(至少 22.04+)上,raid 通过由 systemd 计时器启动的 CRON 任务进行检查/重新同步。

$ systemctl list-timers
NEXT                        LEFT                LAST                        PASSED        UNIT                           ACTIVATES                       
___________________________________________________________________________________________________________________________________________________
Tue 2023-06-06 12:52:04 PDT 5h 17min left       Mon 2023-06-05 02:36:42 PDT 1 day 4h ago  mdmonitor-oneshot.timer        mdmonitor-oneshot.service
Sun 2023-07-02 22:17:28 PDT 3 weeks 5 days left Sun 2023-06-04 21:31:43 PDT 1 day 10h ago mdcheck_start.timer            mdcheck_start.service
n/a                         n/a                 Tue 2023-06-06 03:17:46 PDT 4h 16min ago  mdcheck_continue.timer         mdcheck_continue.service

(其他定时器未显示)

正如其他人提到的,他们mdcheck还将resync每月至少执行一次,以确保您的数据安全。如果您有大量数据(Tera 字节),则可能需要很长时间。

您可以使用以下show命令获取有关每个条目的详细信息:

systemctl show mdcheck_start

这将开始检查。确保mdcheck_continue它结束(以防它被中断,可能是由于重新启动)。

支票如何运作?

如果你看一下mdadm手册页,它会说:

_ --action= _

为所有 md 设备设置空闲、冻结、检查、修复之一的“sync_action”。设置为空闲将中止任何当前正在运行的操作,但某些操作会自动重新启动。设置为冻结将中止任何当前操作并确保不会自动启动其他操作。

检查和修复的详细信息可以在 md(4) 的“擦洗和不匹配”下找到。

所以我们这样做:

man md

并搜索擦洗……

擦洗和不匹配

由于存储设备随时可能产生坏块,因此定期读取阵列中所有设备上的所有块以尽早捕获此类坏块非常有价值。这个过程称为擦洗。

可以通过将检查或修复写入设备 sysfs 目录中的文件 md/sync_action 来清理 md 数组。

[...]

systemctl命令将向 md 发送修复操作,并且继续可确保该命令确实正在运行。这允许重新启动过程中断并干净地重新启动该过程。

相关内容