欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-06-01 16:23:44
...

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


相关标签: Ubuntu UEFI