U盘 启动 ISO 文件(GRUB 版)

2016-11-25  本文已影响0人  冻皮
  1. 前言
  2. 步骤

1. 前言

之前一直在想如何把多个系统弄到一个 U盘 上引导启动,但没找到解决办法,所以只好用这种歪门邪道了。通过引导程序引导 ISO 文件启动,差不多是光盘一样,而且替换更新也方便,也能一个 U盘 能放多个 ISO 文件形成多系统引导。

2. 步骤

2.1 准备工作

1. 空的U盘一个,大小随意,够地方放东西就行。
  2. Linux 系统,只要能用就行。
  3. ISO 光盘文件,我这里准备了 Arch Linux  的。

2.2 格式化 U盘

gparted  去弄。
  首先给 U盘创建分区表:

创建分区表1.png 创建分区表2.png

  然后创建分区:


创建分区1.png 创建分区2.png

  上面一步之后要点击应用。
  接着给分区添加标记:


管理标志1.png 管理标志2.png

  到这一步,gparted 的任务完成了,不用忍受那要命的速度了。
  然后打开终端输入:

$ sudo gdisk -l /dev/sdb  # 根据你的U盘的名字修改dev设备

然后会看到类似下面的东西:

GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective        # <========================= 保护性的MBR,这个是GPT兼容MBR的一种设计
  BSD: not present
  APM: not present
  GPT: present           # <========================= 看这里,已经是GPT了

Found valid GPT with protective MBR; using GPT.                # <========== 这里的显示也说明是GPT分区
Disk /dev/sdb: 62013440 sectors, 29.6 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 2C913250-C820-411C-B018-FDC486253FFB
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 62013406
Partitions will be aligned on 2048-sector boundaries
Total free space is 4029 sectors (2.0 MiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        62011391   29.6 GiB    EF00        # <======== 这里很关键,看Code是EF00,想要分区成为ESP必须设置这个标记,如果手工用gdisk别忘了这一步

再接着输入:

$ sudo parted /dev/sdb print

就会看到这样的东西:

Model: hp x755w (scsi)
Disk /dev/sdb: 31.8GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt                                            # <======= GPT分区
Disk Flags: 

Number  Start   End     Size    File system  Name  Flags
 1      1049kB  31.7GB  31.7GB  fat32              boot, esp    # <===== ESP已经设置成功

然后输入:

$ sudo gdisk /dev/sdb

接着对着下面来操作:

GPT fdisk (gdisk) version 1.0.1

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.

Command (? for help): n
Partition number (2-128, default 2): 
First sector (34-62013406, default = 62011392) or {+-}size{KMGTP}: 
Last sector (62011392-62013406, default = 62013406) or {+-}size{KMGTP}: 
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300): EF02
Changed type of partition to 'BIOS boot partition'

Command (? for help): p
Disk /dev/sdb: 62013440 sectors, 29.6 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 2C913250-C820-411C-B018-FDC486253FFB
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 62013406
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048        62011391   29.6 GiB    EF00  
   2        62011392        62013406   1007.5 KiB  EF02  BIOS boot partition  # <== EF02对应的就是bios_grub这个标记

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.

此时输入:

$ sudo parted /dev/sdb print

会看到这样:

Model: hp x755w (scsi)
Disk /dev/sdb: 31.8GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name                 Flags
 1      1049kB  31.7GB  31.7GB  fat32                             boot, esp
 2      31.7GB  31.8GB  1032kB               BIOS boot partition  bios_grub  # <== 要的就是这个!

2.3 安装 grub 到 U盘

这样:

sudo mount /dev/sdb1 /mnt && \
sudo grub-install --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sdb && \
sudo grub-install --target x86_64-efi --efi-directory /mnt --boot-directory=/mnt/boot --removable

顺利的话会看到这样:

Installing for i386-pc platform.
Installation finished. No error reported.
Installing for x86_64-efi platform.
Installation finished. No error reported.

2.4 添加 grub 菜单

/mnt/boot/grub 这个目录下,新建 grub.cfg 配置文件就行了。grub2 的语法很复杂,图省事就从网上各种摘抄拼接就行了。比如我把 Linux 发行版的 iso 镜像都扔到了 iso 这个目录,于是乎我的 grub.cfg 成了这样:

path to the partition holding ISO images (using UUID)

probe -u $root --set=rootuuid
set imgdevpath="/dev/disk/by-uuid/$rootuuid"

define globally (i.e outside any menuentry)

insmod search_fs_uuid
search --no-floppy --set=isopart --fs-uuid $rootuuid

grub模块配置

loadfont unicode
set lang=zh_CN
insmod all_video
insmod gfxterm
insmod gettext
insmod gfxmenu
insmod png
insmod part_msdos
insmod xfs
terminal_output gfxterm
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
gfxmode keep
set vt_handoff=vt.handoff=7

主题配置

set gfxmode=1920x1080
set timeout_style=menu
set timeout=5
set theme=$prefix/themes/breeze/theme.txt
export theme

menuentry "Arch Linux ISO" --class arch {
set isofile='/iso/archlinux-2016.11.01-dual.iso'
loopback loop $isofile
linux (loop)/arch/boot/x86_64/vmlinuz archisodevice=/dev/loop0 img_dev=$imgdevpath img_loop=$isofile earlymodules=loop
initrd (loop)/arch/boot/x86_64/archiso.img
}

menuentry "Deepin 15 ISO" --class deepin {
set isofile='/iso/deepin-15.3-amd64.iso'
loopback loop ($isopart)$isofile
echo '载入Deepin ...'
linux (loop)/live/vmlinuz.efi boot=live config findiso=$isofile noeject noprompt locales=zh_CN.UTF-8 --
echo '载入初始化内存盘...'
initrd (loop)/live/initrd.lz
}

menuentry "System shutdown" --class shutdown {
echo "System shutting down..."
halt
}

menuentry "System restart" --class restart {
echo "System rebooting..."
reboot
}


参考来源

[grub实现]U盘引导多个linux镜像安装,同时支持BIOS和UEFI模式 - Feng_Yu的个人空间 - 开源中国社区 


本系列文章:
《U盘 启动 ISO 文件(GRUB 版)》——冻皮
《U盘 启动 ISO 文件(?? 版)》——冻皮


本文其他链接:《U盘 启动 ISO 文件(GRUB 版)》——冻皮博客 


知识共享许可协议
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议  进行许可。

你是否看到本文不少链接后面有个方框?不要方,这是因为你没安装 Font Awesome  字体,安装后这个问题就会消失啦~

上一篇下一篇

猜你喜欢

热点阅读