很多手机(包括MP3)都自带有几MB到几GB的存储空间。并且通常都可以通过USB联接到电脑上,作为U盘使用。

有些时候,我们可能会处于某种原因格式化掉这个存储空间。如果你像我一样手贱,要把它重新分区,可能会出现分区工具无法识别的问题。同时如果你更像我一样手贱,直接拿起fdisk之类的东西,直接增删改了分区表,甚至重建了分区。那你就悲剧了!

没错,重建了的分区,在电脑上是可以正常访问的。可是拔掉USB线之后,到手机上访问就悲剧了。轻者访问失败,提示扇区大小错误、分区大小错误的。重则,直接挂掉,比如我的联想P707!

造成这个问题的原因,我估计是手机(MP3)所提供的“U盘”功能,并不是真的将内部的存储芯片联接到PC上。而是将内部存储芯片的部分空间,通过USB Mass Storage协议,提供给电脑访问。这个功能是手机(MP3)内部通过代码/程序提供的有限仿真功能。而U盘则是透明的将所有的Flash空间提供给U盘,就像硬盘一样。

通常手机这类数码设备内部都有一个Flash(以Nand Flash比较多,因为价格比较便宜,成本很低)。由于设备本身也有程序代码、数据需要存储。所以通常会将Flash的某部分(可以理解为一个或多个分区)保留用于存储。剩下的空间可以提供给这部分程序访问。在USB联接到电脑上时,就会运行一个程序处理该USB接口相关的功能,即实现USB Mass Storage协议。从而将电脑通过USB线传过来的U盘访问的相关请求解析,并且将相关的解析实现(实现到Flash上非保留的部分)。

因此我们可以看到,手机上提供的存储空间,其实根本就是Flash的某部分存储空间,而不是全部。在这部分存储空间中进行分区操作,实际上针对的不是整片的Flash。在USB线拔下之后,手机上运行的程序面对的是整片Flash,因此电脑上分区时创建的分区表就无效。

分析到这里,我想到了一个比较dirty的解决方法。因为我们知道,一般手机面对错误的分区表没有自动修复的机制。但是面对空白的分区,肯定有初始化的机制(比如刚出厂的时候,Flash上未使用的部分常常是空白的,厂商一般不会主动去格式化这个分区,毕竟要多一道工序)。因此,我们直接拿出dd神器,将分区全部写0。

写的过程,可能不能完美结束,而会出现类似磁盘不足的提示。没关系,不管报错报对,只要有返回信息了,基本上就写完了。这个时候直接按下CTRL+C结束dd。如果没问题,dd提示写入的数据大小应该和你手机提供给你访问的大小差不多。

这个时候拔出USB连接线,然后重新开机。手机就OK了!

PS:联想P707工程模式进入方法:

打开拨号盘,输入####72728439#即可!