DreamCity

愿你有一天,能与你最重要的人重逢

这篇博文是在 Ubuntu To Go 上编辑的。

很久没有什么 Excited 的东西了。

最近经常逛段子网站知乎刷 Timeline,想在无聊时找点乐子,同时看看能不能找到一些专业的文档等提高一下我的姿势水平。然后,一篇专栏文章就吸引住了我的眼球:制作 Legacy BIOS / EFI 双启动的 Ubuntu To Go 启动盘

WTF is XXX To Go?

在 Windows 8 时巨硬提出了 Windows To Go 的概念,它能把 Windows 8 及更高版本的 Windows 安装在一个不小于 16G 的 U 盘中。然而因为种种原因,这个功能一直都只是个花瓶。

理论上,所有操作系统都可以制作随身系统盘——只需要把一个大小合适的 U 盘当作硬盘使用正常安装操作系统就可以了。但是这样做有一个不好:要么不滋磁 Legacy 启动,要么不滋磁 EFI 启动。这就非常尴尬了,因为一些老电脑还在使用着 Legacy 方式启动,但是 EFI 是未来的潮流。虽然说也可以在 BIOS 中将 EFI 调成 Legacy 方式启动,但是那样就不能正常引导使用 EFI 的系统了。而每次都这样调整的话也未免太麻烦了。这个时候 Windows To Go 的优点就体现出来了——既滋磁 Legacy,又滋磁 EFI,方便的很。

那么,有没有办法制作一个既滋磁 Legacy,又滋磁 EFI 的随身启动盘(我叫它 To Go 系统盘)呢?也不是不可以,比如马上就要说的——Ubuntu To Go。

Features?

其实 Ubuntu To Go 这名字不是我取的,而是那篇专栏文章的作者从 Windows To Go 那儿借鉴来的。顾名思义,就是可以跑在可移动存储设备上的 Ubuntu。但是相较于 Windows To Go,Ubuntu To Go 有如下的优点:

  1. 体积小。相比于 Windows 动辄 10G+ 的体积,Ubuntu To Go 系统占用的磁盘空间就小太多了,仅 5.5GB*。这样的话 8GB 的 U 盘也能装上,岂不美哉?
  2. 不需要进行多次硬件配置。Windows To Go 在不同硬件计算机上启动可能会出现再次配置硬件的画面,比较浪费时间,但 Ubuntu To Go 不需要。(摘录自知乎专栏)
  3. 免费!免费!免费!
  4. 知乎专栏原文貌似没提到, 在磁盘空间充足的情况下可以缩小系统盘分区大小,把多出来的空间单独划一个 NTFS 格式的分区出来,可以继续当 U 盘使用。

*系统为 Ubuntu 17.04 LTS,amd64

理论上来说所有 Linux 发行版都是可以制作 To Go 系统盘的,但是方法可能不同。这就要各位慢慢摸索了。

So, how to do it?

在开始之前,你需要准备如下物品:

  1. 一台能够联网的电脑,内存最好不低于 4GB,最好支持硬件虚拟化。
  2. VMware Workstation Pro,Player 是不行的。
  3. Ubuntu 的安装镜像,这里用的是 17.04 LTS-amd64。
  4. 你的脑子

首先创建一个「自定义」配置的虚拟机。

在选择系统安装镜像的时候,最好选择「稍后安装操作系统」。虽然选择「安装程序光盘」或「安装程序光盘镜像文件」可以免去后面再选择虚拟光驱加载镜像的步骤,但是 VMware 会自动识别系统为 Ubuntu 然后采用简易安装。这样做就不能达到我们的目的了。

接下来选择系统当然是选择 Ubuntu!内存建议选择 2GB,并不是说虚拟机内存低于这个数就没戏,但是会让你感受到痛不欲生的卡顿,这也是为什么我建议你电脑内存最好不小于 4GB 的原因。网络随便,我选的是桥接。

接下来的磁盘设置就比较重要了。这是决定你的系统安装位置的设置项。I/O 控制器种类选择 LSI Logic,磁盘类型选择 SCSI,磁盘选择「使用物理磁盘」。然后要选择物理设备。这里必须小心谨慎一点,不要像我一样一不小心就把我爸笔记本的板载存储给格了(雾)。这里我的 U 盘是被识别为了 PhysicalDrive 1,在你的电脑上可能会有所不同。使用情况选择「使用整个磁盘」。

在虚拟机即将创建完成,确定虚拟机配置的时候,点击「自定义配置」,在「新 CD/DVD」配置项中选择「使用 ISO 映像文件」并选择你下载好的 Ubuntu 系统安装镜像。

好,发车吧!

启动虚拟机,在开机出现 VMware 的 Logo 的时候迅速按下 F12 进入 BIOS 调整启动顺序,把光驱调到硬盘之前。

F10 保存退出。重启后即可看到熟悉的 Ubuntu 安装界面。

这个时候注意下,因为待会儿要搞事情,所以这里要选择「试用 Ubuntu」,在 LiveCD 中操作。

进入 LiveCD 后先点击右上角,选择「系统设置」,然后「显示」,把分辨率调整到一个合适的大小,否则因为 VMware 这蛋疼的监视器特性,安装时你八成不会看到完整的分区界面。选择合适的分辨率后拖动窗口,右下角的按钮就是「应用」。

然后就可以双击桌面上的「安装 Ubuntu」启动安装向导了。一路 Next 下去,不过在选择安装类型的时候要选「其他选项」。在分区的地方停顿一下。分区还是比较重要的。

一般来说全新的 U 盘都会有一个 FAT32/NTFS/exFAT 分区,把这个分区删掉。在磁盘前部建立一个大小为 200MB 的 FAT32 分区作为 EFI 分区,必须是主分区,挂载点为 /boot/efi。然后建立根分区(挂载点为 /),这个分区也必须是主分区。你可以按你的喜好来配置根分区,我的建议是分区大小不小于 10GB,分区格式为 EXT4。你也可以按照个人喜好给 /usr/home/var/tmp 等目录单独划分分区。如果你的 U 盘容量比较大,可以在磁盘后部留下一点空闲的空间,安装完成后把这部分空间单独划分出一个 NTFS 分区来,你的 Ubuntu To Go 系统盘还能继续当 U 盘使。

在这停顿!在点击「现在安装」之前,你必须先确认一下你的分区配置是否无误。虽然后面还有 3 个步骤,但是你不能返回重新配置。

如果你确定你做好了分区,那么就点击「现在安装」进行下一步的配置。一般来说也是一路 Next 下去,设置一下个人信息就好了。

在点击「继续」前,你还有最后一次检查设置的机会。如果确认设置无误,点击「继续」即可正式开始安装。因为 U 盘的读写性能比较低而且虚拟机有性能损耗,安装过程会比较长,不过一般都会在一个小时内结束。

注意一下,因为要调整虚拟机设置,所以安装完成后不要点击「现在重启」,而是点击「继续试用」然后通过右上角关机。

关机后打开虚拟机设置,将「选项」选项卡中「高级」设置项中的「通过 EFI 而非 BIOS 引导」选中,然后点击「确定」。

再次打开虚拟机进入 LiveCD。这次不是直接进入 GUI 选择引导了,而是有一个引导菜单。选中「Try Ubuntu without installing」并按下回车即可进入 LiveCD。然后打开终端,输入以下指令获得 root 权限。

1
sudo -s

然后输入以下指令查看分区情况。

1
fdisk -l

从下图可以看到在我这 /dev/sda1 是格式为 FAT32 的 EFI 分区,/dev/sda2 是格式为 EXT4 的根分区。

执行如下指令挂载分区。

1
2
3
4
5
6
7
8
mount /dev/sda2 /mnt
mount /dev/sda1 /mnt/boot/efi
mount --o bind /dev /mnt/dev
mount --o bind /proc /mnt/proc
mount --o bind /sys /mnt/sys
mount --o bind /run /mnt/run
# 如果你有划分其他分区,最好也挂载它们。如下指令为挂载 /dev/sda3 为 /home。
# mount /dev/sda3 /mnt/home

我这里的分区情况和你那儿的可能不同,请根据你的实际分区情况操作。挂载分区时,应先挂载根分区,再挂载其他分区。

都挂载完成后,执行如下指令进入 chroot 环境。

1
chroot /mnt

因为我们在一开始安装 Ubuntu 的时候使用的是 Legacy BIOS 引导而非 EFI,所以现在的 To Go 系统盘里的 Ubuntu 里的 grub 是不支持 EFI 启动的。执行如下指令安装 grub-efi

1
apt-get install grub-efi -y

如果你在安装过程中因为网络问题导致安装失败,不要紧张。执行如下指令然后再次进入 chroot 环境。

1
2
3
4
# 退出 chroot
exit
# 复制 DNS 服务器文件
cp /etc/resolv.conf /mnt/etc/resolv.conf

grub-efi 安装完成后,使用如下指令安装引导。

1
grub-install --target=x86_64-efi --boot-directory=/boot/efi --efi-directory=/boot/efi --removable

会出现一些你可能看不懂的奇♂怪的东西,但是管他呢,只要最后不报错就好。 结束之后,执行如下指令完成安装并退出 chroot 环境。

1
2
3
4
5
6
umount /proc
umount /dev
umount /sys
umount /run
sync
exit

终端先不要关,事情还没搞完。执行如下指令以避免安装完成后出现一些问题。

1
2
cd /mnt/boot
cp grub/grub.cfg efi/boot/grub/

重启即可看到,已经引导到 Ubuntu To Go 启动而不是光驱了。你可以再次关机,更改虚拟机设置中的「通过 EFI 而非 BIOS 引导」设置项来分别测试在 Legacy BIOS 和 EFI 下的运行情况。你也可以关闭物理机,然后在 BIOS 中将第一启动设备设为 Ubuntu To Go 系统盘,即可在实体机上运行 Ubuntu To Go 系统盘中的 Ubuntu。

大功告成!欢迎使用 Ubuntu To Go!拔下你的 U 盘,插到其他电脑上试试吧!

02/13/2019:感谢 voidge 的纠正和指导。

This article was last updated on days ago, and the information described in the article may have changed.