用 -w 参数运行 badblocks 可触发硬盘固件自动重映射坏扇区,实现盘面清底;需先卸载目标磁盘,以 /dev/sdb 为单位扫描,配合 e2fsck 注入坏块表,并结合 smartctl 交叉验证健康状态。

直接用 -w 参数跑一遍 badblocks,能触发硬盘固件自动重映射机制,把真正不可靠的物理扇区“踢出去”,这对旧机器迁移前做盘面清底非常关键。它不是只报错,而是主动让硬盘自己处理坏道——这才是读写模式的核心价值。
先确认目标设备且彻底卸载
迁移前必须确保目标磁盘未被挂载、无任何进程占用:
- 用
lsblk或sudo fdisk -l确认设备路径(如/dev/sdb) - 执行
sudo umount /dev/sdb1(若提示 busy,用lsof +D /mount/point查进程并终止) - 对整块盘检测时,建议操作
/dev/sdb而非/dev/sdb1(避免分区表干扰)
执行带重映射意图的写入扫描-w 模式会向每个扇区写入四组测试模式(0xaa、0x55、0xff、0x00)并校验,失败即触发 GList 更新:
sudo badblocks -wsv -b 4096 -c 128 /dev/sdb > badblocks_w.log
-
-b 4096:适配主流硬盘/SSD 的逻辑块大小,比默认 1024 更准 -
-c 128:一次批量处理 128 个块,平衡速度与内存压力 -
-s和-v保证过程可见、结果可追溯
⚠️ 注意:该操作会清空全盘数据,仅适用于已完整备份或即将格式化的盘。
捕获结果并注入文件系统(限 ext 系列)
若目标盘将用于 ext2/ext3/ext4:
- 用
e2fsck -l badblocks_w.log /dev/sdb1把坏块列表写入 superblock 的坏块表 - 再运行
sudo e2fsck -f /dev/sdb1强制重检,确认标记生效 - 后续 mkfs.ext4 可加
-l badblocks_w.log预屏蔽,避免格式化时踩坑
配合 SMART 做交叉验证更稳妥
单靠 badblocks -w 不代表硬盘健康:
- 扫描前先运行
sudo smartctl -a /dev/sdb,重点关注Reallocated_Sector_Ct、Current_Pending_Sector、UDMA_CRC_Error_Count - 若
Reallocated_Sector_Ct > 0且badblocks又扫出新坏块,说明盘已进入故障加速期,迁移后应尽快更换 -
smartctl -t long /dev/sdb可并行跑,作为底层传感器级佐证
不复杂但容易忽略











