星期六, 四月 08, 2006

Motorola E680内存不足问题的彻底解决

不愿听me罗嗦的请直接到本文末尾处查看具体的解决方法,^_^
从Motorola A388换为E680后一直用的不错,但有件事儿非常闹心,那就是用段时间就要出点问题。这不,又来了:
改变闹钟时间时提示“没有空间”,打开realplayer是提示“由于内存限制,无法加载播放列表……”,无法调整各功能图表所处的板块,无法载卸已经安装的j2me程序,闹钟不会响铃,照相设置无法更改,记事本编辑文件后无法保存,……

把共约两千条短信全部删除后,有一会儿能进行操作,但没过多长时间就又不行了。

用已经安装到手机上的Qonsole运行df命令,发现/ezxlocal目录已经使用了5312K,使用率为100%;运行du /ezxlocal,显示所占空间为2820K。

在网上搜索,参考其它文章后觉得可能是磁盘碎片的问题(?me其实对这个判断持保留意见,因为在me印象中,linux是不存在此问题的)。

把手机上/ezxlocal/sysDatabase/native.db拷贝到sd卡上,然后把这两周接收和发送的约400条短信全部删除,并且清理了电话薄,删除了约20个联系人。闹钟终于可以设置了,并且打开realplayer时不再出现错误提示。呵呵,好啦。赶紧把该设置的设置好,比如闹钟、realpalyer,并调整了几个图标的位置。然后用Qonsole运行df命令,发现/ezxlocal目录显示已使用5180K,使用率为98%。关机,开机。再次df时发现/ezxlocal已使用5280K,使用率已达99%。看来这个native_id.db文件是自动变化调整的,此时的大小为2585088byte。

安装了usblan工具,并使用超级连接把手机和电脑连接好。利用手机操作系统linux自带的samba工具,映射服务器为K盘,可以直接读取/system目录下的内容。然后telnet 169.254.142.2,显示版本如下
MontaVista Linux Consumer Electronics Edition 3.0
Linux/armv5tel 2.4.20_mvlcee30-mainstone
进入手机的操作系统进行操作,用户名为root,不需要密码,直接进入console。ps -ef列出了一大堆正在运行的进程。然后试了半天才找到那个控制db的进程,然后强行杀掉:kill -9 353,该进程名字为/usr/bin/db_daemon -shareenv -tapi。这下可以删除native.db文件了。但是/ezxlocal下的子目录download中因为有一个系统正在使用的文件(好像是输入法中的用户字典)无法删除。算了,把db文件搞定是关键。再次df,呵呵,/ezxlocal目录只用了1144K,使用率为22%。

然后再帮刚才备份到电脑上的/ezxlocal文件夹全部拷回到手机上。中间几次提示“目标磁盘空间不足,是否继续?”me全部选是,后来又碰到是否覆盖文件的提示,me选择否。OK,终于回拷完毕。

再次df,/ezxlocal目录使用了4068K,使用率为77%。哈哈,看来真是碎片的问题,否则不会仅仅在手机和电脑上移动一下空间居然可以空出来1112K,这1M多足够存一段时间的短信了。

ls -l,发现刚才从电脑中拷回的目录和文件的所有者和所属组都变成了root,而之前是ezx。贪图方便,直接chmod -R 777 /ezxlocal,再chown -R ezx:ezx /ezxlocal,嘿嘿!

手动启动刚才被强行关掉的db_daemon程序
# db_daemon /># db_daemon[396]: Launch...
db_daemon[396]: Active LogWatcher...
db_daemon[396]: Launch success. Wait client connect

电话薄和短信都能正常显示了。再次df,发现/ezxlocal占用了4108K,使用率为78%,比刚才多了50K,哈哈,这属于可以接受的范围。

然后进行试验操作。调整了闹钟所定的时间,然后又按照相键加载了语音识别。再次df,占用3996K,使用率为76%。居然会减少,看来其中的水份(即碎片)还不少,不过linux确实有自我调整的能力,但为什么到了98%以上的时候又不会自我优化了呢?!

语音呼叫一个号码,成功找到,但拨号时提示“接口 服务器断开!”看来还是得重新启动才行啊。不行,再试试其它功能。把照片的默认存储位置调整到了sd卡上,正常;把录音机的存储位置同样调整到sd卡上,成功;打开realplyer,OK;打开记事本编辑并存储文件,正常;……一切都不错,除了电话不能拨之外。

再次df,占用4012K,使用率为76%,比刚才还低些。看来确实E680的操作系统linux确实对磁盘空间是动态优化的。

重新启动时关机键不起作用了,只好下掉电池。然后开机,1分钟后,看电话薄居然是空的,赶紧看短信,发现出现了一行字“等待DB…”,只好静等,看着进度条在一点点推进。终于到头了,提示自动消失,回到了空屏幕状态,再进入短信看,谁知道仍然在“等待DB…” 等待期间,me用拨号盘拨打了一个电话,正常。再回头看这个“等待DB…”,me突然意识到是db_daemon没有启动的原因。在Qonsole中输入命令db_daemon />
再次df了下,/ezxlocal占用了4104K,使用率为78%。看来通过这种方式解决ezxlocal的空间问题是有效的了。

me试着向168发了hf查询话费,结果已发短信可以存储,但收到的短信却无法显示。me用db_daemon -shareenv -tapi />
启动后一切正常,可以拨打电话并收发短信,但原来的电话薄可就不见咯。telnet后df,占用1308,使用率为25%。kill -9 382(即那个db_daemon -shareenv -tapi),然后映射驱动器,把原来备份的native.db拷贝到手机中,更改权限和拥有者,即chmod和chown,然后db_daemon -shareenv -tapisrv,其中到底是tapi还是tapisrv真不太清除,只是看有个进程为tapisrv才这么写了。好,这次没有再提示出错。ls -l后发现,log文件的大小发生了变化,从89449byte到了102408byte。查看电话中的短信,起初显示的还是me试发查询话费的短信,可能是缓存的原因,因为点击短信文件夹的时候它就马上变成了之前备份的短信。再看电话薄,哦,好慢,仍然是空的,等了好久后原来的电话薄才正常显示。试着拨打其中的电话,成功拨出。看来问题就是出在那个参数上。第一次因为没有带参数启动db_daemon,所以会显示“接口 服务器断开!”而无法拨打电话。

再次试验发短信,结果无法收到,惨啊。怎么办呢?!后来突然发现,log文件的所有者怎么变为root了!问题可能就出在这里。因为me是用root身份登陆的,启动db_daemon的时候也是以root身份启动,生成的文件自然也归root管理,但native.db文件却是ezx所有。再次把db_daemon杀掉,想su ezx才发现原来没有这个命令。后来想想,还是再次启动一次好了。果不其然,手机启动时默认的用户是ezx。一切终于正常了。测试短信和电话都没有问题。

虽然走了不少弯路,但me对Motorola E680的操作系统和管理方法以及linux的一些命令用法的掌握又进了一步,哈哈,也算是收获,但因为学艺不精,只好主清除了一次,导致手机上安装程序还得重装,唉。

简单总结下再次碰到空间不足时的处理方法:

1、设置usb连接方式为modeom方式。如果空间已经撑满了导致无法更改,可以主复位一次,不会影响短信和电话薄的;或者删除一些短信或者联系人也可能行,但不保证一定能行。
2、安装usblan的驱动程序,用数据线连接电脑和手机,利用E680操作系统linux提供的samba共享工具映射system目录为电脑上的一个磁盘,进入/ezxlocal/sysDatabase,把几个文件都拷贝到电脑上备份。
3、telnet到手机上,用root账户进入(不需要密码),kill -9 382(指db_daemon进程的PID)。
4、把备份到电脑上的文件拷回手机中,选择覆盖。
5、在telnet环境中执行chmod 777 /ezxlocal/sysDatabase/*;chown ezx:ezx /ezxlocal/sysDatabase/*
6、重新启动手机。一切ok!!!




Technorati Tags: , , , , , ,

没有评论: