本周购入新火力——ThinkPad T440p。这两天在折腾安装Windows 7与Linux双系统,过程相当反复纠结,心得体会总结如下:

1•CentOS 7对新硬件的支持更充足,T440p上安装CentOS 7后,可自动识别所有硬件。在Windows 7下可顺利安装CentOS 7,且安装后能顺利使用CentOS 7。但问题也来了,CentOS不能识别Windows 7,安装CentOS 7后,原来的Windows 7不会出现在启动项目里,网上查找一番后解决办法是修改grub.cfg文件。因为CentOS 7已采用新式的grub2系统,所以需要进入/boot/grub2目录后使用vim编辑grub.cfg文件。

将下面这段Windows 7的启动项声明:

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows 7 (loader) (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-chain-XXX' {
insmod part_msdos
insmod ntfs
set root='hd0,msdos1'
chainloader +1
}
### END /etc/grub.d/30_os-prober ###

加在### END /etc/grub.d/00_header ###之后。其中的XXX为你的Windows 7系统分区的UUID。

经过此番修改后,重启动后,Windows 7启动项可以看到了,并且也可以成功进入Windows 7。但在登录进入Windows 7之前和之后,屏幕会诡异地闪两下,这在安装CentOS 7之前是不存在的,一般像这种诡异的问题解决起来都很棘手,而且用了一阵儿后感觉CentOS对我这种纯新手来说还是有些不合胃口,因此决定安装Ubuntu看看。

2•Ubuntu最新的长期维护版是14.04.1,但这个版本很杯具地在T440p上无法安装,第一遍安装时停在LOGO画面不动弹。第二遍安装时我按F1键查看安装信息的细节,发现安装时不动弹的原因是提示了一大堆错误,但无奈错误提示出现时屏幕正在疯狂地向上滚动信息弄得我眼花缭乱啥也没看清。

开动脑筋,第三遍安装时我用单反相机的连拍功能机智地捕获下了所有的出错信息,错误大意是说无线网卡错误、以及显示驱动错误,继续网上查找一番后,说是T440p因为硬件太新,导致显示驱动和无线网卡驱动只有在Linux 3.16版内核中才提供,而Ubuntu 14.04.1的内核是3.13,因此导致无法安装。之后,紧接着发现Ubuntu 14.10正式版已经发布了,而这个版本的Linux内核恰好就是3.16的,因此重新下载iso,再次刻盘,重新安装。

因为之前这电脑中已经安装了Windows 7,并且已经把所有的分区都已经分配为Windows 7使用的主分区,结果发现在这种情况下,Ubuntu 14.10无法安装,会在安装过程中光盘突然被弹出。

重新进入Windows 7,使用diskpart删除了两个主分区,并创建了扩展分区和多个逻辑分区后,再次安装Ubuntu 14.10,顺利安装成功,安装过程中Ubuntu还问我,“已经侦查到您的系统中安装了Windows 7,您大概是希望双系统共存,并且可以在启动时选择进入何种系统吧?”说得好轻松好周到啊,但我其实并不相信它会把这件简单的事情顺利搞定。但为了给它一个面子,我选择了“是”。

安装完成,重新启动后,果然看到了Windows 7的启动项,多少有点出乎我意料,因为按照我之前在网上查询的方法,要想在Windows 7成功安装Ubuntu双系统必须使用EasyBSD这个软件在安装Ubuntu前做一些看起来很有道理的工作才行。但现在我啥也没做,直接就楞头楞脑地安装上了Ubuntu,而且它就这么能工作了,这不科学啊。正在我暗自窃喜时,科学的事情发生了。

在我选择了Windows 7启动项后,正安心等待着Windows 7启动画面出现时,我发现Windows 7的启动画面并没有出现,却不可思议地面对着一张预示着Ubuntu正在启动的那种纯紫色的界面,整个屏幕都是这种纯纯的紫色,除此之外,没有其他信息,更让我惊讶地是此时我却听到了Windows 7启动时的那种熟悉的声音,我相信在这张大紫脸后面正在启动的绝对是Windows 7,而不是Ubuntu。因为常识告诉我们,一个人的容貌相对是容易改变的(江湖上的易容术相信大家也都听过,当然现在该叫美图秀秀了),但声音却极难改变,凭那一嗓子我就知道必Windows 7无疑。

我想去操控它,但前面却被一张Ubuntu的大紫脸给挡得严严实实。我试探着盲输入了我的Windows 7登录密码,果然又出现了另一个熟悉的声音,那是登录进入的声音。我想还是先关机吧,因为被大紫脸挡着,无法正常关机,只能强行长按开关键关机了。

重新启动进入Ubuntu,我想先看看Windows 7的那几个分区是否有异常,结果点击分区时“当”的一下弹出一刺眼的错误信息,读了读发现意思是说由于我的Windows处于休眠状态因此无法在Ubuntu下挂载,我需要回到Windows 7中正常关机才行。难道是因为这个原因导致出现大紫脸的异常?不管怎么说,很难完全排除这个可能性。

于是重新启动机器,很快,再次来到大紫脸的面前。此时,我启动我的另一台同样安装着Windows 7的本本,同样来到这个登录画面,发现在Windows 7登录界面上按三次Tab键后,焦点就会切换到关机按钮上,然后按回车即可关机。如此,依此顺序盲着把这台大紫脸正常关机了。

重新启动,再次选择Windows 7,奇迹没有发生,还是大紫脸。再一次,三次Tab,回车关机。

看来还是得回Ubuntu,正常的思路应该还是折腾grub.cfg。但我把grub.cfg审查了一遍,没发现什么异常。当然,以我现在的纯新手的功力,就算里面有个巨大的异常醒目地待在那儿,估计我也发现不了。

一时之间,没有什么头绪,网上的搜索也没有任何结果。困惑中,在没有对grub.cfg的模板做任何改动的情况下,试探着执行了一遍update-grub,重新生成一下grub.cfg,然后重新启动,选择Windows 7,不可思议的事情发生了,那张大紫脸消失了,Windows 7重见天日了!我可是啥都没改动啊!

难道安装Ubuntu时生成的grub.cfg真的有点小问题,再重新生成一次就好了?我将信将疑,再次启动,再次选择Windows,果然,大紫脸又回来了。

随后我又重新启动N多次,每次选择在启动项选择界面倒数读秒到不同秒数时切换到Windows 7启动项进入(别问我为什么会想到做这个尝试,因为连我自己也不清楚,我只是凭着一股勇气这么干了),结果发现了一个很难解释的规律,如果每次在读秒倒数只剩3秒时选择Windows 7启动项进入,就能成功进入Windows 7。

并且,根据大紫脸的现象,我认为是Ubuntu的grub不知何故,在把启动权转给Windows 7的引导程序时,却忘记了清屏(因为除了被大紫脸挡着外,Windows 7的一切都在顺利运行中)。考虑到14.04.1根本就不能识别显示卡,我认为不排除是T440p的显卡的Linux驱动程序依然有bug导致的。

不过眼下的问题依然还要解决,既然是和启动项倒数读秒时切换到Windows 7的时机有关,那我想如果我把Windows 7设为grub里的默认启动项,也即在启动时不需要去抓时机切换,只要静待10秒读秒走完,让其默认直接进入Window 7看是否能收获效果。

我在grub.cfg中把默认的启动项由0改为4,也即目前Windows 7所在的启动项,然后重新启动,结果成功进入Windows 7。一次成功没有说服力,之后,我又在各种情况下重新启动了20多次,全部都成功。问题解决。当然,尽管问题解决了,但困惑还在,因为直到现在我也不确定这个问题到底是什么原因导致的,功力不到,没办法。

记录下来,是希望如果有人(尤其是那些买了T440p电脑的)遇到同样问题,可以做个参考,也是给自己这番折腾的一个记录。

2014年11月4日补充: 导致大紫脸问题(同时也是导致安装CentOS 7后进入Windows登录界面时屏幕会诡异地闪两下)的原因已经找到,是由于Windows 7 64bit的Windows Updata程序在安装某些更新后,这些更新会与Windows 7的显卡驱动程序产生冲突导致的。解决办法很简单,在安装完所有更新后,重新再安装一遍显卡驱动程序即可。