折腾引导(二):U盘上安装grub

简介

下面介绍如何在不安装Linux系统的情况下,在U盘上安装grub。之所以这样干是因为我折腾引导的目标之一是制作一个UEFI+BIOS双引导、WinPE&Linux多启动的U盘。

在U盘上安装grub分为如下两步:

  1. U盘分区并给建立文件系统
  2. grub-install

下面只涉及UEFI分区U盘上的grub安装方法

动手安装

准备一个U盘,确保里面没有什么重要数据,插入到一个Linux系统中,下面以Ubuntu为例,U盘在系统中是/dev/sdb

分区

使用fdisk工具给U盘分区。

需要做如下工作:

  1. 创建gpt分区表
  2. 创建一个新分区。分区只要200多M就能装下grub,但是不妨多分一点空间,多余空间可以用来放一些工具,这里分3G
  3. 设置新分区为EFI分区,使用fdisk的话,t选项,然后选1
  4. w写入修改的内容,下面是结果示例(其他两个分区后面讲解)
Disk /dev/sdb: 14.6 GiB, 15707668480 bytes, 30679040 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 8F60A66B-D42D-4CC5-BC31-7C2CC9DB78B6

Device       Start      End  Sectors Size Type
/dev/sdb1     2048  6293503  6291456   3G EFI System
/dev/sdb2  6293504  6301695     8192   4M BIOS boot
/dev/sdb3  6301696 18884607 12582912   6G Microsoft basic data

分区建立好之后,需要给分区建立文件系统。

EFI分区的文件系统类型必须是FAT,推荐FAT32。

$ sudo mkfs.fat -F 32 /dev/sdb1

grub-install

挂载EFI分区到系统,并且新建一个boot目录

# mount /dev/sdb1 /mnt
# mkdir /mnt/boot

调用grub-install

$ sudo grub-install --efi-directory=/mnt --boot-directory=/mnt/boot --removable /dev/sdb

注意上面是/dev/sdb,是整个磁盘设备,而不是分区/dev/sdb1

上面命令执行之后,生成/mnt/EFI/boot/bootx64.efi,系统启动时会调用这个EFI application,其实就是grub。

同时会在/mnt/boot/grub/生成grub相关文件,其中包括配置文件grub.cfg

解释一下几个参数的含义:

--efi-directory指明了存放EFI application的位置。

--boot-directory指明用于存放grub相关文件的位置。

--removable如果不加这个参数,grub的efi文件就会被放到/EFI/<对应系统>/grubx64.efi,比如/EFI/ubuntu/grubx64.efi。如果加上,就会直接放到/EFI/boot/bootx64.efi

兼容BIOS

为了兼容BIOS,我们需要再分一个分区,用于存放grub,同时标记为Boot Partition,分区的结果如下:

Device       Start      End  Sectors Size Type
/dev/sdb1     2048  6293503  6291456   3G EFI System
/dev/sdb2  6293504  6301695     8192   4M BIOS boot

然后再调用grub-install安装,同样安装的时候把存放grub相关文件的分区(这里就是EFI分区)挂载上

$ sudo grub-install --boot-directory=/mnt/boot --target=i386-pc /dev/sdb

到这U盘就被分成了两个分区,剩余空间当然是想怎么用就怎么用,比如完全可以分一个区用来装普通文件,这样U盘既能当启动盘,又能方便地存储数据,不会像烧录ISO那样烧了就不能存别的东西了。

总结

上面简单说了下如何在U盘中安装grub,使得U盘可引导,这为接下来使用grub启动其他系统(比如说WinPE和Ubuntu)提供了条件。

你可能感兴趣的:(Linux)