当前位置:网站首页 >  攻略

服务器存储设备运维:从零开始掌握硬盘健康监控与故障处理实操指南

时间:2026年06月04日 04:17:08 来源:易频IT社区

1. 准备工作与环境检查

在开始操作前,请确保你具备以下条件:

  • 拥有目标服务器的SSH登录权限(root或sudo权限)。
  • 服务器操作系统为Linux发行版(本文以Ubuntu 22.04 LTS为例,命令适用于主流发行版)。
  • 准备好一个用于记录监控数据和报警日志的系统(可以是本机日志文件,或远程监控服务器)。

通过SSH登录你的服务器。

检查系统是否已安装必要的工具。运行以下命令:

``` sudo apt update sudo apt install smartmontools hdparm lsscsi -y ```

对于CentOS/RHEL系统,使用:

``` sudo yum install smartmontools hdparm lsscsi -y ```

2. 识别服务器中的存储设备

你需要知道要监控的硬盘具体是系统中的哪个设备。

运行命令查看所有块设备:

``` lsblk ```

输出示例:

``` NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 447.1G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi ├─sda2 8:2 0 1G 0 part /boot └─sda3 8:3 0 445.6G 0 part / sdb 8:16 0 1.8T 0 disk └─sdb1 8:17 0 1.8T 0 part /data ```

这里sdasdb就是两块硬盘设备。同时,使用以下命令获取更详细的SCSI设备信息:

``` sudo lsscsi ```

输出示例:

``` [0:0:0:0] disk ATA INTEL SSDSC2KB48 LHF0 /dev/sda [1:0:0:0] disk ATA ST2000DM008-2FR1 0001 /dev/sdb ```

记录下你关心的硬盘设备路径,例如/dev/sda/dev/sdb

3. 启用并检查硬盘的SMART功能

SMART(Self-Monitoring, Analysis and Reporting Technology)是硬盘自我监控的核心技术。首先检查硬盘是否支持并启用了SMART。

对目标硬盘(例如/dev/sda)运行:

``` sudo smartctl -i /dev/sda ```

在输出中,找到这两行:

``` SMART support is: Available - device has SMART capability. SMART support is: Enabled ```

如果显示“Disabled”,则需要启用SMART:

``` sudo smartctl -s on /dev/sda ```

对服务器中的每一块硬盘重复此检查与启用操作。

4. 执行SMART健康检查并解读关键属性

运行完整的SMART健康检查:

``` sudo smartctl -H /dev/sda ```

输出中的“SMART overall-health self-assessment test result: PASSED”表示健康检查通过。如果显示“FAILED”,则硬盘即将或已经发生故障。

更重要的步骤是查看SMART属性表,这里包含了预测故障的关键数据:

``` sudo smartctl -A /dev/sda ```

你需要重点关注以下属性(ID可能因厂商而异,但属性名相似):

  • Reallocated_Sector_Ct (ID: 5): 重映射扇区计数。数值不为0即表示硬盘已有坏扇区并被备用扇区替换。数值持续增长是严重警告。
  • Current_Pending_Sector (ID: 197): 当前待映射扇区数。表示不稳定、待决定的扇区。任何非0值都需警惕。
  • Offline_Uncorrectable (ID: 198): 离线不可纠正扇区数。非0值通常意味着物理介质损坏。
  • Temperature_Celsius (ID: 194): 硬盘温度。长期超过50°C会显著缩短硬盘寿命。
  • Power_On_Hours (ID: 9): 通电时间。用于评估硬盘使用年限。

记录下这些属性的RAW_VALUE(原始值)。建立一个基线,之后定期观察其变化趋势。

5. 配置定期自动SMART测试

手动检查效率低下,需配置定时任务自动执行。

SMART测试分两种:短测试(约2分钟,检查主要子系统)和长测试(数小时,全面检查磁盘表面)。

创建脚本/usr/local/bin/check_disk_health.sh

``` !/bin/bash LOG_FILE="/var/log/disk_health.log" DISKS=("/dev/sda" "/dev/sdb") 将此处的设备列表替换为你服务器上的实际硬盘 for DISK in "${DISKS[@]}"; do echo "=== $(date) Checking $DISK ===" >> $LOG_FILE 检查健康状态 sudo smartctl -H $DISK >> $LOG_FILE 2>&1 运行短自检(每周一次,此处仅检查是否在运行) sudo smartctl -t short $DISK >> $LOG_FILE 2>&1 获取并记录关键属性 echo " Critical SMART Attributes for $DISK " >> $LOG_FILE sudo smartctl -A $DISK | grep -E "(Reallocated_Sector_Ct|Current_Pending_Sector|Offline_Uncorrectable|Temperature_Celsius|Power_On_Hours)" >> $LOG_FILE echo "" >> $LOG_FILE done ```

服务器存储设备运维:从零开始掌握硬盘健康监控与故障处理实操指南

保存后,赋予脚本执行权限:

``` sudo chmod +x /usr/local/bin/check_disk_health.sh ```

通过crontab配置每天自动运行一次脚本(例如凌晨3点):

``` sudo crontab -e ```

在打开的编辑器中添加一行:

``` 0 3 /usr/local/bin/check_disk_health.sh ```

保存并退出。现在脚本会每天运行,日志将写入/var/log/disk_health.log

要配置每周运行一次长测试,可以创建另一个cron任务,例如每周日晚上运行:

``` 0 22 0 for disk in /dev/sda /dev/sdb; do sudo smartctl -t long $disk; done ```

6. 设置故障预警通知

监控的最终目的是在故障发生前得到预警。修改上面的脚本,加入邮件通知功能。

确保系统已安装并配置好邮件发送工具(如mailutilssendmail)。安装:

``` sudo apt install mailutils -y ```

在安装过程中,会提示配置邮件。如果只是用于服务器本地发信,可以选择“Internet Site”并输入你的系统域名。

更新check_disk_health.sh脚本,在for循环内加入故障判断逻辑:

``` ... 在获取健康状态后 ... HEALTH_RESULT=$(sudo smartctl -H $DISK | grep "test result") if [[ $HEALTH_RESULT == "FAILED" ]]; then echo "CRITICAL: Disk $DISK SMART health check FAILED!" | mail -s "服务器磁盘故障警报: $DISK" your-email@example.com fi ... 在获取关键属性后,可以解析RAW_VALUE并判断 ... 例如,检查重映射扇区是否大于阈值(例如10) REALLOC=$(sudo smartctl -A $DISK | grep "Reallocated_Sector_Ct" | awk '{print $10}') if [[ $REALLOC -gt 10 ]]; then echo "WARNING: Disk $DISK has $REALLOC reallocated sectors." | mail -s "服务器磁盘预警: $DISK" your-email@example.com fi ```

请务必将脚本中的your-email@example.com替换为你自己的接收报警邮箱地址。

7. 硬盘故障发生后的应急处理流程

当收到报警或发现硬盘确已故障时,按以下步骤操作:

7.1 确认故障并停止写入

立即登录服务器,再次手动确认故障:

``` sudo smartctl -H /dev/sdX 替换为故障盘 sudo smartctl -A /dev/sdX | grep -E "(5|197|198)" ```

如果确认故障,尽可能卸载(umount)该硬盘上的所有分区,停止数据写入,防止数据进一步损坏。

``` sudo umount /dev/sdX1 卸载分区,可能有多个分区 ```

如果无法卸载(例如是系统盘),应尽快安排停机。

7.2 备份关键数据

在硬盘完全失效前,尝试备份数据。使用dd命令进行全盘镜像(如果硬盘仍可读取):

``` sudo dd if=/dev/sdX of=/path/to/backup/image.img bs=4M conv=noerror,sync status=progress ```

说明:if=/dev/sdX是故障盘,of=指向一个足够大的、位于其他健康硬盘上的文件路径。conv=noerror,sync参数允许在遇到读取错误时继续。

如果dd进程太慢或错误太多,可以尝试使用ddrescue工具,它更适合坏道硬盘:

``` sudo apt install gddrescue -y sudo ddrescue /dev/sdX /path/to/backup/image.img /path/to/backup/logfile.log ```

7.3 记录硬件信息并更换硬盘

记录故障硬盘的详细信息,用于采购替换件:

``` sudo smartctl -i /dev/sdX sudo lshw -class disk ```

关机,物理更换硬盘。

7.4 新硬盘上线与数据恢复

安装新硬盘后,开机。使用lsblk确认新硬盘设备符(可能是原来的,如/dev/sdX,也可能是新的)。

对新硬盘分区、格式化(假设使用单个分区):

``` sudo fdisk /dev/sdX 交互式命令,依次输入 n, p, 1, 回车, 回车, w sudo mkfs.ext4 /dev/sdX1 格式化为ext4文件系统 ```

创建挂载点并恢复数据:

``` sudo mkdir /mnt/new_disk sudo mount /dev/sdX1 /mnt/new_disk sudo mount -o loop /path/to/backup/image.img /mnt/old_image sudo cp -a /mnt/old_image/ /mnt/new_disk/ ```

更新/etc/fstab文件以配置开机自动挂载(如果需要)。

不要忘记将新硬盘加入步骤5和6的监控脚本的DISKS列表中

相关推荐

最新

热门

推荐

精选

标签

易频IT社区是综合性互联网IT技术门户网站,专注分享网络技术、服务器运维、网络安全、编程开发、系统架构、云计算、大数据等行业干货,实时更新IT行业资讯、零基础教程、实战案例,为IT从业者、技术爱好者提供专业的学习交流平台。

Copyright © 2021-2026 易频IT社区. All Rights Reserved. 备案号:闽ICP备2023013482号 网站地图