打造纯UEFI 启动的Ubuntu 系统U 盘

2019-01-23 11:28:41

打造纯UEFI 启动的Ubuntu 系统U 盘

前言

本文意在通过Ubuntu 16.04 的ISO 制作一个支持UEFI 启动的Ubuntu To Go U盘。
之前参考了别的文章,成功做成了同时支持Bios 和UEFI 的U 盘系统,但需要联网才能安装EFI 的Grub2。
个人觉得ISO 文件本身就支持UEFI,何不直接从镜像文件提取启动文件。
通过摸索,提取了ISO 中的EFI 文件夹,使用strings EFI/grubx64.efi 查看其源码,发现它会读取EFI 盘根目录下的/boot/grub/grub.cfg 配置文件,从而得到启发总结出了以下制作步骤。


准备工作

Ubuntu 16.04 LTS ISO

http://releases.ubuntu.com/xenial/ubuntu-16.04.5-desktop-amd64.iso

DiskGenius 免费版

http://www.diskgenius.cn

HaoZip 解压软件

http://haozip.2345.cc/

一个USB3.0 的64GB 及以上的U盘,2.0 的不推荐,速度太慢

以我的Chipfancier 256GB 为例,使用DiskGenius 设置为GPT 类型,分区如下

大小 格式 备注
200MB FAT32 EFI 区分
100GB EXT4 Ubuntu 安装于此,挂载根目录/
133GB exFat 用于储存文件,exFat 格式通用于Windows、MacOSX、Linux
2GB FAT32 存放安装盘ISO,Grub2 引导的iso 文件只能在Fat32

另外,64GB U 盘用MBR 类型,建议分区如下,安装完毕后可间第三个分区合并到第二分区

大小 格式 备注
200MB FAT32 主分区,激活,EFI 区分
50GB EXT4 主分区,Ubuntu 安装于此,挂载根目录/
2GB FAT32 主分区,存放安装盘ISO

** 用解压软件将ubuntu-16.04.5-desktop-amd64.iso 下的EFI 文件夹整个拷到第一个分区 **

# EFI 文件夹应该包含以下内容
# UEFI 系统会搜索所有FAT32 磁盘根目录下的EFI/BOOT/BOOTx64.efi(不分大小写)
|____EFI
    |____BOOT
      |____BOOTx64.EFI  <-- 由shimx64.efi 改名而来,针对主板开启了SecureBoot
      |____grubx64.efi  <-- 如果关闭了SecureBoot 可直接将grubx64.efi 改名为bootx64.efi

** 在第一个分区创建/boot/grub/grub.cfg,里面包含了启动Ubuntu 的命令,但装完系统后修改完才能用 **

set timeout=10

menuentry "Ubuntu 16.04 LTS" {
  set uuid=0dcc1a29-32ad-4c59-a14d-ab0d9b3c1c00
  search --no-floppy --fs-uuid --set=ubdisk $uuid
  #search.fs_uuid $uuid ubdisk  # same as above
  set root=($ubdisk)
  linux /boot/vmlinuz-4.15.0-29-generic root=UUID=$uuid
  initrd /boot/initrd.img-4.15.0-29-generic
}

submenu "Others" {

  menuentry "Reboot" {
    reboot
  }

  menuentry "Halt" {
    halt
  }
}

** 在最后一个分区创建ISO 文件夹,将ubuntu-16.04.5-desktop-amd64.iso 拷入ISO,并创建/ISO/set-hdisk-source.txt,其内容是引导U 盘上iso 文件的命令 **

set isofile=/ISO/ubuntu-16.04.5-desktop-amd64.iso
loopback loop $hdisk$isofile
linux (loop)/casper/vmlinuz boot=casper iso-scan/filename=$isofile quiet splash
initrd (loop)/casper/initrd
boot

** 最终形成的文件系统树状图 **

|____第一分区,即EFI 分区
| |____EFI
| | |____BOOT
| |   |____BOOTx64.EFI
| |   |____grubx64.efi
| |____boot
|   |____grub
|     |____grub.cfg
|____最后分区,即保存ISO 的分区
| |____ISO
|   |____ubuntu-16.04.5-desktop-amd64.iso
|   |____set-hdisk-source.txt

安装步骤

将以上部署好文件的U 盘插入电脑,选择从U 盘启动。当出现Grub2 菜单时,按c 键进入命令提示符grub>

ls # 查看当前有哪些盘符,例如存放iso 的磁盘是(hd0,gpt4)

ls (hd0, # 这时候按Tab 键会有提示,该硬盘下有哪些分区,以及分区的UUID 及格式类型等信息

通过以下命令引导U盘上的iso 文件,FAT32 会将一切字母变成小写,source 相当于读取了一个批处理文件

set hdisk=(hd0,gpt4)
source $hdisk/iso/set-hdisk-source.txt

进入Ubuntu LiveCD 后,点击左上角标志输入Terminal 打开终端

sudo -s  # 切换到root 用户
umount -l /isodevice  # 卸载iso 挂载的盘符,否则无法对U 盘进行写入操作
ubiquity --no-bootloader  # 千万不要用桌面的安装图标直接安装,否则UEFI 引导文件会被修改

Ubuntu 安装跟使用其他介质一样,唯一需要注意的是选择根目录/ 的挂载点

  1. 选择语言,我喜欢选汉语,后面再将目录设置为英文
  2. 选择不联网
  3. 选择安装额外第三方的软件
  4. 硬盘分区
  • 提示 “卸载已挂载的分区” 选 “是”
  • 选择U 盘第二个分区,类型Ext4,主分区,勾上“格式化”,挂载点“/”
  • 提示没有设置swap 不用理会,点“继续”
  1. 选择时区
  2. 选择键盘,英语,美国
  3. 设置用户名,主机名,密码

安装完了不要“重启”,选择“继续试用”

fdisk -l  # 查找U 盘的设备名,通过分区类型及数量判断,例如/dev/sdb
blkid | grep sdb # 查看各个磁盘的UUID,主要关注U 盘的第一、第二个分区的UUID

mount /dev/sdb2 /mnt
mount /dev/sdb1 /mnt/boot/efi

vi /mnt/etc/fstab  # 将最后一行的UUID 改成U 盘第一个盘即EFI 分区的UUID
# /etc/fstab 最后一行影响的是新系统/boot/efi 目录的挂载
# Ubuntu 在安装的时候会将Windows 的ESP 分区挂载到/boot/efi
# 在MacBook 上启动报错就是因为/boot/efi 挂载的设备不存在
# 所以,将/boot/efi 挂载点设置为U 盘就不会找不到设备了

vi /mnt/boot/efi/boot/grub/grub.cfg  # 将set uuid=U盘第二个盘即Ext4 分区的UUID
# 这里设置的是告诉Grub2,Ubuntu 的安装位置,UUID 是磁盘的唯一标识,除非格式化才会改变

# 以上vi 都修改完文件后卸载挂载的磁盘并重启系统
umount /mnt/boot/efi
umount /mnt
init 6  # 重启系统

再次从U 盘启动,选择“Ubuntu 16.04 LTS” 即可进入新装的系统


清理工作

关闭电脑后,拔掉U 盘,在安装过程中,Ubuntu 还是向UEFI 写了点东西,以我的X270 原系统Windows8.1 为例。
进入Windows 用DiskGenius 浏览ESP 分区,并将EFI 文件夹下的ubuntu 文件夹删除即可。


参考文章

制作 Legacy BIOS / EFI 双启动的 Ubuntu To Go 启动盘

https://www.littleqiu.net/archives/771
https://zhuanlan.zhihu.com/p/27871019

Ubuntu installation on USB stick with pure EFI boot (Mac compatible)

https://medium.com/@mmiglier/ubuntu-installation-on-usb-stick-with-pure-efi-boot-mac-compatible-469ad33645c9

Booting ubuntu iso file from grub menu

https://askubuntu.com/questions/500295/booting-ubuntu-iso-file-from-grub-menu

GRUB2 UEFI加载程序如何知道在哪里查找配置文件

https://stackoverrun.com/cn/q/9723219

Install Ubuntu to usb drive and boot it to Uefi and Bios system

https://askubuntu.com/questions/784928/install-ubuntu-to-usb-drive-and-boot-it-to-uefi-and-bios-system


你可能感兴趣的:(打造纯UEFI 启动的Ubuntu 系统U 盘)