我开始在家里收集一批计算机,为了支持它们,我有一个运行 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
条目也是可写的;例如,您可以触发对md0
with的完整检查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]\$ '
如果所有成员均已启动,则将以绿色打印阵列名称和成员状态。如果成员失败,则会以红色打印。