把 Ubuntu 装到U盘里随身携带,并同时支持 BIOS 和 UEFI 启动

GGAutomaton

2019-09-29 21:42:48

Tech. & Eng.

您是否为经常使用不同的电脑,但编程环境无法简单迁移而苦恼呢?
别急,看看这篇文章 : )
把系统装到U盘里,随身携带。

其实就是为了解决学校没有个人专用电脑,也不允许自带电脑的问题。

因为有些老机器只支持 BIOS+MBR,有些新机器只支持 UEFI+GPT,所以需要同时支持 BIOS 和 UEFI。此方法可能不适用于硬件资源虚拟化或者锁USB端口的机器。

本文部分内容需要一定的知识储备,不适合纯小白。
乱搞可能会造成数据丢失,请严格按照本教程操作。

使用体验

  1. 开机即可写代码,免去调配置的繁琐。
  2. 代码写了一半要离开,按下 Ctrl+s 保存代码,然后关机。再也不用复制到U盘或者发邮箱。
  3. 可以把系统调成最舒服的样子。

一、准备工作

  1. Vmware Workstation(如何安装请自行百度)
  2. 64位 Ubuntu ISO 文件(UEFI 不支持 32 位系统)
  3. 高性能U盘,至少 USB 3.0 32G,推荐 64G 及以上。如果用固态硬盘就更好了。U盘速度直接影响使用体验,请务必使用能够长时间保持写入速度的U盘。(用了两年,每次 apt upgrade 都怀疑人生,问自己为什么不买一个更好的U盘)

二、新建虚拟机并编辑配置

新建虚拟机 -> 典型 -> 稍后安装操作系统 -> Linux(Ubuntu 64位) -> 最大磁盘大小0.001GB -> 按照需要调整虚拟机硬件配置

  1. CD/DVD
    选择 Ubuntu ISO 文件位置,启动时连接

  2. USB控制器
    USB兼容性:USB 3.0

  3. 添加硬盘
    计算机管理 -> 磁盘管理
    记住自己的U盘的磁盘编号(比如我这里是磁盘3)
    虚拟机设置 -> 添加 -> 硬盘 -> SCSI -> 使用物理磁盘 -> 选择自己的U盘,并使用整个磁盘

  4. 设置 UEFI 启动
    虚拟机设置 -> 选项 -> 高级 -> 固件类型 -> UEFI
    还是没有找到的看这里

三、U盘分区

这会删除U盘里所有的数据。
开启虚拟机。如果提示“物理磁盘已被使用”,请关闭所有可能使用这个U盘的程序,拔出U盘后重新插入。
成功设置 UEFI 后,开机应该看到这个画面。如果没有看到,请检查之前的步骤。
选择"Try Ubuntu without installing"。开机后启动 Gparted。

此时U盘应该是 sdb。如果不是,请把下面所有的 sdb 换成您自己的 sdX。

在 sdb 建立 GPT 分区表。

第一个分区设置 fat32,用来拷贝文件。(因为win7似乎只能识别第一个分区)
ESP分区(下图第三个)至少 100MB,设置 boot 和 esp 标识。
在分区上右键可以修改标识(Manage Flags)。
如果您真的不会使用 Gparted,看这里

下图仅供参考。如果不需要在 Windows 下拷贝文件,可以不设置第一个 fat32 分区。

注意

  1. 虚拟机关闭后,win10 会提醒格式化所有无法识别的分区,千万不要手抖点确定。
  2. 分区设置请慎重考虑,之后更改会很麻烦。系统分区尽量划分得大一些。如果内存充足,可以不设置 swap。

您是不是被最后的 1MB 折磨,强迫症发作了?
现在我们来解决这个问题,向这个空间添加 bios_grub 标记。

这里简单提及一下这个标记的作用。GPT 兼容 MBR,如果要让 grub 在 GPT 上使用 MBR 模式安装的话,需要设置这个标记。这个分区有以下三个特点:1MB 容量,不需要格式化,设置 bios_grub 标记。(https://my.oschina.net/abcfy2/blog/491140)

在虚拟机中打开终端

sudo gdisk /dev/sdb
n
# 默认编号,回车就行
# 默认开始位置,回车
# 默认结束位置,回车
EF02 # EF02 就是 bios_grub
p # 看到 Name 有 BIOS boot partition 就可以了
w
y

最终是这样的。

四、开始 UEFI 安装

双击桌面上的"Install Ubuntu"。
如果您没有安装 Ubuntu 的经历,点击这里了解流程。
安装过程中下载更新很慢,建议断网。其他设置默认,直到这一步。
把 ext4 挂载到 /。也可以按照自己的需要来设置。
启动引导器一定要装在 /dev/sdb 上,不能装在别的硬盘(比如 sda),也不能装在单个分区上。
之后设置用户名和密码。尝试在等待安装的时间里切一道题。
安装好后,试一下能不能 UEFI 启动。

再次提醒
关闭虚拟机后,如果您的电脑突然多了一堆盘符,提醒格式化,千万不要点击确定。可以使用 DiskGenius,在不明分区上右键,删除驱动器号(盘符)。那么在这台电脑上,就不会再显示这些分区了。

五、添加 BIOS 启动

模仿切换 UEFI 的步骤,切换回 BIOS。
虚拟机设置 -> 选项 -> 高级 -> 固件类型 -> BIOS

重新连接 CD/DVD,启动虚拟机。

刚启动应该看见紫黑色背景,下方有一个小人和键盘图标。没有任何选项,自动进入这个画面。如果没有看到,请检查是否已经切换回 BIOS。
选择 Try Ubuntu。

现在假设您的系统安装在 sdbX(本文为 sdb2)。

sudo mount /dev/sdbX /mnt
sudo grub-install --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sdb

如果报错:

Installing for i386-pc platform.
grub-install: warning: this GPT partition label contains no BIOS Boot Partition; embedding won't be possible.
grub-install: warning: 无法嵌入。在此次安装中 GRUB 只能通过使用块列表安装。但是块列表是不可信赖的,不推荐使用。.
grub-install:错误: will not proceed with blocklists.

请检查是否正确标记了 bios_grub。

重启一下,看看能不能 BIOS 启动,然后尝试 UEFI 启动。
如果没有问题,那么,完结撒花!

后记

  1. 如果您不知道如何设置电脑从U盘启动。https://zhidao.baidu.com/question/416256793.html
  2. 如果您的学校采用全虚拟机教学,那么是没有办法使用自己的系统的(为什么我的锐捷云课堂不行,别人可以?),为您默哀三秒钟。

参考文章:
https://my.oschina.net/abcfy2/blog/491140
https://help.ubuntu.com/community/Installation/UEFI-and-BIOS/original-attempt#Make_a_system_bootable_in_UEFI_as_well_as_BIOS
https://help.ubuntu.com/community/UEFI

如果您在安装过程中遇到无法百度解决的问题,可以在万谷群私聊我。