前言
随着微软对品牌电脑预装系统的大力控制,尽管win8不太被看好,但是UEFI的引导模式渐渐为人所熟悉。UEFI相对于传统BIOS的优势本文暂且略过,网上口舌之争者大有人在,就作者自己的情况来说,由于不想放弃预装的正版win8,所以坚定地UEFI一条路走到黑,探讨一下这种情况下debian的安装,其中主要解决了
1)installer grub黑屏
2)安装完毕加载内核时"loading initial ramdisk"卡住
两个问题。本文旨在以备忘流程的形式,记录安装时遇到的情况和相应的思考过程,以利将来重装或帮助遇到相同问题的朋友。由于linux开源系统本身的特性,作者不保证解决方案的普遍性;本文中借鉴的方法尽量注明出处,如有疏漏请广大朋友们指出,作者无意冒犯版权,会及时添加reference。最后,本文不是标准教程,说白了就是纯粹自己瞎折腾,所以如果有朋友用本文的方法造成任何个人财产损失或人身伤害,请自行承担责任,与作者无关,数据无价,回头是岸。
预备
上面提到作者决定坚守UEFI是因为不想放弃正版win8,其实潜台词就是这个预装的win8只能用UEFI引导启动。而在UEFI的电脑上安装linux确实是一个相对比较新的话题,作为linux UEFI的一些预备知识,广大朋友们尽可以从这里[1]获得。要折腾linux就不得不提一下电脑的型号和配置,因为关于linux的解决方案是否有效,硬件配置实在是有很大影响。
MSI GE70
CPU: Intel Core i7-3630QM
VGA: Nvidia GeForce GTX 660M/ 2GB GDDR5 & Intel HD4000
LED Panel: 17.3 Full HD 1920x1080
RAM: DDRIII 4GB
HDD: 750GB 7200RPM
硬盘默认是GPT分区,以便良好配合UEFI。这里插一句,其实BIOS+GPT和UEFI+MBR都是可以用的,只不过不太标准,会有些潜在的问题或者遇到问题不方便修复罢了,没有网上一些帖子叫嚣的UEFI必须配GPT,想要UEFI的话MBR就得全格掉转GPT,或者BIOS只能引导MBR之类的说法。配置中最让人抓狂的是这个双显卡并且BIOS里无法选择关闭其中之一(网上很多帖子都表示这一点给安装linux带来很大麻烦,驱动是个大问题)。当然作为游戏本,双显卡配置这是好事。但是作者自从第一次接触过debian之后,就为其自由纯粹的精神所感染,所以一定要在本上装一个。但由于一开始太菜,最多只能做到切换BIOS的引导模式到Legacy,然后进行安装,得到所谓的“双系统”:想要进win8,切换BIOS的引导模式到UEFI,正常启动进win8;想要进debian,切换BIOS的引导模式到Legacy,grub引导进debian。虽然说没有很费事,但是看多了BIOS那个蓝色界面还是觉得有点恶心,况且咱们自由的debian坚持不掺乎微软secure boot的垄断,并且官方表示早已支持UEFI安装和启动,所以作者决定不达目的不罢休,一定要搞个真正的UEFI win8 debian双系统试试。
安装 - Debian Installer崩溃
经过作者多次试验屡次重装反复揣摩重复观看教程XX次之后发现,在我这台笔记本上,UEFI且关闭secure boot的情况下,用官方安装镜像,不管是debian stable,debian testing,kubuntu live CD, ubuntu 12.4 live CD,无一例外地在初始grub界面上遇到了问题,即在这个界面无论选择install,graphic install,rescue mode或者try ubuntu之类之后,屏幕变黑,再也木有了反应,debian官方倒是提到了这个bug (Potential issues with UEFI booting on amd64),在这里[2]。看官方的建议是暂时也没什么好的方法,想装的话就只能切到Legacy。而网上几乎全部的帖子也都是建议先在Legacy模式下装,之后再用什么ubuntu下的boot-repair修改grub从而改成可以用UEFI引导。对于这一点,作者想说,我试了,我都试了,但是尼玛不管用啊,每次我从Legacy切回UEFI,主板内置的EFI固件都会抹掉之前注册过的bootloader,那可能有人会说,你先切回UEFI,然后再用live CD修复不就行了,对于这一点作者想说,我也想啊,可是尼玛UEFI模式下没有live CD能够跳过grub继续运行啊,别提后续的boot-repair了;于是又有人说作者弱爆了,没听说过grub的command line么,既然跳不过去grub,就跟丫死磕,开机就用UEFI引导,到了grub界面后祭出(参考itstuff博客文章)[3]
set prefix="(hdX,gptY)/boot/grub"
set root="(hdX,gptY)“
insmod normal
normal
之后,只见天地之间顿时电闪雷鸣,狂风大作,顿时中军大乱。。。。咳咳,刚才咱们说到作者弱爆了重生之后学会了一个技能,这个技能有四招,其中第一招是告诉grub我要从硬盘上哪里的grub启动,假设我们的root也就是”/“是挂在第X个硬盘(从0开始)的第Y的分区下(从1开始);第二招也就不用解释了,第三招和第四招作者表示没有深究,反正之后grub菜单里多了几个选项,就是当初丢失的硬盘上已经安装好的boot option,这下作者开心了,选了启动debian,结果屏幕又一次freeze了,这次是停在"loading initial ramdisk"再也不动了,作者于是又各种翻帖子,没有找到解决方法。作者思考后认为(其实后来想想也不对,应该还是显示设备驱动问题),一定是因为我是在legacy下安装的debian,所以kernel vmlinuz啊,initrd.img啊都得在uefi下重新生成才行,以适应grub-efi的引导。
被这个问题困扰了几天后,作者发现了一篇不起眼的帖子 (Win8+Gentoo双系统安装)[4],里面的"安装准备"提到了怎样解决grub界面黑屏:将安装镜像里的/boot/grub/grub.cfg里 terminal_output 后面的gfxterm修改为console,虽然是用在Gentoo上,但大家都是linux,并且他的电脑也是微星G系列,值得一试。然后用修改完重新打包生成的镜像安装即可避免黑屏,帖子的作者表示可能是独显驱动问题,并且还会有"cant't terminate EFI services"莫名其妙的提示,但不管怎样总算能在UEFI引导下进入正式的debian安装界面了,可喜可贺!
安装后-加载内核卡住
作者兴高采烈满心欢喜放开手脚一气呵成地装完了debian jessie amd64,grub-efi也探测到了win8的存在,重启进BIOS将debian的bootloader调到了第一个,再重启顺利自动进入grub2.0,这下作者开心了,选了启动debian,结果。。。结果屏幕果然freeze了,很熟悉是不是?是的!跟作者用弱爆了之后学会的方法的结果一模一样,卡在"loading initial ramdisk"!终究还是躲不过啊,痛定思痛,作者把"loading..."这句话放狗各种搜,无果,换各种参数,什么nomodeset,vga的,反正各种kernel参数都没用。不过由于翻了大量的askubuntu的英语帖子和help ubuntu的法语帖子,发现不少人推荐用rEFInd这个bootloader来替代grub(说实话作者对linux启动的机制不是特别清楚,打算在学习linux的过程中一点点来学习),说可靠性和智能程度都比grub高,作者看了一下它的官网(The rEFInd Boot Managar)[5],软件介绍很详细,安装和使用都不难,另外有很多关于UEFI和linux启动的知识,作者表示真的是受益匪浅。于是作者在win8下(作者当时只有win8,还有其他安装方式,查看官方安装教程即可)用管理员权限的cmd把rEFInd的文件拷到了EFI分区内(rEFInd官网安装教程)[6],并且用bcdedit将之注册进EFI启动系统里。重启进BIOS将rEFInd调到了boot顺序第一个,再重启
顺利自动进入rEFInd,不得不感叹这玩意确实很智能,硬盘上存在的efi boot loader它都检测到了,一字排开,什么win8的,grub的,默认windows的,这下作者开心了,选了grub,结果。。。结果进入了grub2.0,这下。。。这下不就又要重复悲剧了么,于是作者重启,再次进入rEFInd,这回作者注意到最后一个选项”Boot boot/vmlinuz-3.12-1-amd64 from 94GiB ext4 volume“,这意味着什么呢,这意味着这货探测到了我/boot下的linux内核,它可以不经过grub直接加载!作者果断选了这项,屏幕没有卡住,一行行文字扫过屏幕,最后见到了久违的gnome3桌面,成功登录debian了!
后记
经过这次折腾,作者自认为linux功力又有所长进,特别是关于uefi以及硬盘分区等的知识积累了不少,另外第一次尝试用live CD启动,这可以当作是为以后紧急修复系统做的热身。另外说说debian jessie,本来作者一直都是用stable的,但是后来看了这篇文章(debian 系统版本 划分、识别、演进 的释疑(升级系统须知))[7]之后觉得作为个人桌面系统,testing应该不是什么事儿,于是就下了jessie的镜像来装。事实证明jessie带的这个kernel对我的笔记本硬件支持不俗,先是准确识别了杀手网卡(之前用stable 3.2内核的时候可是自己编译网卡驱动的),然后对独显的optimus支持表示不在话下(optimus是nvidia显卡的智能运行模式吧,就是普通使用时关闭独显用集显,需要独显运行大型图形计算任务的时候再自动开启,运行完自动关闭,这个功能在windows下只要装了nvidia的官方驱动可以很容易实现,但是在linux下就不行了,之前stable 3.2内核的时候只能靠bumblebee来管理,否则独显放在那开着也不用,又耗电又产热)。总之虽然jessie还在testing阶段,但作者表示用得很开心。另外就是作者对grub2真的是有些失望,毕竟它是debian官方带的啊,可是居然有各种问题。
PS:
这次折腾中作者仍然对一个现象表示困惑,那就是在installer阶段,如果在UEFI模式下开了secure boot,那么除非得到了微软key的认可,否则无论啥玩意儿都会被主板拒绝加载的,但是呢,如果有linux安装镜像得到了认证呢,是的,ubuntu和fedora都购买了这个认证,作者在试验live CD的时候,偶然间在打开secure boot的情况下成功加载了,也就是说原版镜像不做修改,没有黑屏,没有卡住,就真的在UEFI模式下进入了ubuntu live CD的桌面!而如果不开secure boot,同样的live CD就一定会在grub界面黑屏!真是匪夷所思,这说明grub本身可能并没有太大的硬伤,还是笔记本主板本身的EFI implementation在提供EFI 驱动的时候有猫腻,微软和MSI联合起来在主板的固件里肯定是做了手脚的。后来作者又发现了grub2的一个archlinux的wiki页面(这里)[8],打算研究研究看能不能找到些线索。换个角度来讲,如果你想打造一个UEFI模式的win8和linux双系统又不想折腾的话,那么选个支持UEFI和secure boot的发行版就好了,比如ubuntu。但是作者本身对ubuntu真的不感冒,虽然作者是新手,按理来说ubuntu作为新手入门很合适,但是谁让作者先遇到了debian呢,尽管难上手,但是这种一见钟情,是吧,你懂的。(有人说,作者你弱爆了,debian难上手?呵呵~作者确实弱爆了,但是每个人都得从弱爆了慢慢成长吧,是吧~)
作者最后觉得,入了linux的门,就要作好折腾的心理准备,在折腾中真的能学到很多东西,另外这种怀着疑问,抱着决心,一点一点探索最后解决问题的过程,相信也是最吸引广大linux爱好者的地方之一。作者表示要继续折腾下去,也希望和广大朋友们一起交流。
[1] http://www.rodsbooks.com/linux-uefi/
[2] http://www.debian.org/devel/debian-installer/errata
[3] http://itstuff.the-zabala.net/2013/08/dual-boot-debian-7-wheezy-on-existing.html
[4] http://my.oschina.net/std/blog/191521
[5] http://www.rodsbooks.com/refind/
[6] http://www.rodsbooks.com/refind/installing.html#windows
[7] http://my.oschina.net/emptytimespace/blog/84076
[8] https://wiki.archlinux.org/index.php/GRUB_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
注:以上图片上传到红联Linux系统教程频道中。