- 前言
- 步骤
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
到这一步,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 $rootuuidgrub模块配置
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 thememenuentry "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 字体,安装后这个问题就会消失啦~
网友评论