【杂七杂八】磁盘坏道概念的发展及勘误
硬盘坏道概念新知
现在一般很少提到硬盘坏道这个概念,硬盘无非坏了或者没坏两个状态。玩NAS一段时间,就会遇到其中的中间状态——“坏道”。本文仅就机械硬盘的“坏道”进行分析。
目前遇到过几次文件系统损坏挂载不上。因为好玩,尝试了多种文件系统。
- ext4的硬盘断电坏了,挂载提示needs cleaning,用fsck修复后文件全部到了
lost+found
文件夹内,里面是原来根目录的几个文件夹,文件夹名丢了,好在里面文件结构都是好的。 - btrfs的硬盘复制文件时系统卡死,文件系统崩了无法修复,通过只读挂载挂上了,正在操作的那个目录坏了提示IO错误无法访问。买来新硬盘准备备份,再试了一下直接挂载,他又好了,很神奇。
处理这些问题期间查了很多英文资料,结合学习FatFs的一点经验,突然发现中文互联网上对于坏道的认知和我小学时看到的基本相同,但和我现在看各种英文资料有冲突。
翻译问题
百度百科把坏道翻译成"bad track",的确比较符合我们对机械硬盘记录信息的想象。但坏道这个概念在英文里应该是"bad sector"(坏扇),"bad track"在wiki里是搜不到的。
物理坏道
【百度百科】物理坏道:是盘片磁介质失效(可能是划伤或者生产工艺粗糙的原因),不可读写,无法修复,只能弃之不用。
百度百科对物理坏道我觉得符合认识,一部分是因为生产过程中不可避免的瑕疵,一部分是使用中机械硬盘产生的损伤。
逻辑坏道
【百度百科】逻辑坏道:坏道可能是软件操作或者使用不当造成的扇区首位的扇区地址标志等逻辑出错,这类问题可以通过专业修复软件修复
对于NOR Flash芯片,就是你给它一个地址,它给你这个地址上的数据。机械硬盘和固态硬盘通过主控实现一样的功能。在此之上有文件系统如FatFs负责抽象出文件和目录,具体数据怎么放在一连串的地址上由文件系统安排。
如果给一个地址给存储器,它写不进或读不出,那这里就是就是物理坏道了。在没有文件系统的情况下,就不存在逻辑坏道这个概念。
【百度百科】硬盘逻辑坏道可以修复,而物理坏道不可修复。实际情况是,坏道并不分为逻辑坏道和物理坏道,倒是分为按逻辑地址记录的坏扇区和按物理地址记录的坏扇区。
百度百科对“逻辑坏道”的定义很模糊,同一页里就有不同的定义。我现在认知的“逻辑坏道”就是“文件系统错误”的意思。为了追溯“逻辑坏道”的概念,我搜索了早期的资料。
- 有的认为“逻辑坏道”就是ECC校验不通过,可以通过系统自带的扫描硬盘解决。
- 还有的把不能格式化的故障称为逻辑坏道,最后他用软件成功格式化了,所以他认为是软件故障所谓“逻辑坏道”。
用系统自带扫描硬盘解决逻辑坏道是确定的。现在Windows里还留有的“扫描硬盘”就是“检查驱动器中的文件系统错误”。
现在来看无法格式化硬盘显然是硬件问题,更可能是因为软件不同没能对硬件故障做出反应。在这几十年中硬盘技术进步极大,S.M.A.R.T.的使用也使我们能够更通过标准的参数了解硬盘的硬件健康情况,这些在后面会提到。
深远的影响
“逻辑坏道”这个错误概念影响之深远,已经反向输入回英文了。在维基百科上看对"bad sector"的定义的时候看到了
Bad sectors can be "soft" (logical) or "hard" (hardware, physical), depending on what is making the sector inaccessible.
我还以为是我错了,就是有“逻辑坏道”这么别扭的概念。再一看参考文献是一个数据恢复公司的网站18年的文章,作者名字只有一个“zhang”😑……维基百科确实不能全信,还得自己看参考文献
屏蔽坏道
DiskGenius
百度搜索坏道很多文章会看到使用Deskgenius屏蔽坏道。原理是扫描硬盘,屏蔽超时的区域。这里是读超时还是写超时还是读写超时不得而知。
badblocks
软件如其名,是Linux平台扫描“坏块”的命令。在他的manual里写不建议直接单独使用,建议在使用fsck或mkfs中间加参数调用。badblocks使用-w
或-n
参数(一个会破坏数据,一个可以对有数据的硬盘使用)来扫描坏道,实际起修复作用的是硬盘自带的SMART(Self-Monitoring, Analysis and Reporting Technology)。badblocks -w
的本质是对硬盘从头到尾写入一遍,无法写入的地方就会被SMART自动映射。
所以修复坏道并不需要像网上什么手动分区屏蔽,SMART会自动识别坏道并映射,然后SMART信息的"Reallocated Sector Count"就会+1。ext4还会自动处理坏道,然而比较先进的Btrfs却没有设计处理坏道的功能了,这种部分功能由SMART负责。
总结
- 物理坏道无法修复。
- “逻辑坏道”的概念基本就是文件系统错误,可以用Windows自带的工具修复(Linux用fsck)。
- SMART会自动映射坏道区域到保留的区域来达到屏蔽的效果,一般不用手动屏蔽。