踩坑:固态硬盘连接故障使系统假死崩溃
笔者的惠普Pavilion笔记本使用的是双硬盘:原装1TB西部数据机械硬盘,配上光驱位的ADATA SP550 240GB固态硬盘。EFI分区、Windows 10+Ubuntu 18.04双系统及其应用软件安装在固态硬盘上,机械硬盘在删除系统有关的分区后专门用来存放数据。如此一来,速度存储两不误,重新定义了我对Windows和电脑速度的认识。
相对稳定运行两年有余,然而,就在昨天(2018年9月6日),意想不到的情况发生了。
故障:莫名变卡的机器
在像往常一样用Ubuntu编译内核时,我习惯性地关上笔记本盖子去吃饭,回来打开盖子,发现无论等多久、按多少次键盘,电脑怎么也唤不醒。一段时间后,屏幕上出现了指针,而除此之外仍是一片黑屏,登录界面出现后也无法输入密码继续。想尝试打开TTY模式(Ctrl+Alt+F1~F6
)排除故障,结果更不管用。观察硬盘灯,硬盘灯竟然一直常亮。
类似的问题也出现在Windows里。运行某个程序之后,机器逐步陷入瘫痪状态:先是当前运行的程序出现无响应提示,而其他程序没事;接着,其他程序也中招了,纷纷陷入无响应;再后来,就是资源管理器(桌面)崩溃了。无响应提示窗口选择“结束程序”,也没有任何反应。观察硬盘灯,硬盘灯同样出现了常亮的情况。
本以为这样的死机,重启一下就好,谁知一重启问题就更严重了。惠普采用系微BIOS的笔记本,可以按ESC
和功能键进入一些系统功能,例如ESC
键暂停启动进入功能菜单、F1
显示系统信息、F2
打开惠普诊断工具、F9
打开启动菜单、F10
打开BIOS设置;按下对应键后,屏幕左下角还会显示出按下的键与对应的功能。结果,不管按下哪一个键,系统都会卡住许久,屏幕左下角的文字一直出现,始终未跳转到下一个界面,直到等待约两分钟后才勉强出现。在等待过程中,硬盘灯也一直保持常亮。
即使成功进入了对应的界面,异常仍然存在。但是,比起根本不能动弹的操作系统,以下位于系统底层的程序反而直接告诉了我答案:
- 启动菜单界面中,没有出现任何选项,也就是说系统没有识别出任何的有效启动设备。进一步,插入一个EFI启动U盘,列表中有了显示,但只有U盘对应的那一项。
- 惠普诊断工具进入了核心模式,只有简易的菜单和内存/磁盘检测功能。而以往则会进入标准版,为类似于Windows的图形界面模式,功能更全面,还支持鼠标。
- 诊断工具起初还能检测出两块硬盘,但再一次重启后只剩下了机械硬盘。
这里有一个值得注意的细节:惠普诊断工具的标准版是位于EFI分区当中的(路径为EFI/HP/
),核心模式则为BIOS自带,检测不到EFI分区就会自动进入核心模式。而EFI分区在我的固态硬盘上,机械硬盘的EFI分区早已被我删除。
以此,我可以判断,问题很可能就出在固态硬盘上。
探究:拆掉固态硬盘后……
初步锁定目标后,我二话不说,打开笔记本后盖,卸下固态硬盘托架。然后适当扣好后盖,装上电池启动,于是奇迹发生了:三秒之内,“找不到启动分区”的提示迅速出现,而再度重启后按下功能键,进入对应功能的时候也是秒速,和正常情况无异。整个过程之中,硬盘灯也不再常亮,而只是象征性地闪一下。
如此一来,问题出在固态硬盘上的这一推测也得到了证实。但是,光确定这一方向还不够,还要具体分析关于固态硬盘的问题出在哪里——硬盘元件、磁盘区块损坏、硬盘的连接等,每个要素都有可能导致机器假死这一结果。
进一步分析前,要想办法启动系统。我有一个移动硬盘盒,把固态硬盘从托架上卸下来后装进去,连接电脑并开机,结果打开启动菜单后,选项仍是空空如也。试着将一个之前用于安装Ubuntu的U盘插进去重启,列表中出现了U盘的选项,用它引导进入LiveCD,再次重启,选项里就多出了固态硬盘中两个操作系统的入口。
最容易排除的因素莫过于硬盘本身,尤其是损坏的区块上,对此需要一款能够检查全盘错误的工具,首选就是HDTune。正好电脑中安装了IT天空的Windows 8 PE(手工安装,具体方法还会再出教程),于是从Windows Boot Manager中选择PE,进入之,然后打开其附带的HDTune。
在HDTune中选择固态硬盘,然后打开“错误扫描”选项卡。确保不勾选“快速扫描”,以及扫描范围的值为最大。随即开始扫描,耐心等待。
如此测试有两个目的,首先就是检查磁盘错误,其次是长时间考验硬盘。第一部分中所提到的瘫痪问题,均发生在系统启动后一小时之内,正好HDTune的错误扫描时间远远不止1小时,由此也可检查磁盘的稳定性。
测试最终成功,进行到了最后。结果证明,问题并没有出在固态硬盘本身——幸好固态硬盘没问题。
防微杜渐:保证连接的稳定性
排除了固态硬盘本身的问题之后,我的目光即刻集中到硬盘与主板的连接上。光驱位硬盘托架本质上是接口规格的转换,将台式机的SATA+电源接口规格转换为笔记本的规格。它们接口排列相同,都是电源与数据并列,只是笔记本上的接口远远更加小巧。
然而,小巧也有其风险的地方:小巧意味着接触面小,使得接口固定不牢。我的托架在不上螺丝的情况下插入接口中,稍微摇动一下,或者是往外一抽,即立刻松动。如此设计的初衷,即是允许用户轻松地拆卸并更换光驱。出厂时,笔记本的光驱位只有一颗螺丝固定,同时接口不会设计得太紧,拧开螺丝后,用户很轻易就能抽出光驱。不过,对于稳定性要求高得多的硬盘来说,这保障还不够。在台式机上,SATA线和电源线,只需其一,即可把固态硬盘悬吊起来,还不易松动。
由此我不由得怀疑,之前的Bug,正是因为接口偶然松动才导致的。为了预防这一问题,我在装回后盖的时候,特意把固定托架的唯一一颗螺丝拧紧了。
附:不能用USB端口上的固态硬盘启动系统
不过要注意的是,两款操作系统都不能直接从USB启动。Windows 10会在走完启动画面后,出现INACCESSIBLE_BOOT_DEVICE
的蓝屏;而Ubuntu下则表现为无法挂载Root分区而panic。原因就在于,默认情况下它们和硬件设备编号(暂且这么说)是绑定的,但是固态硬盘转移到了完全不同的USB控制器上,那么设备编号自然要重新分配。例如正常情况下,固态硬盘在Windows中是1号磁盘驱动器(0号为机械硬盘)、在Ubuntu中是/dev/sdb
;而USB端口下,则会在Windows中变成2号、3号乃至n号驱动器,在Ubuntu中变成/dev/sdc
、/dev/sdd
,乃至更靠后。而往往系统中的配置文件没有相应地修改,自然会造成崩溃。