从 SMART 数据显示,我有 3 个待处理的扇区数。(运行 Ubuntu Maverick。)
我尝试过关于如何解决这个问题的论坛链接,但我无法确定要写入该扇区的确切扇区数。我已经从磁盘实用程序运行了完整的自检,但磁盘实用程序没有在 Maverick 中显示确切的扇区数,但不确定早期版本是否如此。这在 Maverick 中有所改变吗?
我该如何识别扇区并修复待处理计数?论坛中的提示可靠吗?
附言:我确实遇到与“重新分配的扇区数”相关的其他问题,从我在 Google 上搜索到的信息来看,这个问题无法解决。有什么办法可以防止它继续上升吗?
答案1
这实际上是一条很长的评论 ;-)
我认为文件系统应该会在适当的时候自动处理这个问题,特别是因为你已经运行了自检。如你所见,它表明在写入失败时会进行重新映射,因此下次尝试写入时,它将被重新映射。
您能说明一下这样做的更大目的吗?除了对需要重新映射的块的担忧之外,您这样做是否还有其他烦恼/问题要解决?
只要您确切知道哪个扇区出现问题并且有令人信服的理由来修复它,您引用的 ubuntuforums 帖子中的提示就是安全的。通常,即使是文件检查程序也不会报告扇区号,因为它是由文件系统抽象和内部处理的。
但如果您必须找到有问题的坏块,您可以使用以下步骤:
注意与文件系统对应的设备文件。根据磁盘类型,其格式为 /dev/hdc 或 /dev/sdb。它显示在磁盘实用程序 (
System -> Administration -> Disk Utility
) 中。如果单击左侧面板中显示的列表中的磁盘名称,则可以在右侧的“设备:”中读取设备名称。卸载该磁盘上的所有文件系统。以下命令应该不会返回任何输出。
mount | grep -i <device-name>
运行以下命令
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 时,这通常是驱动器即将发生故障的征兆。我认为,如果不更换硬盘,这个问题是无法解决的。