秉亮的个人日志


在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.0和扩展包

分别下载VirtualBox 5.0 for Windows hosts和VirtualBox 5.0 Oracle VM VirtualBox Extension Pack。

增加扩展包后可以支持USB3.0,应该可以使安装过程更快(未测试)。

下载下来的文件应该为:

安装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的数据中转。所以这里我选择其他选项,你也可以省事选择默认选项。

1_install

在分区之前最好使用RMPrepUSB进行一下格式化,因为使用过的U盘容易出现各种问题,用Ubuntu分区就容易在分区之前或者之后多出那0MB或者1MB,虽然没有太大问题,但是分区表非常难看。

5_RMPrepUSB > 勾上设置分区不可启动,选择FAT32文件系统

下面是我的分区表的图:

2_partition

现在设备的最开始的地方建立一个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文件夹复制出来。

4_EFI

如果之前分区的时候你是用默认配置,那么你会发现电脑挂载了一个几百M的磁盘,直接打开它,然后把从iso里面的EFI文件夹复制到该磁盘中,与原有的EFI文件夹合并,并且将EFI/ubuntu/grubx64.efi复制到EFI/BOOT目录下替换原有的同名文件即可。做完这些步骤后最好把整个EFI文件夹复制并重命名为EFI.backup,以便以后可能启动表损坏了之后进行复原。

因为用了自定义的分区,所以只能挂载32G的大分区,而150M的启动分区则不能在Windows的资源管理器中显示出来,但是可以在Ubuntu中全部显示。所以我们接下去再使用虚拟机来进行复制工作。先把.iso文件中的EFI文件夹复制到32G的分区里面

3_sandisk > 只有一个32G的分区在资源管理器中显示

再次打开虚拟机,记得再次载入.iso。这次选择Try Ubuntu without installing。把U盘载入Ubuntu系统,可以在Devices中看到四个设备,进入33G的那个设备,把EFI文件夹(就是刚才复制到U盘中的文件夹)剪切到150M的那个设备中,将两个EFI文件夹合并,然后同样将EFI/ubuntu/grubx64.efi复制到EFI/BOOT目录下替换原有的同名文件即可。

6_copyEFI

关闭虚拟机。

至此,一个可以从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内核(安装驱动)

感谢rubiojrsurface3-kernel项目。 15.10使用neoreepssurface-pro-3项目。 更新内核需要键盘,但是type cover和蓝牙都不能用,所以需要一个USB hub,而USB键盘和鼠标应该都有吧。

14.04内核下载地址

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=10GRUB_TIMEOUT=1, 后面的数字可以是你想要的时间,不建议为0。

ctrl+s,关闭gedit

在终端里输入命令更新grub

sudo update-grub

关闭电脑,开机就可以看到效果了(蓝牙被我关掉了,所以图上没有,刚装完是会有的)。

7_final

最后我们就可以在Surface Pro 3上面愉快地使用Ubuntu了!

PS:

在查找修改grub的资料的时候顺便修改了一下Ubuntu的界面,自我感觉变得好看了许多,诸如终端透明啊,菜单栏透明什么的。触屏用Ubuntu爽的飞起,而且任务栏就放在左边,左手一伸大拇指随便点。

8_beautify