在开始操作前,请确保你具备以下条件:
通过SSH登录你的服务器。
检查系统是否已安装必要的工具。运行以下命令:
``` sudo apt update sudo apt install smartmontools hdparm lsscsi -y ```对于CentOS/RHEL系统,使用:
``` sudo yum install smartmontools hdparm lsscsi -y ```你需要知道要监控的硬盘具体是系统中的哪个设备。
运行命令查看所有块设备:
``` 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 ```这里sda和sdb就是两块硬盘设备。同时,使用以下命令获取更详细的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。
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 ```对服务器中的每一块硬盘重复此检查与启用操作。
运行完整的SMART健康检查:
``` sudo smartctl -H /dev/sda ```输出中的“SMART overall-health self-assessment test result: PASSED”表示健康检查通过。如果显示“FAILED”,则硬盘即将或已经发生故障。
更重要的步骤是查看SMART属性表,这里包含了预测故障的关键数据:
``` sudo smartctl -A /dev/sda ```你需要重点关注以下属性(ID可能因厂商而异,但属性名相似):
记录下这些属性的RAW_VALUE(原始值)。建立一个基线,之后定期观察其变化趋势。
手动检查效率低下,需配置定时任务自动执行。
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 ```监控的最终目的是在故障发生前得到预警。修改上面的脚本,加入邮件通知功能。
确保系统已安装并配置好邮件发送工具(如mailutils或sendmail)。安装:
``` 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替换为你自己的接收报警邮箱地址。
当收到报警或发现硬盘确已故障时,按以下步骤操作:
立即登录服务器,再次手动确认故障:
``` sudo smartctl -H /dev/sdX 替换为故障盘 sudo smartctl -A /dev/sdX | grep -E "(5|197|198)" ```如果确认故障,尽可能卸载(umount)该硬盘上的所有分区,停止数据写入,防止数据进一步损坏。
``` sudo umount /dev/sdX1 卸载分区,可能有多个分区 ```如果无法卸载(例如是系统盘),应尽快安排停机。
在硬盘完全失效前,尝试备份数据。使用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 ```记录故障硬盘的详细信息,用于采购替换件:
``` sudo smartctl -i /dev/sdX sudo lshw -class disk ```关机,物理更换硬盘。
安装新硬盘后,开机。使用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号 网站地图