自从多年前,曲线救国在 MacBook Pro 上没使用 BootCamp 而把 Windows 7 安装运行起来,就意识到了 MBP 的固件引导部分对可引导的系统识别度很高,从而有了一个比较执着的念头:再装系统,就要达到互不依赖、互不干扰的程度,换硬盘即可换系统。
前几天开始,存了想法把 Linux 装到上头。Linux 一直用的不多,也就虚拟机里装过几次 Ubuntu(fedora 也装过一两次),所以不熟里面挑最熟的,还是选择了 Ubuntu,用它的 14.04 版本。
老黄历告诉我,苹果的设备,最痛苦的一关就是引导,所以在安装之初,我就想了个主意,通过虚拟机来把系统安装到硬盘上,而不是用可引导的 Ubuntu 安装盘(后来的测试证明,这条路在新一点的设备上应该也可以)。
三太爷的 MBP 是 2008 Late 的型号,光驱已经被硬盘托架代替,所以机器里有两块硬盘。在改装的时候,就考虑到折腾的便利性,所以把 OS X 系统所在的盘从原来的硬盘位挪到了光驱位,而 Windows 系统所在的盘安装到了原来的硬盘位上。这样就可以在保证 OS X 作为上层公民不被经常打扰的前提下,随便倒腾第二系统,而且只需打开电池仓后盖即可操作,无需打开整个后盖。
在 Windows 下的虚拟机向另一块独立的硬盘上安装 Ubuntu 面临两个问题:第一是,这需要把光驱位的 OS X 盘取出,比较麻烦,打破了之前的规划;第二是,由于三太爷自己的正版计划,Windows 里是一个 VMWare Player,而不是 VMWare WorkStation。尽管 VMWare 对 Player 产品做过功能改进,把最开始的不支持创建新的虚拟机的限制去掉了,但是是否可以创建一个以物理磁盘作为虚拟机磁盘的虚拟机,咱心里没底。但 OS X 上的 VMWare Fusion 则是三太爷白花花的银子买回来的正版,完成这一任务应该不费吹灰之力。于是,把电池仓盖打开,Windows 硬盘取出,换上了一块空白盘。结果用 Fusion 创建虚拟机的时候,还是遇到了挑战,根本没有可以选择物理磁盘作为虚拟机磁盘的地方。在网上遍寻资料,终于找到了解决方案。
以下为其操作步骤。
1、在系统的磁盘工具中,选中该硬盘后点击“信息”,记录“磁盘标识符”(三太爷的显示为 disk0)和“连接总线”(三太爷的显示为 SATA)两个信息;
2、用 VMWare Fusion 创建一个虚拟机(指定用 Ubuntu 的 ISO 作为安装映像),创建结束后,不要启动虚拟机;
3、到设置中把虚拟硬盘移除;
4、退出 Fusion;
5、打开终端,在命令行创建一个实际使用目标物理硬盘的虚拟硬盘:
/Applications/VMware\ Fusion.app/Contents/Library/vmware-rawdiskCreator create /dev/disk0 fullDevice /Users/dandy/Documents/Virtual\ Machines.localized/Ubuntu64-14.04.1.vmwarevm/hardDisk SATA
详细解释:vmware-rawdiskCreator 是 VMWare Fusion 自带的一个命令行工具(前面是其所在路径,如果安装到了别的路径请相应更改);create 为该工具提供的创建新的虚拟磁盘的命令;/dev/disk0 是指定了要创建的虚拟磁盘所使用的物理磁盘(/dev/ 后面的部分要用步骤 1 中记录下来的磁盘标识符,此处即是 disk0);fullDevice 表示是要使用整块物理磁盘,而不是其中的某个或者某些分区(当然它是支持的,只不过不适合此处的场景);接下来是指定要创建的虚拟磁盘文件的路径和文件名,上面的命令直接把文件创建到了目标虚拟机所在的目录里,这样做的好处是后面修改虚拟机配置时,指定磁盘文件不需要写路径部分;最后的 SATA(也就是步骤 1 中记录的值)是连接物理磁盘的总线类型;
6、进入到虚拟机所在目录,用文本编辑工具打开 .vmx 文件,把下面的内容粘贴到其中,然后保存,即可把新创建的虚拟磁盘加入到虚拟机里:
sata0:2.present = “TRUE”
sata0:2.fileName = “hardDisk.vmdk”
详细解释:sata0 后面的数字之所以是 2,是因为原来文件中已经存在有 0 和 1 两个设备了。如果你要参照此步骤执行,请根据自己的实际情况相应更改,顺着已有的数字顺序排就对了;文件名则要和步骤 5 中生成虚拟磁盘文件时指定的文件名保持一致,如果该文件不在虚拟机所在的路径下,请指定为全路径;
7、打开 Fusion,启动虚拟机,正常安装 Ubuntu。
以上步骤主要参考了:http://www.somerandomstuff.com/2014/01/18/vmware-fusion-adding-a-raw-physical-disc/。
如果你的设备不是和三太爷一样的老古董,那很有可能必须恭喜你一下,现在重启机器(不是指虚拟机),听到“当”的一声后立即按下 Option 键,新出现的可引导的系统(名字也许不叫 Ubuntu,反正我的就显示的是 Windows,估计和之前此盘位上是 Windows 系统有关)说不定就可以好好的工作了。如果你和三太爷一样,沮丧地发现系统不能正常启动,请继续往下看。
在三太爷的机器上,这一步的结果是这样的:全屏幕显示为 Ubuntu 启动时的紫色,没有任何信息输出,死机了。没有信息就没有头绪,没有头绪如何解决问题?所以第一步就得整出点信息来。最先想到的就是不把系统引导到图形界面下,而是文本界面下。很遥远的记忆里,要和个什么 inittab 文件打交道,貌似是甚么 run level 设置项。一搜之下,发现目前的网络上信息混杂,几无定论,只好择其貌似善者而试之。于是以下方式入选(参见:http://forum.ubuntu.org.cn/viewtopic.php?p=3070982):
第一步:
一、查看文件 /etc/init/rc-sysinit.conf,在第 14 行附近:确认“env DEFAULT_RUNLEVEL=2”。2 是新装系统默认的,确保没被修改。
二、编辑文件 /etc/init/lightdm.conf,在第 12 行附近,原句“ and runlevel [!06]” 改为“ and runlevel [!026]”。
第二步:
编辑/etc/default/grub,把
GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash”
改成
GRUB_CMDLINE_LINUX_DEFAULT=”text”
其实只要把”quiet splash”修改为其它字符就可以了,这是系统启动时 Ubuntu 那个 LOGO 和下面那个闪动的小亮点。
别忘了执行 update-grub。
第三步:
想进入 X,直接 startx,绝对装 B 利器!
当然,由于真机无法顺利引导,这些配置都需要重新回到 OS X 中,到 VMWare Fusion 中把虚拟机启动之后进行修改。
1、虚拟机中重启到文本模式成功(期间,为了保证 x server 不会被加载,还把 /etc/rcS.d 下的 S70x11-common 改了名,S 变成了 K )。重启到真机下,能看到启动时的文本信息一直在滚动,但是显示到添加 Swap 之后,屏幕上所有字符整体高亮,光标不再闪烁,死机;到虚拟机里再启动,发现此步之后会立即显示“piix4”有关的一串信息,为了确保不是它有问题,先用 lsmod | grep piix4 将准确模块名称显示出,然后到 /etc/modprobe.d/blacklist.conf 文件末新增了 blacklist i2c_piix4 语句将之屏蔽。虚拟机重启,该行出错信息消失;真机重启测试,死机依然(参见:http://www.linuxidc.com/Linux/2013-07/87365.htm);多次测试,从死机时屏幕突亮,以及虚拟机内的屏幕分辨率在该时间点发生变化的情况推断,认为还是显示驱动被加载起来了在作怪,到 /etc/default/grub 中,把 GRUB_TERMINAL=console 语句放开,重启后屏幕为标准的 80×24 文本模式(系统最开始会显示一条警告,说没有视频模式被激活),死机依然(但光标不死了,闪的挺欢);
2、回到虚拟机中测试。在死机的时机点上,明显发生了分辨率的变化,即使是非图形界面下也是,看来启动过程中系统要调整文本模式的分辨率。经过搜索,知道那是 132×50 的一个模式。不是 Linux 熟手,得病乱求医,到处查找可能导致分辨率调整的配置。在 /etc/init 目录下,有几个 console 打头的 .conf 文件,对 console-font.conf 里面的内容全部做了屏蔽,重启发现只是字体不会改变了,分辨率仍然会切换;又到 /etc/default 里发现个名叫 console-setup 的文件(文件内的注释说是和一个叫 setupcon 的工具有关),把里面的 SCREEN_WIDTH=80 和 SCREEN_HEIGHT=25 的语句放开,也没用,怀疑这个文件并不控制启动过程中的文本模式(其第一条配置 ACTIVE_CONSOLES=/dev/tty[1-6] 应该也说明了这个事实);
3、几乎所有的可以针对文本模式的设置都试过了,没有作用。只好退回开始,想是不是可以考虑把正确的显卡驱动集成到 ISO 里,然后从新安装。在搜索的时候,发现了介绍如何在 Ubuntu 中安装 nVidia 显卡驱动的文章(http://www.howopensource.com/2012/10/install-nvidia-geforce-driver-in-ubuntu-12-10-12-04-using-ppa/)。于是引导进入虚拟机中,按照步骤安装,完成后立即关闭虚拟机并引导真机。一举成功,文本模式登录界面出现,可以正常登录,且 startx 命令可以把图形界面启动起来。只是这个图形界面的桌面上,全局菜单栏是空的。另外,无线网络和声卡不能正常工作,这些都需要解决。
4、之前使用 Ubuntu,大版本升级后遇到过空桌面的情况,把 ~/.config 移走就好了。这回也以为是什么类似的配置问题,但多次尝试,并苦苦查找资料,都没有结果。桌面不正常还有一个副作用,就是导致原本想在菜单栏上操作无线网络连接和声音的计划也无法执行,于是硬着头皮在命令行下搞无线网卡(有线网卡插上网线测试已经可以正常工作)。文本模式登录界面显示之前,在一闪而过的屏幕上隐约能看到 wireless.kernel.org 和 b43 的字样,于是按此搜索,找到了 http://wireless.kernel.org/en/users/Drivers/b43?action=show&redirect=en%2Fusers%2FDrivers%2Fbcm43xx;按照其中描述执行了 sudo apt-get install firmware-b43-installer 命令,重启后发现无线网卡已经驱动起来了,但是不能选择连接网络;同时声卡貌似也可以进入工作状态,但是不发声音。
5、经过多种尝试无效后,决定把系统调整回自己启动后就进入图形界面的模式(即把前述第一步、第二步,以及其后的 1、2 中的改动除 piix4 那个之外全部撤销)。然后重启就发现,一切都好了:全局菜单出现了、声音能出来了(登录就有声)、无线可以连接网络了。把输入法配置了一下,能用拼音输入了,但下载安装了的搜狗输入法不知为啥出不来。折腾就此告一段落。
图形界面出来之后的折腾,显然与中了第三步中所描述的“图形、文本两相宜”的毒有关。不过,用 startx 运行起来的图形界面,竟然与直接引导进入的图形界面功效不同,连菜单栏都是空的,还是出乎三太爷的意料。推测应该是某些程序没起来,要么是没有运行它们,要么是运行它们时没有适当的权限。但这个结果很明显对用户非常不友好,对像我这样的 Linux 新手来说,一头雾水而不知从何查起,就更是糟之糕也。
最后,需要补充些信息。
1、Ubuntu 官网已经提供了用它的安装光盘映像如何制作一个可以在苹果设备上引导的 U 盘,经实践,该盘确实可以引导。但是引导是否可以成功,则不一定;
2、在这台老的 MacBook Pro 15″ 2008 Late 上,引导失败,现象是死机,也就是说,这个盘不能解决上面这一堆复杂步骤才解决的问题;
3、在朋友的 MacBook Pro 13″(大概是 2011 年的机型),则可以进入图形界面,但是有可能不定期死机;
4、在三太爷的 MacBook Air 11″ 2014 上,则运行完全正常;
5、把上述安装好的 Ubuntu 硬盘取出,置入移动硬盘盒中,用 USB 连接线连接到 MBA 上,开机按 Option 能出现在引导列表中,但选择后引导失败,证明它不是一个可以随意移动的可引导系统;当然,更令人惊讶(和沮丧)的是,它甚至都不会出现在 MBP 的引导列表中。
永久链接
太折腾了,耗费那么多时间和精力,以老汉的江湖地位,直接买台新本装的成本相对更低