Linux磁盘坏块如何检测_磁盘健康检查流程

1次阅读

linux磁盘坏块检测分三阶段:识别设备、扫描物理缺陷、标记隔离问题区域;不修复物理坏块,仅让文件系统避开,需先卸载分区,用badblocks扫描并配合e2fsck或fsck写入元数据,再结合smartctl做s.m.a.r.t健康评估。

Linux磁盘坏块如何检测_磁盘健康检查流程

Linux磁盘坏块检测不是一次性操作,而是分阶段进行的健康检查流程:先识别设备、再扫描物理缺陷、最后标记并隔离问题区域。关键在于区分“检测”和“修复”——Linux 不直接修复物理坏块,而是让文件系统避开它们。

确认目标磁盘与分区

sudo fdisk -l 列出所有块设备,注意区分 /dev/sda(整盘)和 /dev/sda1(分区)。坏块检测通常针对已格式化且**未挂载**的分区,比如 /dev/sda2。若设备正在使用,badblocks 会拒绝执行或报错“Device or Resource busy”。临时卸载可用:
sudo umount /dev/sda2

用 badblocks 扫描坏块

这是最直接的底层检测方式,支持读写测试:

  • 只读扫描(安全)
    sudo badblocks -v /dev/sda2 > badsectors.txt
    适合日常检查,不改动数据,但可能漏掉某些不稳定扇区。
  • 非破坏性写入扫描(推荐)
    sudo badblocks -n -v /dev/sda2 > badsectors.txt
    写入模式验证后立即擦除,比纯读取更可靠,仍保留原数据。
  • 破坏性写入扫描(慎用)
    sudo badblocks -w -v /dev/sda2 > badsectors.txt
    会清空整个分区数据,仅限空盘或已备份完的磁盘。

参数说明:-v 显示进度,-n 非破坏性,-w 破坏性,> badsectors.txt 保存结果供后续标记使用。

将坏块信息写入文件系统

扫描生成的 badsectors.txt 是纯数字列表(每行一个扇区号),需注入到文件系统元数据中,使其永久避开这些位置:

  • ext2/ext3/ext4 文件系统:
    sudo e2fsck -l badsectors.txt /dev/sda2
  • 其他文件系统(如 XFS、Btrfs):
    不支持 -l 参数,需改用 sudo fsck -l badsectors.txt /dev/sda2(部分变体可能不兼容,建议优先查对应手册)

注意:此步骤必须在文件系统**未挂载**时执行;完成后可重新挂载,内核会自动跳过已登记的坏块。

用 smartctl 做 S.M.A.R.T 健康评估

这是更现代、更高效的前置检查手段,不依赖文件系统,直接读取磁盘固件报告:

  • 安装工具:
    sudo apt install smartmontoolsdebian/ubuntu
    sudo yum install smartmontools(RHEL/centos
  • 查看基础健康状态:
    sudo smartctl -H /dev/sda
  • 获取完整属性与日志:
    sudo smartctl -a /dev/sda
    重点关注 Reallocated_Sector_Ct、Current_Pending_Sector、UDMA_CRC_Error_Count 等字段值是否非零或增长。

S.M.A.R.T 能提前预警潜在故障,但不能替代 badblocks 的实际扇区级验证。两者结合使用效果最佳:先用 smartctl 快速筛查,异常时再用 badblocks 精确定位。

text=ZqhQzanResources