当uos系统出现持续卡顿、文件读写异常、i/o错误频发,且dmesg日志中反复出现“end_request: i/o error”或“sector not found”时,极可能是硬盘物理坏道所致;应依次使用smartctl筛查smart关键指标(reallocated_sector_ct、current_pending_sector、offline_uncorrect)、gnome disks执行长时自检定位lba坏道位置、badblocks底层扫描并标记损坏扇区,最后通过fstab配置屏蔽坏块。

当UOS系统出现持续卡顿、文件读写异常、I/O错误频发,且伴随dmesg日志中反复出现“end_request: I/O error”或“sector not found”提示时,极可能是硬盘物理坏道引发的底层响应延迟。这类卡顿无法通过清理缓存或重启服务缓解,必须定位并隔离损坏扇区。
第一步:用smartctl快速筛查坏道风险
打开终端,执行sudo apt install smartmontools确保工具已安装;若提示已是最新版则跳过此步。
运行sudo lsblk -d -o NAME,MODEL,ROTA,找出ROTA=1(机械盘)或ROTA=0(固态盘)且MODEL非空的设备,例如/dev/sda或/dev/nvme0n1。
对SATA硬盘执行sudo smartctl -H /dev/sda;对NVMe盘必须加协议参数:sudo smartctl -H -d nvme /dev/nvme0n1。若返回PASSED仅说明基础健康,【不等于无坏道】,必须继续查具体字段。
执行sudo smartctl -a /dev/sda(SATA)或sudo smartctl -a -d nvme /dev/nvme0n1(NVMe),重点检查三项:Reallocated_Sector_Ct(>0即已发生物理坏道)、Current_Pending_Sector(>0表示有即将失效扇区)、Offline_Uncorrect(脱机校验失败数)。任一值非零,坏道已真实存在。
第二步:用GNOME Disks执行全盘扫描并定位坏道位置
点击任务栏启动器→搜索“磁盘”→单击打开磁盘管理工具。
在左侧设备列表中【务必选择物理硬盘整盘项,而非某个分区】,例如“ST1000DM010-2EP102”,此时右侧面板会显示SMART数据区域。
向下滚动至“运行自我测试”按钮,点击后选择“长时测试”→开始。该测试会逐扇区扫描,耗时数小时,但能直接定位坏道逻辑地址(LBA)。
测试过程中可随时点击“查看日志”,日志中出现“FAIL”或“ERROR”行时,其后紧跟的LBA编号就是坏道所在位置,记下该数值备用。
第三步:用badblocks进行底层扇区验证与标记
先卸载目标分区:sudo umount /dev/sda1(将sda1替换为实际根分区设备名)。
执行底层扫描:sudo badblocks -v -o /tmp/badsectors.txt /dev/sda 0 1000000。此处/dev/sda是整盘设备,0 1000000表示从第0扇区扫描到第100万扇区(根据上一步LBA大致范围调整起止值,避免全盘扫描耗时过长)。
扫描完成后,/tmp/badsectors.txt将记录所有确认损坏的扇区号。这些扇区号需转换为ext4文件系统可识别的块号:sudo dumpe2fs -h /dev/sda1 | grep "Block size"获取块大小(通常4096字节),再用公式块号 = 扇区号 × 512 ÷ 块大小计算。
将计算出的坏块号追加到/etc/fstab对应分区挂载选项中,添加errors=remount-ro,badblocks=/tmp/badblocks.list参数,使系统启动时自动屏蔽这些块。











