如何修复当前待处理扇区数

如何修复当前待处理扇区数

从 SMART 数据显示,我有 3 个待处理的扇区数。(运行 Ubuntu Maverick。)

我尝试过关于如何解决这个问题的论坛链接,但我无法确定要写入该扇区的确切扇区数。我已经从磁盘实用程序运行了完整的自检,但磁盘实用程序没有在 Maverick 中显示确切的扇区数,但不确定早期版本是否如此。这在 Maverick 中有所改变吗?

我该如何识别扇区并修复待处理计数?论坛中的提示可靠吗?

附言:我确实遇到与“重新分配的扇区数”相关的其他问题,从我在 Google 上搜索到的信息来看,这个问题无法解决。有什么办法可以防止它继续上升吗?

答案1

这实际上是一条很长的评论 ;-)

我认为文件系统应该会在适当的时候自动处理这个问题,特别是因为你已经运行了自检。如你所见,它表明在写入失败时会进行重新映射,因此下次尝试写入时,它将被重新映射。

您能说明一下这样做的更大目的吗?除了对需要重新映射的块的担忧之外,您这样做是否还有其他烦恼/问题要解决?

只要您确切知道哪个扇区出现问题并且有令人信服的理由来修复它,您引用的 ubuntuforums 帖子中的提示就是安全的。通常,即使是文件检查程序也不会报告扇区号,因为它是由文件系统抽象和内部处理的。

但如果您必须找到有问题的坏块,您可以使用以下步骤:

  1. 注意与文件系统对应的设备文件。根据磁盘类型,其格式为 /dev/hdc 或 /dev/sdb。它显示在磁盘实用程序 ( System -> Administration -> Disk Utility) 中。如果单击左侧面板中显示的列表中的磁盘名称,则可以在右侧的“设备:”中读取设备名称。

  2. 卸载该磁盘上的所有文件系统。以下命令应该不会返回任何输出。

    mount | grep -i <device-name>
    
  3. 运行以下命令

    badblocks -sv -b 512 <device-name>
    

    笔记-b 512是为了将块大小与 512 对齐,因此您可以使用此命令报告的数字作为输入,dd论坛帖子

我不会推荐上述所有操作,因为无论如何它都会由正常的磁盘操作来处理。

答案2

最糟糕的情况是你总是可以这样做:卸载磁盘或阵列并停止任何阵列。

dd if=/dev/sdX of=/dev/sdX iflag=direct,sync oflag=direct,sync

虽然这会花费很长时间,但是应该会有效。

理想情况下,您可以查询硬盘增长缺陷列表(glist),但我还没有弄清楚如何做到这一点。

答案3

看起来该conv=noerror选项很有帮助。当出现 I/O 错误时,该选项似乎会强制dd重试,直到完成读/写。我使用以下命令为 badblocks 命令(由上面的 Kaushik 提供)找到的每个坏块创建了一个源文件,它将“当前待处理扇区数”(“等待重新映射”)从 5 清除为 0。

sudo dd bs=512 count=1 conv=noerror ibs=512 obs=512 if=/dev/sda of=/dev/sda iflag=direct,sync oflag=direct,sync skip=3186809 seek=3186809

答案4

当该值超过 0 时,这通常是驱动器即将发生故障的征兆。我认为,如果不更换硬盘,这个问题是无法解决的。

參閱http://kb.acronis.com/content/9133?nocache=1

相关内容