必须立即执行坏道精确检测与隔离,否则新写入数据可能覆盖损坏扇区导致不可逆丢失;先用lsblk -f和fdisk -l确认目标设备并安全卸载,再以-nsv参数非破坏性扫描生成坏块列表,最后通过e2fsck -l注入ext文件系统实现自动跳过。

在Linux环境下,当机械硬盘出现文件读取缓慢、I/O错误频发或系统日志持续报“end_request: I/O error”时,必须立即执行坏道精确检测与隔离,否则新写入的数据可能覆盖已损坏扇区导致不可逆丢失。
确认目标设备并安全卸载
先用lsblk -f查看挂载点和文件系统类型,排除/、/boot等正在使用的分区;再运行sudo fdisk -l核对容量与型号,确保目标是/dev/sdb1而非/dev/sda。
若显示“target is busy”,执行sudo lsof +D /mount/point找出并终止占用进程;根分区等无法在线卸载的,必须从 Live USB 启动后再操作。
【误操作可能毁掉整盘数据,务必交叉验证设备名】
执行非破坏性扫描生成坏块列表
使用-nsv组合参数进行非破坏性读写测试:它会读取原始数据 → 写入测试值 → 立即恢复原内容,全程不改变用户数据,但能暴露写入路径故障。
基础命令:sudo badblocks -nsv /dev/sdb1 > /tmp/badblocks_n.txt
为降低误报率,加-p 3对疑似坏块重试三次,仅三次全失败才记录;大容量硬盘可加-c 64提速,但内存紧张时慎用,避免触发 OOM killer。
建议配合 I/O 降级:ionice -c 3 nice -n 19 sudo badblocks -nsv /dev/sdb1,防止扫描过程拖垮其他业务进程。
宝塔Linux面板11.8.1为官网当前正式版,新增AI建站能力并经过宝塔网站工程师深度调教,开放自定义AI功能API,同时对WAF进行界面重构和深度优化,提升拦截能力与运维效率。
将坏块注入ext文件系统实现自动跳过
第一步:执行sudo umount /dev/sdb1确保分区已卸载。
第二步:运行sudo e2fsck -l /tmp/badblocks_n.txt /dev/sdb1,该操作将坏块写入 ext2/3/4 的专用 inode(通常是 inode 5),此后所有文件分配、扩展均由文件系统层绕开。
第三步:验证结果:sudo dumpe2fs -h /dev/sdb1 | grep -i "bad",确认输出中“Bad blocks count”大于 0。
【XFS、Btrfs 不支持此机制;SSD 完全不适用 badblocks】
补充验证与长期监控配置
方法一:用sudo smartctl -a /dev/sdb检查 SMART 指标,重点关注Reallocated_Sector_Ct和Current_Pending_Sector是否持续增长——若数值非零,说明硬件损伤加剧,应尽快更换硬盘。
方法二:配置smartd守护进程实现事前预警,编辑/etc/smartd.conf添加行:/dev/sdb -a -m root -M exec /usr/local/bin/alert-on-smart-fail.sh,保存后重启服务:sudo systemctl restart smartd。
方法三:日常巡检可用只读模式badblocks -sv扫描已挂载盘,但灵敏度低于-n模式,仅作辅助参考。










