Skip to content

28. 硬盘监控

本章节指导在 RHEL 8.10(主机名 ZSLinux)上使用 SecureCRT 配置硬盘监控,配合 SecureFX 传输监控日志。内容涵盖磁盘健康检查(smartmontools)、性能监控(sysstat)、第三方工具(HDSentinel)以及 Prometheus 集成,以监控磁盘状态和性能为例,全面实用,适合初学者快速掌握和运维人员日常维护。所有操作在 ZSLinux 环境中测试,确保实验一致性。

28.1 前提条件

  • RHEL 8.10 已安装(参考第 1 章),主机名设置为 ZSLinux.
  • 使用 SecureCRT 登录(SSH2 协议,端口 2222,参考第 6 章).
  • 使用 SecureFX 传输文件(SFTP 协议).
  • 具有 root 或 sudo 权限.
  • 系统已订阅并启用 RHEL 和 EPEL 仓库(参考第 4 和 7 章).
  • 防火墙和 SELinux 启用(参考第 13 章).
  • 网络连接正常,时间同步配置完成(参考第 3 章).
  • 磁盘设备(如 /dev/sda)支持 SMART(验证:smartctl -i /dev/sda).

28.2 磁盘监控

28.2.1 磁盘健康检查 (smartmontools)

  • 安装 smartmontools:
    bash
    dnf install -y smartmontools  # 安装 smartmontools 工具
    systemctl enable --now smartd  # 启用并启动 SMART 守护进程
  • 检查磁盘健康:
    bash
    smartctl -i /dev/sda  # 验证磁盘是否支持 SMART
    smartctl -H /dev/sda  # 检查磁盘健康状态(PASS/FAIL)
    smartctl -a /dev/sda  # 显示详细 SMART 数据(健康、温度等)
  • 查看关键属性:
    bash
    smartctl -A /dev/sda | grep Power_On_Hours  # 查看磁盘通电时间(小时)
    smartctl -A /dev/sda | grep Reallocated_Sector_Ct  # 查看重新分配扇区数
    smartctl -A /dev/sda | grep Temperature_Celsius  # 查看磁盘温度
  • 配置自动健康检查:
    bash
    vim /etc/smartd.conf  # 编辑 smartd 配置文件
    # 添加:
    /dev/sda -a -m admin@example.com
    systemctl restart smartd  # 重启 smartd 服务
    dnf install -y mailx  # 安装邮件工具以支持告警

28.2.2 性能监控 (sysstat)

  • 安装 sysstat:
    bash
    dnf install -y sysstat  # 安装 sysstat 性能监控工具
    systemctl enable --now sysstat  # 启用并启动 sysstat 服务
  • 检查磁盘 I/O:
    bash
    iostat -dx 5  # 每 5 秒显示磁盘 I/O 统计(%util 反映繁忙度)
  • 配置自动性能记录:
    bash
    vim /etc/sysconfig/sysstat  # 编辑 sysstat 配置
    # 修改:
    HISTORY=30  # 保留 30 天性能数据
    systemctl restart sysstat  # 重启 sysstat 服务

28.2.3 第三方工具 (HDSentinel)

  • 安装 HDSentinel(需从官方下载,假设已上传至 /tmp):
    bash
    tar -xzf /tmp/hdsentinel-019c-x64.tar.gz -C /opt  # 解压 HDSentinel
    chmod +x /opt/hdsentinel/hdsentinel-019c-x64  # 添加执行权限
  • 检查磁盘健康:
    bash
    /opt/hdsentinel/hdsentinel-019c-x64 /dev/sda  # 检查磁盘状态
  • 配置 SELinux 上下文:
    bash
    chcon -t bin_t /opt/hdsentinel/hdsentinel-019c-x64  # 设置 SELinux 上下文

28.3 集成监控

28.3.1 Prometheus 监控

  • 安装 node_exporter:
    bash
    dnf install -y prometheus-node-exporter  # 安装 Prometheus node_exporter
    systemctl enable --now node-exporter  # 启用并启动 node-exporter 服务
  • 配置防火墙:
    bash
    firewall-cmd --permanent --add-port=9100/tcp  # 允许 node-exporter 端口
    firewall-cmd --reload  # 应用防火墙规则
  • 配置 Prometheus 告警规则(假设 Prometheus 已安装):
    bash
    vim /etc/prometheus/alert.rules.yml  # 创建告警规则
    # 添加:
    groups:
    - name: disk_alerts
      rules:
      - alert: HighDiskUtilization
        expr: 100 - (node_filesystem_free_bytes{mountpoint="/"} / node_filesystem_size_bytes{mountpoint="/"} * 100) > 80
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "High disk utilization on {{ $labels.instance }}"

28.4 验证与故障排查

  • 验证 smartmontools:
    bash
    smartctl -t short /dev/sda  # 运行短测试验证 SMART
    journalctl -u smartd  # 检查 smartd 日志
  • 验证 sysstat:
    bash
    sar -d 1 1  # 查看实时磁盘性能数据
  • 验证 HDSentinel:
    bash
    /opt/hdsentinel/hdsentinel-019c-x64 /dev/sda | grep Health  # 检查健康状态
  • 验证 Prometheus:
    bash
    curl http://localhost:9100/metrics  # 检查 node-exporter 指标
  • 测试 SSH 连接:
    bash
    ssh -p 2222 testuser@ZSLinux  # 测试 SSH 连接(参考第 6 章)
  • 故障排查:
    • SMART 失败:验证 SMART 支持(smartctl -i /dev/sda)或检查 SELinux(ls -Z /dev/sda)。
    • 高 I/O:使用 iotopdnf install -y iotop) 或 sar -d 定位高负载进程。
    • HDSentinel 失败:检查权限(ls -l /opt/hdsentinel) 或 SELinux(journalctl -t setroubleshoot)。
    • Prometheus 无数据:确认 node-exporter 服务(systemctl status node-exporter)或防火墙(firewall-cmd --list-ports)。
    • 生成 SOS 报告sosreport --only-plugins=block,scsi 用于诊断。

28.5 实践任务

  1. 使用 SecureCRT 登录 ZSLinux,安装 smartmontools 并检查 /dev/sda 健康状态。
  2. 配置 sysstat 记录 30 天磁盘性能数据。
  3. 安装 HDSentinel 并验证磁盘状态。
  4. 配置 Prometheus node-exporter 并检查指标。

28.6 自测问题

  • 问题:如何查看磁盘通电时间?
    • 答案smartctl -A /dev/sda | grep Power_On_Hours
  • 问题:如何检查磁盘 I/O 性能?
    • 答案iostat -dx 5
  • 问题:如何配置 Prometheus 磁盘告警?
    • 答案:编辑 /etc/prometheus/alert.rules.yml,添加 HighDiskUtilization 规则。

Released under the MIT License.