PVE 磁盘健康检测
一、快速查看磁盘状态
1. SMART 检测
smartctl -A /dev/sdX # 查看属性摘要
smartctl -H /dev/sdX # 查看健康状态(PASSED/FAILED)
也可通过 PVE Web UI 查看:选中节点 → 磁盘 → 选择磁盘 → SMART 状态。若显示"未知",先在命令行启用:
smartctl -s on /dev/sdX
实际输出:smartctl -A /dev/sda
smartctl 7.3 2022-02-28 r5338 [x86_64-linux-6.8.12-25-pve] (local build)
Copyright (C) 2002-22, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x002f 200 195 051 Pre-fail Always - 1
3 Spin_Up_Time 0x0027 220 216 021 Pre-fail Always - 1983
4 Start_Stop_Count 0x0032 098 098 000 Old_age Always - 2523
5 Reallocated_Sector_Ct 0x0033 193 193 140 Pre-fail Always - 31424
7 Seek_Error_Rate 0x002e 200 198 000 Old_age Always - 0
9 Power_On_Hours 0x0032 043 043 000 Old_age Always - 42059
10 Spin_Retry_Count 0x0032 100 100 000 Old_age Always - 0
11 Calibration_Retry_Count 0x0032 100 100 000 Old_age Always - 0
12 Power_Cycle_Count 0x0032 099 099 000 Old_age Always - 1594
192 Power-Off_Retract_Count 0x0032 200 200 000 Old_age Always - 365
193 Load_Cycle_Count 0x0032 010 010 000 Old_age Always - 572990
194 Temperature_Celsius 0x0022 096 092 000 Old_age Always - 51
196 Reallocated_Event_Count 0x0032 001 001 000 Old_age Always - 384
197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x0032 200 200 000 Old_age Always - 77
二、SMART 数据解读
判断标准:VALUE 范围 1~253(越大越好),低于 THRESH 标记 FAILING_NOW。RAW_VALUE 为原始计数值。
以下是关键属性说明,以及上面 smartctl -A /dev/sda 输出中对应的实际数据和风险评估:
| ID | 属性名 | 含义 | 实际值 | 警戒值 | 风险评估 |
|---|---|---|---|---|---|
| 5 | Reallocated_Sector_Ct | 已重映射扇区数 | 31424 | > 0 需警惕,> 100 建议换盘 | 🚨 极高:备用区大量消耗 |
| 196 | Reallocated_Event_Count | 重映射事件次数 | 384 | 持续增长说明盘面加速劣化 | ⚠️ 384 次,持续分批出现 |
| 197 | Current_Pending_Sector | 待稳定扇区 | 0 | > 0 说明存在不稳定扇区 | ✅ 正常 |
| 198 | Offline_Uncorrectable | 无法纠正的扇区 | 0 | > 0 说明存在物理坏道 | ✅ 正常 |
| 1 | Raw_Read_Error_Rate | 原始读取错误率 | 1 | VALUE 持续下降说明磁头/盘面有问题 | ✅ 正常 |
| 7 | Seek_Error_Rate | 寻道错误率 | 0 | VALUE 大幅下降说明机械臂异常 | ✅ 正常 |
| 9 | Power_On_Hours | 通电时间 | 42059 | 机械盘一般寿命 3~5 万小时 | ~4.8 年 |
| 193 | Load_Cycle_Count | 磁头加载/卸载次数 | 572990 | WD 盘额定约 30~60 万次 | 🚨 接近寿命极限 |
| 194 | Temperature_Celsius | 温度 | 51°C | 建议 < 45°C,> 55°C 加速老化 | ⚠️ 偏高 |
磁盘经历过大量坏道(3 万+),目前虽已被固件重映射、读写正常,但备用区消耗殆尽、负载周期接近寿命极限,健康状况堪忧。
快查指令
smartctl -A /dev/sdX | grep -E "^( 5|197|198)"
# 5=0, 197=0, 198=0 → 良好
# 5>0, 197=0, 198=0 → 旧坏道已被重映射,看数量判断风险
# 个位数:可监控使用,两位数及以上:建议换盘,持续增长中:立即换盘
# 197>0 或 198>0 → 当前存在坏道,需处理
三、深入扫描检测
SMART 只是磁盘固件记录的日志,如果需要确认实际扇区状况,做深度的全盘扫描。
1. SMART 长测试
smartctl -t long /dev/sdX # 提交测试,由磁盘固件后台执行,立即返回
查看测试结果:
smartctl -l selftest /dev/sdX # 查看自检记录
smartctl -l error /dev/sdX # 查看 I/O 错误日志
实际输出
# 提交长测试(耗时约 6 小时,后台执行,立即返回)
smartctl -t long /dev/sda
=== START OF OFFLINE IMMEDIATE AND SELF-TEST SECTION ===
Sending command: "Execute SMART Extended self-test routine immediately in off-line mode".
Drive command "Execute SMART Extended self-test routine immediately in off-line mode" successful.
Testing has begun.
Please wait 371 minutes for test to complete.
Test will complete after Wed Jun 3 19:12:06 2026 CST
Use smartctl -X to abort test.
# 查看自检记录
smartctl -l selftest /dev/sda
=== START OF READ SMART DATA SECTION ===
SMART Self-test log structure revision number 1
Num Test_Description Status Remaining LifeTime(hours) LBA_of_first_error
# 1 Extended offline Completed: read failure 90% 42079 1427497600
# 2 Extended offline Completed: read failure 90% 42066 1427497600
# 查看 I/O 错误日志
smartctl -l error /dev/sda
=== START OF READ SMART DATA SECTION ===
SMART Error Log Version: 1
No Errors Logged
结果解读
- #2(LifeTime 42066h) — 第一次测试,等了约 6 小时后查到的结果,
Remaining 90%说明测试仅执行了约 10% 就遇到读取错误并终止 - #1(LifeTime 42079h) — 第二次提交后立即就查询到结果,因为同一 LBA 仍在报错,固件在相同位置再次中止测试
- 同一 LBA(1427497600)两次测试均报错 — 确认该扇区存在可复现的物理缺陷,非偶发性
- No Errors Logged — 自检发现的错误记录在
selftest日志中,与-l error(记录主机 I/O 层面的读写错误)是两套独立的日志;自检报错不代表一定有主机 I/O 错误
后续操作
# 确认重映射扇区数是否增加
smartctl -A /dev/sda | grep -E "^( 5|196|197|198)"
5 Reallocated_Sector_Ct 0x0033 193 193 140 Pre-fail Always - 31424
196 Reallocated_Event_Count 0x0032 001 001 000 Old_age Always - 384
197 Current_Pending_Sector 0x0032 200 200 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0030 100 253 000 Old_age Offline - 0
重映射数未增加,所有属性值与初始检测时一致。说明:
- 固件已知该 LBA 有问题(长测试两次确认),但未分配备用扇区进行重映射
- 最可能的原因:备用区已耗尽(31424 个),无可用扇区
Current_Pending_Sector仍为 0 是因为长测试报的是读取失败,而非等待重映射的待稳定状态,两者机制不同
2. badblocks 全盘扫描
逐扇区读写校验,是检测坏道最严格的手段(1TB 盘约 4~8 小时),耗时较长用 nohup 后台执行:
# 只读扫描(不破坏数据)
nohup badblocks -sv /dev/sdX > /root/badblocks-scan.log 2>&1 &
# 非破坏性读写扫描(写入→校验→恢复,更严格)
nohup badblocks -svn /dev/sdX > /root/badblocks-scan.log 2>&1 &
# 查看进度
tail -f /root/badblocks-scan.log
扫描结果
Checking for bad blocks in non-destructive read-write mode
From block 0 to 1953514583
Testing with random pattern: done
Pass completed, 0 bad blocks found. (0/0/0 errors)
全盘约 1TB 范围全部通过,零个坏块。
3. smartctl 与 badblocks 的区别
两个工具检测的维度和方式完全不同:
| smartctl | badblocks | |
|---|---|---|
| 检测对象 | 磁盘固件记录的 SMART 日志和属性 | 实际的磁盘扇区 |
| 检测方式 | 读取磁盘内置的 SMART 数据(由磁盘固件持续记录) | 逐扇区读写校验 |
| 能否发现已重映射的坏道 | ✅ 能,从 Reallocated_Sector_Ct 看出历史累计量 |
❌ 不能,坏道已被映射到备用区,读的是好数据 |
| 能否发现不稳定扇区 | ✅ Current_Pending_Sector > 0 |
✅ 读写不稳定会报错 |
| 执行速度 | 毫秒级(读固件数据) | 数小时到数天(逐扇区扫描) |
| 影响数据 | 只读,无影响 | -n 模式无影响,-w 模式会破坏数据 |
| 主要用途 | 快速初筛、历史追踪、趋势分析 | 深度扫描、确认坏道位置、触发重映射 |
使用建议:
- 先用
smartctl -A快速查看属性,几分钟就能做完初步判断 - 如果 SMART 数据正常,一般不需要跑 badblocks
- 如果 SMART 数据异常(
Reallocated_Sector_Ct高、Current_Pending_Sector> 0),再针对性地跑 badblocks 做深度扫描
FAQ
为什么 SMART 差但 badblocks 无坏道?
磁盘固件已将坏道重映射到备用区,badblocks 读的是备用扇区的好数据,因此不报错。
逻辑层(badblocks 看到的):
LBA 0 → 正常读取
LBA 1 → 正常读取
LBA 2 → 被重映射 → 实际读取的是备用扇区 → 数据正常
LBA 3 → 正常读取
结论:所有 LBA 都能正常读写 → 0 bad blocks
物理层(盘面实际情况):
LBA 2 对应的物理位置已损坏(坏道)
↓
固件自动将 LBA 2 映射到盘片深处的备用区(G-List)
↓
上层(包括 badblocks)读 LBA 2 → 去备用区读 → 一切正常
badblocks工作在逻辑层,读的是 LBA。坏道已被重映射到备用区,它读到的是好数据,自然报 0Reallocated_Sector_Ct不可逆地记录磁盘一生中遇到过的所有物理缺陷- badblocks 通过不代表磁盘健康,必须结合 SMART 综合判断
badblocks 报出坏道的场景
| 情况 | badblocks 结果 |
|---|---|
| 磁盘健康 | 0 bad blocks ✅ |
| 坏道已被固件重映射 | 0 bad blocks ⚠️(假阴性) |
| 有不稳定扇区但未重映射 | 报出坏道 |
| 备用区已耗尽,新坏道无法重映射 | 报出坏道 🚨 |
综合判断
结合上面的数据综合评估:
| 指标 | 数据 | 结论 |
|---|---|---|
Reallocated_Sector_Ct |
31424 | 🚨 备用区大量消耗 |
Reallocated_Event_Count |
384 次 | ⚠️ 持续分批出现,盘面加速劣化 |
Load_Cycle_Count |
572990 | 🚨 接近设计寿命上限 |
Temperature |
51°C | ⚠️ 偏高,加速老化 |
Current_Pending_Sector |
0 | ✅ 当前无活跃坏道 |
badblocks |
0 bad blocks | ✅ 当前读写正常 |
Power_On_Hours |
42059 | 约 4.8 年 |
| SMART 长测试 | 两次 read failure 于同一 LBA(1427497600) |
🚨 存在可复现的物理缺陷,且重映射数未增加 |
Reallocated_Sector_Ct(复查) |
仍为 31424 | 🚨 备用区已耗尽,固件无法分配新扇区 |
结论:磁盘健康状况堪忧,建议尽快替换。 原因不是"当前有坏道"(已被固件挡住),而是备用区已消耗殆尽,一旦下一个坏道出现就可能导致数据丢失。