AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 26807
Accepted
Keith
Keith
Asked: 2009-06-17 11:35:02 +0800 CST2009-06-17 11:35:02 +0800 CST 2009-06-17 11:35:02 +0800 CST

通过终端监控 RAID 状态(CentOS 5)

  • 772

我目前正在运行 CentOS 5 并寻找一个终端命令,它可以让我监视 RAID 设置的状态(即,如果驱动器关闭)而无需进入内核。毕竟这是一个实时网络服务器。

更新:规格是带有 SAS 5i/R 控制器的戴尔 sc1435。

centos raid terminal
  • 6 6 个回答
  • 30455 Views

6 个回答

  • Voted
  1. Best Answer
    Owen Fraser-Green
    2009-06-17T11:43:53+08:002009-06-17T11:43:53+08:00

    如果您将软件 RAID 与常规磁盘控制器一起使用,请使用:

    mdadm --detail <dev>
    

    例如 /dev/md0 在哪里。这将向您显示当前状态。如果驱动器出现故障,您还会在 /var/log/messages 中看到很多令人讨厌的东西。

    • 6
  2. pQd
    2009-06-17T11:39:33+08:002009-06-17T11:39:33+08:00

    它依赖于突袭。对于 lsi [它在很多戴尔和惠普服务器中],您使用名为MegaCLI的工具。

    用于 3ware 卡 - tw_cli

    它通常带有硬件的“驱动程序”或文档。

    • 5
  3. Zoredache
    2009-06-17T11:41:04+08:002009-06-17T11:41:04+08:00

    如果这是一次软件突袭 (mdadm),并且您想查看当前状态,您可以简单地执行cat /proc/mdstat。如果您想要每 10 秒刷新一次屏幕,您可以执行watch -n 10 cat /proc/mdstat。

    • 4
  4. Dan Carley
    2009-06-19T01:45:20+08:002009-06-19T01:45:20+08:00

    戴尔可能会提供一个工具来监控它,但我可以猜测它会像大多数乏善可陈的 OEM 实用程序一样使用 Java 实现并膨胀。

    幸运的是,出色的mpt-status实用程序似乎支持 SC1435。只需确保您在内核中启用了以下选项:

    CONFIG_FUSION=y
    CONFIG_FUSION_SAS=y
    CONFIG_FUSION_MAX_SGE=128
    CONFIG_FUSION_CTL=y
    

    然后,您可以使用 CLI 中的 mpt-status 查看 RAID 阵列的运行状况。

    然后我个人使用一个从 cron 调用的简单 Python 脚本,它定期检查状态并通过电子邮件向我们发出警报。与 mdadm 的行为方式类似。您当然可以指定您希望检查的频率。随意使用它自己:

    #!/usr/bin/env python
    
    # Copyright (c) 2009 Dan Carley <[email protected]>
    #
    # Permission to use, copy, modify, and distribute this software for any
    # purpose with or without fee is hereby granted, provided that the above
    # copyright notice and this permission notice appear in all copies.
    #
    # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
    # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
    # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
    # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
    # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
    # ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
    # OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
    
    """
    Report failures from hardware RAID controllers.
    
    Requires the supporting utilities:
        mpt-status(8)   for MPT controllers.
        tw_cli(8)       for 3ware controllers.
    
    Intended to be scheduled from crontab as follows:
        MAILTO="[email protected]"
        0   */3 *   *   *   /usr/local/sbin/hwraid_monitor.py options
    """
    
    from re import search
    from sys import exit
    from os.path import isfile
    from optparse import OptionParser
    from subprocess import Popen, PIPE
    
    def check_controller(type):
        ret = True
    
        if type == 'mpt':
            cmd = [ '/usr/sbin/mpt-status', '-s' ]
            array = {'regex': '^log_id$',
                     'pos': 2,
                     'string': 'OPTIMAL'}
            drive = {'regex': '^phys_id$',
                     'pos': 2,
                     'string': 'ONLINE'}
        elif type == 'tw':
            cmd = [ '/sbin/tw_cli', 'info' ]
            contr = {'regex': '^c\d+$'}
            array = {'regex': '^u\d+$',
                     'pos': 2,
                     'string': 'OK'}
            drive = {'regex': '^p\d+$',
                     'pos': 1,
                     'string': 'OK'}
    
        if not isfile(cmd[0]):
            print "%s: Utility not found" % cmd[0]
            return False
    
        if type == 'tw':
            controllers = []
            p = Popen(cmd, stdout=PIPE)
            o, e = p.communicate()
            if e:
                print e
            for c in o.split('\n'):
                c = c.split()
                if len(c) > 2 and search(contr['regex'], c[0]):
                    controllers.append(c[0])
        elif type == 'mpt':
            controllers = ['']
    
        for c in controllers:
            p = Popen(cmd + [c], stdout=PIPE)
            o, e = p.communicate()
            if e:
                print e.split('\n')
            for v in o.split('\n'):
                v = v.split()
                if len(v) > 2:
                    # Array check.
                    if search(array['regex'], v[0]) and v[array['pos']] != array['string']:
                        print "Array failure: \n\t%s" % '\t'.join(v)
                        ret = False
                    # Drive check.
                    if search(drive['regex'], v[0]) and v[drive['pos']] != drive['string']:
                        print "Drive failure: \n\t%s" % '\t'.join(v)
                        ret = False
    
        return ret
    
    def main():
        usage = "usage: %prog options"
        parser = OptionParser(usage=usage)
        parser.add_option("--mpt", action="store_true", default=False,
                          dest="mpt", help="MPT controller support.")
        parser.add_option("--tw", action="store_true", default=False,
                          dest="tw", help="3ware controller support.")
        (options, args) = parser.parse_args()
    
        if not options.mpt and not options.tw:
            parser.print_help()
            exit(2)
    
        fail = False
    
        if options.mpt:
            if not check_controller('mpt'):
                fail = True
    
        if options.tw:
            if not check_controller('tw'):
                fail = True
    
        if fail:
            exit(1)
    
    if __name__ == "__main__":
        main()
    
    • 3
  5. Sven
    2009-06-17T11:42:34+08:002009-06-17T11:42:34+08:00

    mdadm 提供有关 Linux 软件突袭各个方面的详细信息。

    • 0
  6. Rajat
    2009-06-17T11:57:47+08:002009-06-17T11:57:47+08:00

    watch -n 10 cat /proc/mdstat 这将在你的系统上设置

    • 0

相关问题

  • 我应该对 RAID 卷进行碎片整理吗?

  • RAID - 软件与硬件

  • 用于 Windows 和 Linux 的 ICH9R 上的 RAID 配置和 3xHDD

  • (软)Ubuntu 7.10 上的 RAID 6,我应该迁移到 8.10 吗?

  • RAID 控制器通常是否存在 SATA 驱动器品牌兼容性问题?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve