记一次曲折的笔记本自救史

这里报告PrimoCache软件的Bug或建议,
非常感谢您的支持!
回复
suge940322761
3级用户
3级用户
帖子: 15
注册时间: 周一 4月 11, 2016 11:12 am

记一次曲折的笔记本自救史

帖子 suge940322761 »

**:几天前(大约是11or12号)正在做一个安卓反编译字符串解密的小工具,写到关键代码时突然出现个蓝屏,来不及看清内容就自动重启了。
配置:神舟k590s i7d3(蓝天w350etq),win10 64系统。
虽然没看清蓝屏内容,不过大概知道是因为primoCache的问题,导致内存溢出了。简单说下这个软件就是利用内存缓存硬盘,我用的初衷是写代码时很多改动和编译并不是最终的,所以这些操作在内存中进行,最终代码和编译写入硬盘就可以了,可以少用硬盘。但是这个软件至少我从win10用一直以来存在这个bug,就是在设置缓写且已使用缓写空间接近满时可能内存溢出。以前版本遇到过,内存溢出后果就是所有没写入硬盘的数据丢失,也可能有写入不完整的文件存在,运行windows的chkdsk命令扫描下修复下索引比较好。这次新版本刚发布不久,管理员说修复了,所以,你懂的。

代码丢了就算了,反正刚写不久,大概还记得,重写一遍就是了(其实为了应付这种情况,我是写完一个就推到github上的,不过有时人就是懒和侥幸)。重启发现原账户不能登陆了,肯定是c盘账户这个目录丢失文件了,设置的下次启动扫描硬盘,提示是进行扫描,但是并不会扫描,不知道原因,以前也是这样。但是我们可以进命令行模式去修复,操作就是按住shift键重启,选择。chkdsk果然有很多索引丢失了。

重启后可能进不了系统还是什么的,这里现在记不清了。所以就恢复了以前的一个备份镜像(太冲动了),之后还是启动不了,好像是进入了自动修复,修复失败,查看了log说找不到硬盘。具体怎么分析出结果不是重点略过,进bios硬盘模式从raid改为ahci,raid是为了使用intel快速存储技术用固态给机械硬盘加速。之后要先进安全模式在重启就可以了。

但是这时还有一个问题,重启变关机,关机屏幕灭,电源灯,wifi灯等不灭,风扇不停转。百度了下多数说是电源模块坏了。因为这机器有个缺陷,bios中没有关机选项,正常电源键不响应,造成的问题就是如果没有正常启动的系统,你就只能强制关机,以前也没少强制关机。所以我觉得电源模块坏了的可能性还是很高的。

但是还不能做最后决定,也不甘心就这么坏了,把主板电池取出来,恢复下设置,结果win10启动不起来了,大约是蓝屏错误apci_boot_erro,百度无解,后来各种测试,pe,win7,ubuntu 都启动不了,换硬盘也不行。win7启动是出现pe似的加载进度条,进度条走完就重启。efi+gpt的ubuntu是好像根本没读硬盘,换个ubuntu启动界面,直接死机。mbr的ubuntu是提示too many e820 memory map entries。pe是win8内核的就和win7一个
加载就重启,其他老版本pe貌似没读盘直接死机,pe集成的dos倒是可用。

看来只能从apci_boot_erro和too many e820 memory map entries这两个错误入手分析,翻了几十页搜索结果,apci_boot_erro没有什么有用信息。
too many e820 memory map entries倒是找到些蛛丝马迹,这时grub中的一个函数,传统bios启动和efi启动都有一个e820的内存指针,efi的是个空指针。这么看有可能是grub无法判断那种方式启动?虽然以前bios怎么设置都可以,但是还是把Secure Boot关闭,csm改为兼容,硬盘模式改为ide。


linux内核可以加载,ubuntu可以启动了,试了下重启和关机倒是恢复正常了。经过一步一步排查,发现能启动linux只是因为硬盘模式设置为ide模式和其他设置无关。而且其他系统依然是老样子启动不了,且如果断电关机后开机必须先进bios,即使硬盘模式就是ide也要保存重启一次才可以。


由此,虽然没什么有力的依据,但是直觉是bios有问题,那就刷新下bios吧。蓝天的镜像网站下载bios,按照以前刷过的步骤进行。进dos,先刷ec,ntfs4dos加载ntfs分区,但是在分区dir却不显示ec文件夹和里面的文件,但是cd ec可以进,die之后是空,但是执行刷ec的bat脚本大约提示错误的命令或找不到文件。


思考了下,知道原因,自己在ubuntu里面下载的bios,创建的文件夹复制的文件,因为ntfs是微软的文件系统不开源,linux下面的ntfs操作都是逆向来的,并不完美,比如这样建文件夹,文件,是不会分配段文件名。而dos只支持8字节文件名。ubuntu原本装有虚拟机,启动win7重新拷贝以后,ec刷成功了。


接下来刷bios,提示Error 1: Memory allocation error occurred.启动pe集成的内存检测工具都不能检测,大概也是提示内存分配错误一类的。但是ubuntu都能启动正常用,内存是肯定没问题的。当时真是头疼。


正常刷不了,百度搜索有没有其他刷bios的方法,找到两个:
1:蓝天其他机型的盲刷方法,fn+b键加U盘,帖子:http://bbs.zol.com.cn/nbbbs/d1191_78874.html
问题1,安装其方法打开下载的bios里面并没有文件名,而且帖子里下载的bios是rom后缀,而我这款机型是老机型,bin后缀的。所以只能一个一个名字的测试,结果都不行。
2:ami的bios的一个盲刷方法,这里说下关系,神舟是卖电脑贴牌的,机器是蓝天做的,bios是蓝天在ami的bios基础上做的。ctrl+home,文件名改为amiboot.rom。结果失败。

无论是fn+b还是ctrl+home确实貌似触发了一个模式,屏幕是亮黑屏,硬盘灯也会闪一会,但是之后就死在那,只能强制关机。所以我还以为可能是下载的bios的问题,找了个第三方修改的,依然不行,各种测试。把硬盘取下来之后发现根本就没有读u盘操作,之前硬盘灯亮可能是读硬盘而已。这里也考虑过是不是u盘的问题,但是没有多余的u盘去测试。

盲刷也无望了,这时已经是坏机第三天了,前两天各种测试,搜索,自己都有些绝望了。看来只能去电脑店用编程器刷bios了。于是下午去了镇上的一个写着修电脑的店(农村),进去说了情况,浪费我口舌,结果店主貌似是个之后装系统,卖配件的,linux也不知道是什么,编程器,检修工具都没有,我跟他说过各种测试都做了,他非要自己在试一遍,用他的u盘进pe等,结果就是浪费几个小时,最后我说我怀疑是bios或者电源模块的问题,他给了我一个县城的维修电话,说那里有编程器。

人肉一下给我的号码,找到了他的qq,说了一下情况,他表示没遇见过这种情况,让明天去店里看看。我说我分析bios的问题可能性最大,他说神舟很少坏bios。网上有他的一些信息,店里有示波器,编程器等,能进行芯片级维修,所以去那里修应该没问题。这里吐槽下,我觉得修电脑可以分三种了,1,装系统维修,就像我镇上的那个店老板,只会装个系统,清清灰。2,模块维修,能判断那里出了问题,但是不会维修芯片,只会换模块的,比如我(我是没工具,有工具也能简单的芯片维修)。3,芯片维修,有专业设备,电路图,焊接,调试都精通的。

一方面决定明天去修电脑,但是还是想再最后试试,无神论的我都有点期盼奇迹的出现了。u盘格式化重新装上pe,最开始是装的ubuntu,盲刷的时候格成fat32。之前的pe都是用在硬盘上的pe。插u盘进dos,刷一个第三方的bios,因为官方bios要先执行meset重启后再刷bios,要两步骤,麻烦。

不可思议的是,这次不是Memory allocation error occurred而是提示要刷的bios和原来的bios大小不一致的错误,纳尼,内存分配可以了?试了下u盘pe集成的内存检测工具也都不行。不过这个dos有个集成的mem的命令可以查看内存,我突然发现好像我知道问题在哪里了。


原来使用的硬盘pe里集成dos差不多是纯dos,忘了通过什么好像查看过内存,只有system的640k。但是这个u盘dos的查看居然扩展内存有3g多,识别内存了?虽然不清楚具体原因,不过隐约觉得可能可以刷bios了。马上刷官方bios,没有Memory allocation error occurred,很快闪过一片英文就关机了。刷成功了?断电开机发现并没有,问题依旧在。再刷一次,这次把输出重定向到文件保存下来,分析下。刷完后进存放bios的分区目录看,呃?并没有输出重定向的log。见鬼!


再进dos,使用echo随便重定向生成个文件,dir发现没问题啊,内容也在。但是重启到ubuntu查看,居然没有?搞不明白了。不过第二次刷bios多少看到一些内容,大概看到两个错误,一个好像就是提示要刷的bios和原来的bios大小不一致,另一个好像是读fapart.txt文件有错误?这个文件是bios目录里面的文件,内容好像是指定一些区块的内存开始结束地址。也看到好像刷成功了一些区块,


其实dos我并不是很熟悉,我看fapart.txt这种文件也并没有什么特殊的属性。不过我原来是把bios放在一块硬盘的原来的c盘(win7系统,但是在dos里它的盘符是d盘,),莫非有一些系统属性?抱着怀疑的态度,把bios重新解压到一个非系统盘。不可思议的是貌似没错误出现的刷成功了,比起前面的几秒结束,这次刷了一分钟,但是输出很快,没看清是否有错误,重定向的log还是没有了。


断电重启,怀忐忑的心按下电源键,亮了1秒,灭了!我去,不会真砖了吧?慢着,有自动重启,等出现选择快捷键的界面时我知道应该是成功了。接下来就是测试了,win7,ubuntu,pe都可以了,正常了。


遗留问题:
1:并不能确定是否是dos的问题,因为以前就有硬盘上的dos刷过bios。但是当天睡觉醒来,我想起个问题,好像以前刷的那次bios就出现过错误提示,但是并没有看清是什么,而且那次刷完,版本号,和该有的功能也都正常啊。莫非这次的问题就是上次刷bios遗留的问题,bios不完整?以前没有取下过cmos电池,难道是因为虽然bios不完整,但是一直缓存着以前的bios,这次取电池后清空了?越想越觉得有可能,因为确实是在取下电池之后才出现不能启动。仅仅个人猜测,毕竟自己对底层了解很有限,希望有能人分析解答。


2:为什么dos重定向生产文件会消失,这个问题其实应该能找到答案,但是我已经不想去管了。


3:究竟系统分区是否影响刷bios,因为上面的经历确实是在换成非系统分区之后刷成功了。但是没理由啊,fapart.txt并没有设置不可访问的属性,dos下面可以查看到内容。不过现在我也不是很关心了。


4:或许现在可以在测试下盲刷了,但是我不想去试了。有这个机型的谁想试,我代表这个机型使用者感谢你。同时感谢蓝天,神舟的祖先,没一个技术支持回应。


我想说的:
1:大家安分就好,不要去尝试未知的东西,好奇害死猫。手机同样道理。
2:非开源,非系统开发的涉及底层操作的软件慎用。就比如primoCache,windows不开源,这个软件也不开源,你并不清楚它内部是实现。其实如果系统和软件没bug,我这个缓写是很有用的,操作内存,快;减少硬盘使用,延长寿命,节约电(可能很少);而且我笔记本都是带着电池的,不怕停电,就怕系统,软件bug,一个蓝屏,死机就惨了。但是我不会安装什么乱七八糟的软件,也不玩游戏,所以其他软件产生蓝屏基本不可能,所以威胁只有系统本身的bug和缓写软件本身的bug。
为什么开源软件或开源系统的可以用,那是因为你可以自己分析代码,知道实现细节,就算你不会修改bug,但是能避免,按照你的使用,怎样会触发bug,怎样避免。linux就是可以自己在以实现的基于文件的缓存上面修改成适合自己需求的缓读写。
3:要么不做,要么不轻言放弃。这次经历就是个案例,当然最后我自己也觉得有点侥幸的成分了。因为我认定是bios的问题,最后按照自己的想法证明了也解决问题了。如果没解决,可能就要花不少时间和金钱去维修店修了。那个店主不认为是bios的问题,其实我理解,虽然自己的电脑,自己怎么操作的,产生问题之前的操作等能帮助判断问题,但是一般用户不具备这个能力,而维修者听取使用者的说法很可能走偏路。但是显然我并不是一个完全不能自主判断的用户,不过为了避免不愉快,我还是不会多嘴,那么可能就是他做各种不必要的检测,也许最后才会听我建议编程器刷bios试试。因为之前聊天,他一直不认为是bios的问题。
4:和小米无关的为什么也发到这里,其实一是正在做的这个反编译字符串解密是安卓的,二是对这个版本有些留恋,三是也希望有遇到这类问题的能对其有些帮助,能让更多人看到就有可能帮助人,我了解找资料时遍寻不遇的感受,难道对问题有一点蛛丝马迹的帮助都是好的。
头像
Support
技术支持组
技术支持组
帖子: 2667
注册时间: 周日 12月 21, 2008 10:42 am
联系:

Re: 记一次曲折的笔记本自救史

帖子 Support »

真的非常抱歉因为软件的蓝屏问题引起的这么多麻烦!!软件本身是不会对BIOS有写入操作,为什么会引起BIOS出现问题,我们也觉得比较疑惑。一种可能性是因为软件的问题引起Windows指令运行异常,导致对BIOS操作。另一种可能性是经常性的突然断电可能引起了硬件有潜在问题。总之不管怎样,非常抱歉造成的问题和麻烦!
此外我们发现Windows10升级到14393版本(周年更新版)后,由于其内部有一些比较大变动,部分软件都出现了兼容性问题。有些蓝屏错误可能是和其它应用软件,或者是其旧版本,一起使用的时候才发生,所以查找原因比较费时。但我们已经在更多平台和更多应用环境下进行验证测试,希望可以尽可能减少和解决这些问题。
Primo Ramdisk | PrimoCache
Romex Software 技术支持组
回复