在U盘上安装Ubuntu(Surface Pro3)
使用此方法不会影响Surface Pro3的Windows环境,不占用任何SSD空间,不修改SSD启动项。
2015-07-28 | 2016-01-06
2016/01/06更新系统至Ubuntu 15.10
现已经更新到15.10,各种支持几乎完美,wifi非常稳定,typecover摘下再插上也没有任何问题,已作为SP3的主力系统在进行使用。下文中15.10对应的更新和不同会用粗体标出。
我有一台Surface Pro 3 128gb版本,因为需要同时使用Windows环境和Ubuntu环境,所以我需要在默认基础上安装Ubuntu。但是因为SSD容量太小,而且并不想让修改Surface Pro3的启动项等等,所以最后决定制作一个独立的U盘Ubuntu系统。但是谷歌搜索U盘Ubuntu系统得到的大多是USB live这种的,而这种系统不会在U盘上保存任何信息,而我需要的是一个正常的Ubuntu系统,可以保存我安装的程序,文件等等。
在整个过程中经历了很多困难,包括用U盘重刷了整个Surface,安装Ubuntu驱动等等。所以在这篇博客的第一篇上我准备记录一下自己的步骤,给有同样需求的人以借鉴。
安装Ubuntu系统
准备
一个8G以上的U盘。建议16G以上,USB3.0(如果要进行编译等工作肯定需要一个大的磁盘空间,而且要获得良好的系统体验的话磁盘速度也很重要),我先是使用SONY晶雅16G安装成功,这次教程使用Sandisk CZ80 64G进行示范。现在cz80因为太长,插在USB口移动不方便,已经给了做设计的女票,换成了Sandisk CZ43 64G。
Ubuntu 14.04.2 LTS 64位安装包(.iso)
Ubuntu 15.10 64位安装包(.iso)(推荐使用)
必须是64位不然不能用EFI启动。本文后半部分安装驱动的情况是以LTS版本为例,如果安装其他版本的Ubuntu可能需要自行编译Linux内核。
分别下载VirtualBox 5.0 for Windows hosts和VirtualBox 5.0 Oracle VM VirtualBox Extension Pack。
增加扩展包后可以支持USB3.0,应该可以使安装过程更快(未测试)。
下载下来的文件应该为:
- ubuntu-XX.XX-desktop-amd64.iso
- VirtualBox-5.0.0-101573-Win.exe
- Oracle_VM_VirtualBox_Extension_Pack-5.0.0-101573.vbox-extpack
安装VirtualBox和扩展包
先安装VirtualBox再安装扩展包,一路下一步,安装完即可。
配置虚拟机
新建一个虚拟机,名称随便填,版本选择Ubuntu (64-bit),Surface Pro3是支持虚拟化和64位的,如果你在这里只能看到(32-bit),而没有(64-bit)的选项,则搜索一下解决方案,这里不具体列出。
勾选了Ubuntu (64-bit)后点击下一步,内存大小默认就行,虚拟硬盘选择不添加虚拟硬盘(稍后解释)。然后点击创建就可以了。
选中新建的虚拟机,点击设置:
系统->主板->扩展特性,勾选“启用EFI(只针对某些操作系统)”;
存储->控制器,在光驱处载入下载的ubuntu安装包镜像。
USB设备,勾选“启用USB控制器”,点选“USB 3.0 (xHCI)控制器”,在右边筛选增加U盘,使用Sandisk CZ80时这里显示的是“SanDisk Extreme [0010]”,你自己的U盘可能有不同的设备名,请注意识别,可以比较一下插上和拔下U盘的USB设备列表。建议在进行下一步之前备份U盘的数据,也可以进行简单的格式化。
然后点击确定。
使用虚拟机安装Ubuntu
启动配置好的虚拟机。
稍等过后就会出现GRUB菜单。
选择Install Ubuntu并回车。
等待Ubuntu的载入画面结束后就进入安装向导了。
语言我这里选择了中文,然后断开网络连接(这样安装速度会更快),点击继续。
在安装类型这个界面可以选择默认选项或者选择其他选项。默认选项则会由Ubuntu自动给你分区,其他选项可以自己进行分区。64G全装Ubuntu不免显得有些浪费,所以这里我准备分出32G来当做普通的U盘使用。Ubuntu 15.10安装时无法使用本文分出32G来做U盘的方法,因为无法复制启动文件到对应的efi分区(windows和ubuntu都无法读取)中,所以安装的时候我使用了全部的磁盘空间,这样efi分区则可以被windows读取进行修改。这种情况下我使用主机的TF卡槽进行windows和ubuntu的数据中转。所以这里我选择其他选项,你也可以省事选择默认选项。
在分区之前最好使用RMPrepUSB进行一下格式化,因为使用过的U盘容易出现各种问题,用Ubuntu分区就容易在分区之前或者之后多出那0MB或者1MB,虽然没有太大问题,但是分区表非常难看。
> 勾上设置分区不可启动,选择FAT32文件系统
下面是我的分区表的图:
现在设备的最开始的地方建立一个32GB大小的fat32分区,然后挂载到/windows目录下。此方法15.10无效,此后不再注明。如使用15.10及以后系统请直接使用所有磁盘空间,并把EFI设为第一个分区。
为什么要在设备的最开始的地方建立32G的fat32分区?
因为windows系统识别U盘的时候只能识别第一个能识别的分区,如果把EFI启动分区作为第一个分区,那么windows就只能把第一个分区挂载到系统里,而我想要挂载32G的分区用来当U盘。虽然只能识别一个分区,不过这也有一个好处,在USB病毒泛滥的打印店等我们就不用担心病毒会对EFI启动分区做什么手脚了。
然后在空余空间建立一个150MB的EFI启动分区,如果使用默认配置这个分区一般会有几百兆,但是我们仅仅装单系统,所以不用很大。
接着在空余空间的末尾建立2G的交换空间,再把剩下的所有空间都设为ext4分区,挂载到/目录下。
这样就完成了分区的工作,点击下一步。
选择好地区,语言和用户名等信息后就开始安装即可。在计算机名那里我把-Virtualbox改成了-Ubuntu(可选)。
等待系统安装完毕,CZ80只要不到5分钟,如果你的U盘比较慢或者没有安装VirtualBox扩展包的话那么可能要等待很久。我在用公司电脑装的时候还出现神秘报错,查错了一下午后来发现是前面板电流太小,就把前面板插着的手机拔掉就一切正常了。
然后点击重启键后关闭虚拟机即可。
至此Ubuntu就被安装到我的U盘之中了,不过要启动它还要一番功夫。
修改EFI Boot
用7zip或别的解压缩软件打开ubuntu-XX.XX-desktop-amd64.iso,或者直接挂载到虚拟光驱,把里面的EFI文件夹复制出来。
如果之前分区的时候你是用默认配置,那么你会发现电脑挂载了一个几百M的磁盘,直接打开它,然后把从iso里面的EFI文件夹复制到该磁盘中,与原有的EFI文件夹合并,并且将EFI/ubuntu/grubx64.efi复制到EFI/BOOT目录下替换原有的同名文件即可。做完这些步骤后最好把整个EFI文件夹复制并重命名为EFI.backup,以便以后可能启动表损坏了之后进行复原。
因为用了自定义的分区,所以只能挂载32G的大分区,而150M的启动分区则不能在Windows的资源管理器中显示出来,但是可以在Ubuntu中全部显示。所以我们接下去再使用虚拟机来进行复制工作。先把.iso文件中的EFI文件夹复制到32G的分区里面
> 只有一个32G的分区在资源管理器中显示
再次打开虚拟机,记得再次载入.iso。这次选择Try Ubuntu without installing。把U盘载入Ubuntu系统,可以在Devices中看到四个设备,进入33G的那个设备,把EFI文件夹(就是刚才复制到U盘中的文件夹)剪切到150M的那个设备中,将两个EFI文件夹合并,然后同样将EFI/ubuntu/grubx64.efi复制到EFI/BOOT目录下替换原有的同名文件即可。
关闭虚拟机。
至此,一个可以从U盘启动的Ubuntu系统就制作完毕了。
进入Ubuntu
Surface Pro 3可以参考: > 微软官网手册
完全关闭电脑后,插上制作好的USB Ubuntu系统盘,按住音量减小键,按下并释放电源键,当显示Surface徽标时,释放音量键小键,就启动了U盘上的系统。
也可以按住把上面的流程中的音量减小键全部替换成音量增大键,进入类似bios的界面,Configure Alternate System Boot Order选项从SSD Only改为USB -> SSD然后保存并退出。然后就可以重启进入Ubuntu系统了。
正常情况下就直接进入系统了,如果出现只有grub的黑色画面则检查32G那个分区里的EFI文件夹是否还存在,如果存在的话则删掉它。
但是光这样的话还有很多使用上的问题,比如最重要的,type cover无法正常使用。如果要正常使用这些功能的话,则需要更新一下Ubuntu的内核。
更新Ubuntu内核(安装驱动)
感谢rubiojr的surface3-kernel项目。 15.10使用neoreeps的surface-pro-3项目。 更新内核需要键盘,但是type cover和蓝牙都不能用,所以需要一个USB hub,而USB键盘和鼠标应该都有吧。
15.10内核下载地址 Google Drive需要翻墙
14.04把所有带有3.16.0的.deb包下载到本地。这些.deb包都是已经编译好了的,直接使用即可,如果Ubuntu版本不是14.0.2 LTS的话可能需要按照surface3-kernel的编译步骤来编译出需要的deb包。15.10则可以直接下载15.10内核下载地址Latest (Torvalds Tree)文件夹中的所有.deb包
把下载下来的4个.deb文件放到一个新建的kernel文件夹中,用各种方式(boot分区中转,空余容量中转,或者拿另一个U盘来中转)拷到用户主文件夹下。
除了内核还可以增加对触摸板的支持,并进行蓝牙/Wifi固件的安装。这两个都很简单,按照surface3-kernel下面的Touchpad support和Bluetooth/Wifi说明操作即可。不过无线还有不稳定的情况。15.10则不需要安装触摸板支持和蓝牙wifi固件,内核装完重启就可以了。
然后Ctrl+Shift+T打开终端,逐条输入命令
# 安装内核
sudo dpkg -i kernel/*.deb
sudo update-grub
# 增加触摸板支持
sudo cp -i xorg.conf /etc/X11/xorg.conf
# 蓝牙/Wifi固件安装
sudo cp mrvl/* /lib/firmware/mrvl/
# 重启
sudo reboot
重启之后会发现多了紫色背景的启动项选择界面。
在启动项里面选择Ubuntu 高级选项->Ubuntu, Linux 3.16.0-rc6-surface3即可使用type cover了。(不过有个bug,type cover在开机状况下拿下来再装上去就无法使用了。)wifi连不上时先关机再开机一般可以解决,直接重启有时会有问题。Ubuntu 15.10使用高级选项第一个即可。
设置新内核为默认选项
打开终端,输入命令
sudo gedit /etc/default/grub
修改GRUB_DEFAULT="0"
为GRUB_DEFAULT="1>2"
,这表示第二个选项的子目录的第三个选项即”Ubuntu, Linux 3.16.0-rc6-surface3”(从0开始计数),15.10则是GRUB_DEFAULT="1>0"
。
这里有可能选项位置会有变化,比如我这里几天后更新系统之后就更换了位置,从第三个变成了第五个,响应更改GRUB_DEFAULT的值为1>4即可,这里的要选名字为Linux 3.16.0-rc6-surface3的那个。改完之后不要忘记更新grub。评论有说可以使用apt-get autoremove,没经过测试,不过remove一下没有任何坏处。
在GRUB_HIDDEN_TIMEOUT=0
前加上”#“注释掉该行
修改GRUB_TIMEOUT=10
为GRUB_TIMEOUT=1
,
后面的数字可以是你想要的时间,不建议为0。
ctrl+s,关闭gedit
在终端里输入命令更新grub
sudo update-grub
关闭电脑,开机就可以看到效果了(蓝牙被我关掉了,所以图上没有,刚装完是会有的)。
最后我们就可以在Surface Pro 3上面愉快地使用Ubuntu了!
PS:
在查找修改grub的资料的时候顺便修改了一下Ubuntu的界面,自我感觉变得好看了许多,诸如终端透明啊,菜单栏透明什么的。触屏用Ubuntu爽的飞起,而且任务栏就放在左边,左手一伸大拇指随便点。