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

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

我开始在家里收集一批计算机,为了支持它们,我有一个运行 RAID 阵列的“服务器”linux 盒子。

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

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

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

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

答案1

具有冗余功能的 RAID 的要点在于,它会尽可能长时间地持续运行,但显然它会检测到导致其进入降级模式的错误,例如出现故障的磁盘。您可以使用以下命令显示阵列的当前状态mdadm --detail(缩写为mdadm -D):

# mdadm -D /dev/md0
<snip>
       0       8        5        0      active sync   /dev/sda5
       1       8       23        1      active sync   /dev/sdb7

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

您还可以通过查看获得所有 RAID 设备状态的快速摘要/proc/mdstat。您/sys/class/block/md*/md/*还可以获取有关 RAID 设备的信息;看admin-guide/md.html在内核文档中。有些/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
    

    本地交付,或

     root: [email protected]
    

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

答案2

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

echo check > /sys/block/md0/md/sync_action

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

tar c /dir/of/raid/filesystem > /dev/null

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

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

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null

答案3

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

/etc/cron.d/mdadm

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

/usr/share/mdadm/checkarray --cron --all --idle --quiet

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

答案4

我通过创建 /etc/profile.d/raid_status.sh 将其添加到提示符中:

raid_prompt() { awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}'  /proc/mdstat | awk '/\[U+\]/ {print "\033[32m" $0 "\033[0m"}; /\[.*_.*\]/ {print "\033[31m" $0 "\033[0m"}'; }

然后将我的 PS1 设置为:

PS1='$(raid_prompt)\n[\u@\h \W]\$ '

如果所有成员均已启动,则将以绿色打印阵列名称和成员状态。如果成员失败,则会以红色打印。

相关内容