打造纯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 免费版
HaoZip 解压软件
一个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 安装跟使用其他介质一样,唯一需要注意的是选择根目录/ 的挂载点
- 选择语言,我喜欢选汉语,后面再将目录设置为英文
- 选择不联网
- 选择安装额外第三方的软件
- 硬盘分区
- 提示 “卸载已挂载的分区” 选 “是”
- 选择U 盘第二个分区,类型Ext4,主分区,勾上“格式化”,挂载点“/”
- 提示没有设置swap 不用理会,点“继续”
- 选择时区
- 选择键盘,英语,美国
- 设置用户名,主机名,密码
安装完了不要“重启”,选择“继续试用”
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)
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
推荐阅读
-
利用U盘安装不了系统怎么回事?搞清BIOS、MBR、UEFI和GPT的关系很重要
-
u盘启动UEFI版和装机版的区别
-
使用u启动u盘装系统后提示bootmgr is missing的解决方法
-
三星笔记本使用U盘启动bios适合U盘安装系统的朋友
-
晨枫u盘启动工具安装原版Win7的两种方法(32位64位系统通用)
-
Windows环境下制作Ubuntu的U盘启动工具
-
Win10 UEFI不识别U盘怎么办?Win10系统UEFI无法从U盘启动的解决方法
-
u盘启动安装win10系统,提示无法创建新的分区怎么解决
-
如何用ultraiso软碟通制作自己的U盘启动盘 ultraiso制作纯洁系统安装盘教程
-
零成本打造苹果系统安装U盘附苹果系统的实例安装教程