如何在运行时检查“mdadm”RAID?

djs*_*ide 58 raid mdadm

我开始在家里收集计算机并支持它们,我有我的“服务器”linux 机器运行 RAID 阵列。

目前mdadm RAID-1RAID-5一旦我有更多的驱动器(然后RAID-6我希望)。但是,我听说过有关数据在一个驱动器上损坏的各种故事,并且您从未注意到由于使用了另一个驱动器,直到第一个驱动器出现故障,并且您发现第二个驱动器也被拧紧(以及第 3、第 4 个驱动器) ,第 5 个驱动器)。

显然备份很重要,我也在处理这个问题,但是我知道我以前看过声称可以帮助解决这个问题并允许您在运行时检查 RAID 的脚本。但是,现在再次查找这些脚本时,我发现很难找到与我之前运行的内容相似的任何内容,而且我觉得我已经过时并且不了解发生了什么变化。

您将如何检查正在运行的 RAID 以确保所有磁盘仍在正常执行?

我监控所有驱动器上的 SMART,并mdadm设置在出现故障时给我发送电子邮件,但我想知道我的驱动器偶尔也会“检查”自己。

Gil*_*il' 70

具有冗余的 RAID 的要点是它会尽可能长时间地运行,但显然它会检测到使其进入降级模式的错误,例如出现故障的磁盘。您可以使用以下命令显示数组的当前状态mdadm -D

# mdadm -D /dev/md0
<snip>
       0       8        5        0      active sync   /dev/sda5
       1       8       23        1      active sync   /dev/sdb7
Run Code Online (Sandbox Code Playgroud)

此外,mdadm -D如果存在任何问题,例如组件发生故障,则的返回状态为非零(1 表示 RAID 模式补偿的错误,2 表示完全故障)。

您还可以通过查看 获得所有 RAID 设备状态的快速摘要/proc/mdstat。您也可以获取有关 RAID 设备的信息/sys/class/block/md*/md/*;请参阅Documentation/md.txt内核文档。有些/sys条目也是可写的;例如,您可以触发对md0with的全面检查echo check >/sys/class/block/md0/md/sync_action

除了这些抽查之外,一旦发生不好的事情,mdadm 会立即通知您。确保您已MAILADDR root/etc/mdadm.conf(某些发行版(例如 Debian)自动设置)。然后,一旦发生错误(降级阵列),您就会收到电子邮件通知

确保您确实在本地机器上接收发送到 root 的邮件(一些现代发行版忽略了这一点,因为他们认为所有电子邮件都通过外部提供商——但接收本地邮件对于任何认真的系统管理员来说都是必要的)。通过向 root 发送邮件来测试:echo hello | mail -s test root@localhost。通常,正确的电子邮件设置需要两件事:

  • 在本地机器上运行MTA。MTA 必须至少设置为允许本地邮件传递。所有发行版都带有合适的 MTA,选择任何东西(但如果您希望电子邮件在本地发送,则不要选择 nullmailer)。
  • 将发送到系统帐户(至少root)的邮件重定向到您经常阅读的地址。这可以是您在本地计算机上的帐户,也可以是外部电子邮件地址。对于大多数 MTA,地址可以在/etc/aliases; 你应该有一条线

    root: djsmiley2k
    
    Run Code Online (Sandbox Code Playgroud)

    本地送货,或

    root: djsmiley2k@mail-provider.example.com
    
    Run Code Online (Sandbox Code Playgroud)

    用于远程交付。如果您选择远程交付,请确保您的 MTA 已为此配置。根据您的 MTA,您可能需要newaliases在编辑/etc/aliases.


sth*_*ard 24

您可以在整个阵列在线时强制对其进行检查。例如,要检查 上的数组/dev/md0,请以 root 身份运行:

echo check > /sys/block/md0/md/sync_action
Run Code Online (Sandbox Code Playgroud)

我还有一个 cron 作业,它每月运行一次以下命令:

tar c /dir/of/raid/filesystem > /dev/null
Run Code Online (Sandbox Code Playgroud)

这不是对驱动器本身的彻底检查,但它确实强制系统定期验证(几乎)每个文件都可以从磁盘成功读取。是的,某些文件将从内存缓存而不是磁盘中读取。但是我认为如果文件在内存缓存中,那么它最近已成功从磁盘读取,或者即将写入磁盘,并且这些操作中的任何一个都会发现驱动器错误。无论如何,运行这项工作测试了 RAID 阵列最重要的标准(“我能成功读取我的数据吗?”)并且在我运行阵列的三年中,有一次我的驱动器坏了,它是发现它的这个命令。

一个小小的警告是,如果您的文件系统很大,那么此命令将需要很长时间;我的系统大约需要 6 小时/TiB。我使用它运行它,ionice以便系统的其余部分在驱动器检查期间不会停止:

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null
Run Code Online (Sandbox Code Playgroud)


小智 14

Debian 和 Ubuntu 'mdadm' 包包含该文件

/etc/cron.d/mdadm
Run Code Online (Sandbox Code Playgroud)

依次在每个月的第一个星期日运行命令

/usr/share/mdadm/checkarray --cron --all --idle --quiet
Run Code Online (Sandbox Code Playgroud)

这将检查所有数组的一致性(除非您在/etc/default/mdadm中将 AUTOCHECK 设置为 false )。报告将发送给“root”用户(确保您收到此类电子邮件)。


jas*_*yan 8

我使用这个简单的函数来检查/proc/mdstat

#Health of RAID array
raid() { awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}'  /proc/mdstat; }
Run Code Online (Sandbox Code Playgroud)