0

0

Linux 磁盘坏道的识别与处理思路

冰川箭仙

冰川箭仙

发布时间:2026-01-29 19:50:03

|

664人浏览过

|

来源于php中文网

原创

应先查SMART再运行badblocks:Reallocated_Sector_Ct>0或Current_Pending_Sector>0才需扫描;只读扫描用sudo badblocks -b 4096 -s -v /dev/sdX,写验证(-w)会覆数据;标记坏块后须用e2fsck -l配合ext分区,且坏道会蔓延,需持续监控SMART。

linux 磁盘坏道的识别与处理思路

先看 SMART,别急着跑 badblocks

坏道不是“扫出来才算有”,而是“SMART 已经在报警了”。很多管理员一发现读写慢或 rsync 反复失败,就直接上 badblocks -w,结果清空数据还漏掉真正隐患。
正确顺序是:先查 smartctl -a /dev/sdX,重点关注两行:

  • Reallocated_Sector_Ct > 0 → 备用扇区已被启用,物理损伤已发生;
  • Current_Pending_Sector > 0 → 当前读取不稳、尚未重映射,正是 badblocks 最该验证的目标。
如果这两项为 0,且系统运行稳定,大概率没有活跃坏道——此时跑 badblocks 属于过度干预。

只读扫描 vs 写验证:选错模式等于自毁

badblocks-w(写验证)模式会往每个块写入特定模式再读回,彻底验证但**覆盖原始数据**。生产环境绝对禁用,除非你确认盘上无任何有效数据。
日常检测请死守这条命令:
sudo badblocks -b 4096 -s -v /dev/sdX > bad-blocks.txt
其中:

  • -b 4096 匹配现代磁盘逻辑块大小(避免误报);
  • -s -v 显示进度和细节,方便中断后定位;
  • 重定向到文件,为后续 e2fsck -l 提供输入。
注意:不能对已挂载的分区执行扫描(/dev/sda1),必须卸载或使用只读 Live 环境。否则可能触发内核 I/O 错误甚至 panic。

标记坏块 ≠ 修复硬盘,只是让文件系统绕开它

Linux 不会“修复”物理坏道,只能让 ext2/3/4 文件系统永久避开这些块。核心动作是把 badblocks 输出的块号喂给 e2fsck
sudo e2fsck -l bad-blocks.txt /dev/sdX1
这步操作要求:

考拉新媒体导航
考拉新媒体导航

考拉新媒体导航——新媒体人的专属门户网站

下载
  • 目标分区必须是 ext 系列(XFS 或 Btrfs 不支持此流程);
  • 分区需处于未挂载状态(umount /dev/sdX1);
  • e2fsck 会将坏块写入块组描述符的“坏块位图”,此后新建文件绝不会分配到这些位置。
若误用于 LVM 逻辑卷,请确保设备路径指向底层物理分区(如 /dev/sdb)而非 LV(如 /dev/mapper/vg-lv),否则标记无效。

别信“修复完成就安全了”,坏道只会蔓延

一次成功标记,不代表问题终结。坏道是物理退化过程的表征,Current_Pending_Sector 数值可能随时间上升,新坏块会持续出现。
必须建立监控闭环:

  • 每周用 smartctl -a 抽查关键盘;
  • 对高负载盘(如数据库日志盘)每季度做一次只读 badblocks 扫描;
  • 一旦 Reallocated_Sector_Ct 连续增长,立即安排更换,别等 RAID 掉盘。
最常被忽略的一点:USB 移动硬盘或老旧 SATA 盘,smartctl 可能无法获取完整 SMART 数据——这时 badblocks -s -v 是唯一可信手段,但务必提前备份。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

358

2023.06.29

如何删除数据库
如何删除数据库

删除数据库是指在MySQL中完全移除一个数据库及其所包含的所有数据和结构,作用包括:1、释放存储空间;2、确保数据的安全性;3、提高数据库的整体性能,加速查询和操作的执行速度。尽管删除数据库具有一些好处,但在执行任何删除操作之前,务必谨慎操作,并备份重要的数据。删除数据库将永久性地删除所有相关数据和结构,无法回滚。

2082

2023.08.14

vb怎么连接数据库
vb怎么连接数据库

在VB中,连接数据库通常使用ADO(ActiveX 数据对象)或 DAO(Data Access Objects)这两个技术来实现:1、引入ADO库;2、创建ADO连接对象;3、配置连接字符串;4、打开连接;5、执行SQL语句;6、处理查询结果;7、关闭连接即可。

349

2023.08.31

MySQL恢复数据库
MySQL恢复数据库

MySQL恢复数据库的方法有使用物理备份恢复、使用逻辑备份恢复、使用二进制日志恢复和使用数据库复制进行恢复等。本专题为大家提供MySQL数据库相关的文章、下载、课程内容,供大家免费下载体验。

256

2023.09.05

vb中怎么连接access数据库
vb中怎么连接access数据库

vb中连接access数据库的步骤包括引用必要的命名空间、创建连接字符串、创建连接对象、打开连接、执行SQL语句和关闭连接。本专题为大家提供连接access数据库相关的文章、下载、课程内容,供大家免费下载体验。

326

2023.10.09

数据库对象名无效怎么解决
数据库对象名无效怎么解决

数据库对象名无效解决办法:1、检查使用的对象名是否正确,确保没有拼写错误;2、检查数据库中是否已存在具有相同名称的对象,如果是,请更改对象名为一个不同的名称,然后重新创建;3、确保在连接数据库时使用了正确的用户名、密码和数据库名称;4、尝试重启数据库服务,然后再次尝试创建或使用对象;5、尝试更新驱动程序,然后再次尝试创建或使用对象。

412

2023.10.16

vb连接access数据库的方法
vb连接access数据库的方法

vb连接access数据库方法:1、使用ADO连接,首先导入System.Data.OleDb模块,然后定义一个连接字符串,接着创建一个OleDbConnection对象并使用Open() 方法打开连接;2、使用DAO连接,首先导入 Microsoft.Jet.OLEDB模块,然后定义一个连接字符串,接着创建一个JetConnection对象并使用Open()方法打开连接即可。

411

2023.10.16

vb连接数据库的方法
vb连接数据库的方法

vb连接数据库的方法有使用ADO对象库、使用OLEDB数据提供程序、使用ODBC数据源等。详细介绍:1、使用ADO对象库方法,ADO是一种用于访问数据库的COM组件,可以通过ADO连接数据库并执行SQL语句。可以使用ADODB.Connection对象来建立与数据库的连接,然后使用ADODB.Recordset对象来执行查询和操作数据;2、使用OLEDB数据提供程序方法等等。

223

2023.10.19

java入门学习合集
java入门学习合集

本专题整合了java入门学习指南、初学者项目实战、入门到精通等等内容,阅读专题下面的文章了解更多详细学习方法。

1

2026.01.29

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 8万人学习

Git 教程
Git 教程

共21课时 | 3.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号