U盘折腾记

这个故事要从一个dd工具说起。本来只是想要dd一个系统到u盘的,奈何我的电脑为window,也不想去找window下的dd工具,于是突发奇想装个linux live到u盘,要用到linux下的工具的时候只需插上u盘即可。
生命不息,折腾不止,那就干吧。

本来以为很简单,确实也很简单。
下载了个debian-live-10.0.0-i386-standard.iso
用Rufus工具把iso写进去创建个USB启动盘不就行了嘛

ok,启动盘创建好了。重启电脑,选择U盘启动,无法启动,折腾就此开启。
经过n多次尝试,google各种资料,最终发现,归根到底是自己不够理解原理的原因。
其中值得关注的几个点记录一下。

为什么会启动不了呢?

一开始以为是创建的USB启动盘是MBR分区,但我的电脑是uefi启动而非legacy启动的,不匹配?但改为GPT分区也是不行。
并非分区的问题。
UEFI启动的条件:

1. 磁盘(U盘)必须有一个ESP分区(EFI system partition – EFI系统分区)。
2. ESP分区其实就是一个文件系统为FAT格式(FAT16/FAT32)的分区。
3. ESP分区下面存在EFI启动程式,放在/EFI/Boot目录下,如:/efi/boot/bootx64.efi

即UEFI固件会执行U盘下FAT格式分区的/efi/boot/bootx64.efi启动程式
简单说就是把U盘格式化为FAT32文件系统,UEFI固件便会执行/efi/boot/bootx64.efi启动程式
我便是在这里发现了盲点,我的电脑是x64的,UEFI固件会执行/efi/boot/bootx64.efi这个启动程式,但我发现制作的USB启动盘并没有这个文件,才发现我下的iso是i386的…
解决了这个问题之后,我又想着进一步折腾这个U盘了,玩玩GRUB2,然后多个linux live…

 

玩转GRUB
1. 格式化U盘

根据上面的经验,把整个U盘格式化为FAT格式,把整个U盘当成ESP分区。
当然,把U盘分多个区也行,但必须要有一个ESP分区。
分区表是MBR或GPT都行。

2. 下载GRUB

到GRUB官网下载 grub-2.06-for-windows.zip :
https://ftp.gnu.org/gnu/grub/

3. 安装GRUB

解压下载的zip,管理员模式打开命令行,cd到解压的目录。
贴一下安装程序的help:

PS C:\F\int\grub-2.06-for-windows> .\grub-install.exe --help
Usage: grub-install.exe [OPTION...] [OPTION] [INSTALL_DEVICE]
Install GRUB on your drive.

      --compress=no|xz|gz|lzo   compress GRUB files [optional]
      --disable-shim-lock    disable shim_lock verifier
      --dtb=FILE             embed a specific DTB
  -d, --directory=DIR        use images and modules under DIR
                             [default=C:\F\int\grub-2.06-for-windows/<platform>]
      --fonts=FONTS          install FONTS [default=unicode]
      --install-modules=MODULES   install only MODULES and their dependencies
                             [default=all]
  -k, --pubkey=FILE          embed FILE as public key for signature checking
      --locale-directory=DIR use translations under DIR
                             [default=C:\F\int\grub-2.06-for-windows/locale]
      --locales=LOCALES      install only LOCALES [default=all]
      --modules=MODULES      pre-load specified modules MODULES
      --sbat=FILE            SBAT metadata
      --themes=THEMES        install THEMES [default=starfield]
  -v, --verbose              print verbose messages.
      --allow-floppy         make the drive also bootable as floppy (default
                             for fdX devices). May break on some BIOSes.
      --boot-directory=DIR   install GRUB images under the directory DIR/grub
                             instead of the boot/grub directory
      --bootloader-id=ID     the ID of bootloader. This option is only
                             available on EFI and Macs.
      --core-compress=xz|none|auto
                             choose the compression to use for core image
      --disk-module=MODULE   disk module to use (biosdisk or native). This
                             option is only available on BIOS target.
      --efi-directory=DIR    use DIR as the EFI System Partition root.
      --force                install even if problems are detected
      --force-file-id        use identifier file even if UUID is available
      --label-bgcolor=COLOR  use COLOR for label background
      --label-color=COLOR    use COLOR for label
      --label-font=FILE      use FILE as font for label
      --macppc-directory=DIR use DIR for PPC MAC install.
      --no-bootsector        do not install bootsector
      --no-nvram             don't update the `boot-device'/`Boot*' NVRAM
                             variables. This option is only available on EFI
                             and IEEE1275 targets.
      --no-rs-codes          Do not apply any reed-solomon codes when
                             embedding core.img. This option is only available
                             on x86 BIOS targets.
      --product-version=STRING   use STRING as product version
      --recheck              delete device map if it already exists
      --removable            the installation device is removable. This option
                             is only available on EFI.
  -s, --skip-fs-probe        do not probe for filesystems in DEVICE
      --target=TARGET        install GRUB for TARGET platform
                             [default=x86_64-efi]; available targets:
                             arm-coreboot, arm-efi, arm-uboot, arm64-efi,
                             i386-coreboot, i386-efi, i386-ieee1275,
                             i386-multiboot, i386-pc, i386-qemu, i386-xen,
                             i386-xen_pvh, ia64-efi, mips-arc, mips-qemu_mips,
                             mipsel-arc, mipsel-loongson, mipsel-qemu_mips,
                             powerpc-ieee1275, riscv32-efi, riscv64-efi,
                             sparc64-ieee1275, x86_64-efi, x86_64-xen
  -?, --help                 give this help list
  -V, --version              print program version
      --usage                give a short usage message

Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.

INSTALL_DEVICE must be system device filename.
C:\F\int\grub-2.06-for-windows\grub-install.exe copies GRUB images into
boot/grub.  On some platforms, it may also install GRUB into the boot sector.

Report bugs to <bug-grub@gnu.org>.

执行下面命令即可把GRUB安装到U盘(根据实际情况替换 “G:\boot” 和 \\.\PHYSICALDRIVE2):

// 安装传统BIOS平台的GRUB2
> .\grub-install.exe --target="i386-pc" --boot-directory="G:\boot" \\.\PHYSICALDRIVE2
Installing for i386-pc platform.
Installation finished. No error reported.
// 安装32位UEFI平台的GRUB2
> .\grub-install.exe --target="i386-efi" --boot-directory="G:\boot" --efi-directory="G:\" --removable
Installing for i386-efi platform.
Installation finished. No error reported.
// 安装64位UEFI平台的GRUB2
> .\grub-install.exe --target="x86_64-efi" --boot-directory="G:\boot" --efi-directory="G:\" --removable
Installing for x86_64-efi platform.
Installation finished. No error reported.

查看 \\.\PHYSICALDRIVE2 (DeviceID) 可使用命令 wmic diskdrive list brief

好了,安装好GRUB可以看到U盘目录下就有了 G:\EFI\BOOT\BOOTX64.EFI 启动程式了,理论上现在是可以进入到GRUB界面的,验证一下

4. 配置GRUB

留下评论

您的电子邮箱地址不会被公开。 必填项已用*标注