多引導 USB 設備 - Arch Linux 中文维基

跳至內容

# 多引導 USB 設備

出自 Arch Linux 中文维基
翻譯狀態：

- 本文（或部分內容）譯自 Multiboot USB drive，最近一次同步於 2022-09-30，若英文版本有所更改，則您可以幫助同步與翻譯更改的內容。
- 您可以在 ArchWiki 的對應頁面找到本文翻譯的原始修訂歷史。
- 本文可能與英文原文存在出入。

相關文章

- GRUB
- Syslinux
- Archiso

多引導USB啟動盤可以從單個設備引導多個ISO鏡像文件。ISO鏡像文件可以不需要解壓複製到U盤上就可以啟動。以下有多種可用的方案，但不一定兼容所有ISO鏡像。

## GRUB引導器及loopback devices實現

本文或本章節的語言、語法或風格需要改進。參考：幫助:風格

原因：multiple style issues（在Talk:多引導 USB 設備討論）

優點:

- 僅需要一個分區
- 所有ISO文件鏡像可在同一個文件夾下被檢測到
- 易於添加或移除ISO鏡像文件

缺點:

- 並非所有鏡像兼容
- ISO文件原本的啟動菜單不會顯示
- 找到可用的啟動項可能並不容易

### 準備

在USB設備上創建至少一個分區和一個GRUB支持的文件系統。分區的大小取決與要存儲在其中的ISO文件大小和引導程序所計劃需要的空間。

### 安裝 GRUB引導器

#### 簡單安裝

掛載U盤:

    # mount /dev/sdXY /mnt

U盤上創建 /boot文件夾:

    # mkdir /mnt/boot

安裝GRUB到U盤:

    # grub-install --target=i386-pc --recheck --boot-directory=/mnt/boot /dev/sdX

如果以UEFI啟動鏡像, 您需要按UEFI方式安裝GRUB:

    # grub-install --target=x86_64-efi --removable --boot-directory=/mnt/boot --efi-directory=/mnt

對於UEFI, 引導分區必須是FAT32格式, 且啟動分區必須是MBR分區表中的第一個分區.

#### 混合 UEFI GPT + BIOS GPT/MBR 啟動

以下有用的配置可以幫助您創建一份可以在任意地方啟動的通用U盤。首先，您必須在您的設備上創建一份 GPT 分區。您至少需要以下三個分區：

1. 一個BIOS啟動分區（gdisk代號編碼 `EF02`），該分區至少需要1 MiB的大小。
2. 一個EFI系統分區（gdisk代號編碼`EF00`且它使用FAT32文件系統），該分區至少需要50 MiB的大小。
3. 您自己的數據分區（使用GRUB支持的文件系統)，該分區的大小是由您硬碟的剩餘空間容量來決定的。

接下來您必須創建一個MBR混合分區表。如果沒有它，一個僅BIOS MBR引導啟動的電腦將無法啟動。因為它無法尋找到硬碟裡的實例以啟動。

以下是一個使用gdisk創建MBR混合分區表的例子：

    # gdisk /dev/sdX

    Command (? for help): r
    Recovery/transformation command (? for help): h

    WARNING! Hybrid MBRs are flaky and dangerous! If you decide not to use one,
    just hit the Enter key at the below prompt and your MBR partition table will
    be untouched.

    Type from one to three GPT partition numbers, separated by spaces, to be added to the hybrid MBR, in sequence: 1 2 3
    Place EFI GPT (0xEE) partition first in MBR (good for GRUB)? (Y/N): N

    Creating entry for GPT partition #1 (MBR partition #1)
    Enter an MBR hex code (default EF):
    Set the bootable flag? (Y/N): N

    Creating entry for GPT partition #2 (MBR partition #2)
    Enter an MBR hex code (default EF):
    Set the bootable flag? (Y/N): N

    Creating entry for GPT partition #3 (MBR partition #3)
    Enter an MBR hex code (default 83):
    Set the bootable flag? (Y/N): Y

    Recovery/transformation command (? for help): x
    Expert command (? for help): h
    Expert 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

注意 Hybird MBR 只可以輸入三個分區。

不要忘了格式化這些分區：

    # mkfs.fat -F32 /dev/sdX2
    # mkfs.ext4 /dev/sdX3

您現在可以安裝GRUB以同時支持EFI + GPT引導以及BIOS + GPT/MBR引導。GRUB配置(--boot-directory）將會被保持在同一個地方。

首先，您需要掛載您USB驅動器上的EFI系統分區和數據分區。

以下是如何掛載的例子：

    # mount /dev/sdX3 /mnt
    # mkdir -p /mnt/boot/EFI
    # mount /dev/sdX2 /mnt/boot/EFI

然後，您就可以在UEFI上安裝GRUB：

在大多數案例中，`EFI_MOUNTPOINT`將會對應至您所掛載的U盤上的`/mnt/boot/EFI`這個子目錄中。`DATA_MOUNTPOINT`是數據分區的掛載目錄。在本例中就是 sdX3 的掛載目錄，即`/mnt`。

    # grub-install --target=x86_64-efi --recheck --removable --efi-directory=/EFI_MOUNTPOINT --boot-directory=/DATA_MOUNTPOINT/boot

在BIOS上安裝GRUB：

    # grub-install --target=i386-pc --recheck --boot-directory=/DATA_MOUNTPOINT/boot /dev/sdX

作為後備處理，您也可以把GRUB安裝進您的MBR啟動分區裡面。

    # grub-install --target=i386-pc --recheck --boot-directory=/DATA_MOUNTPOINT/boot /dev/sdX3

### 配置 GRUB

#### 參考模板

有些git項目中提供了一些預先存在的GRUB配置文件，一個優秀且通用的 grub.cfg 文件可以用來按需加載其他引導項，只有在指定的ISO文件（或包含它們的文件夾）存在於驅動器上時才會顯示它們。

Multiboot USB: https://github.com/hackerncoder/multibootusb

GLIM (GRUB2 Live ISO Multiboot): https://github.com/thias/glim

#### 手動配置

通過手動編輯`grub.cfg`以代替自動生成它可以更容易的達到製作多啟動USB驅動盤的目的。或者，在`/etc/grub.d/40_custom`或`/mnt/boot/grub/custom.cfg`中做出如下改動並通過grub-mkconfig生成`/mnt/boot/grub/grub.cfg`。

As it is recommend to use a persistent name instead of `/dev/sdxY` to identify the partition on the USB drive where the image files are located, define a variable for convenience to hold the value. If the ISO images are on the same partition as GRUB, use the following to read the UUID at boot time:

    /mnt/boot/grub/grub.cfg

    # path to the partition holding ISO images (using UUID)
    probe -u $root --set=rootuuid
    set imgdevpath="/dev/disk/by-uuid/$rootuuid"

Or specify the UUID explicitly:

    /mnt/boot/grub/grub.cfg

    # path to the partition holding ISO images (using UUID)
    set imgdevpath="/dev/disk/by-uuid/UUID_value"

Alternatively, use the device label instead of UUID:

    /mnt/boot/grub/grub.cfg

    # path to the partition holding ISO images (using labels)
    set imgdevpath="/dev/disk/by-label/label_value"

The necessary UUID or label can be found using `lsblk -f`. Do not use the same label as the Arch ISO for the USB device, otherwise the boot process will fail.

To complete the configuration, a boot entry for each ISO image has to be added below this header, see the next section for examples.

### 啟動項

It is assumed that the ISO images are stored in the `boot/iso/` directory on the same filesystem where GRUB is installed. Otherwise it would be necessary to prefix the path to ISO file with device identification when using the `loopback` command, for example `loopback loop (hd1,2)$isofile`. As this identification of devices is not persistent, it is not used in the examples in this section.

One can use persistent block device naming like so. Replace the UUID according to your ISO filesystem UUID.

    # define globally (i.e outside any menuentry)
    insmod search_fs_uuid
    search --no-floppy --set=isopart --fs-uuid 123-456
    # later use inside each menuentry instead
    loopback loop ($isopart)$isofile

提示： For a list of kernel parameters, see the kernel's command-line parameter documentation. For more examples of boot entries, see the GRUB upstream documentation or the documentation for the distribution you wish to boot.

#### Arch Linux monthly release

Also see archiso.

    menuentry '[loopback]archlinux-2020.10.01-x86_64.iso' {
    	set isofile='/boot/iso/archlinux-2020.10.01-x86_64.iso'
    	loopback loop $isofile
    	linux (loop)/arch/boot/x86_64/vmlinuz-linux img_dev=$imgdevpath img_loop=$isofile earlymodules=loop
    	initrd (loop)/arch/boot/intel-ucode.img (loop)/arch/boot/amd-ucode.img (loop)/arch/boot/x86_64/initramfs-linux.img
    }

See README.bootparams for archiso options supported in kernel command line.

#### Memtest86+

Memtest86+[損壞的連結：無效的章節]包含在每月構建的 ISO中。

    menuentry '[loopback]archlinux-2020.10.01-x86_64.iso' {
    	set isofile='/boot/iso/archlinux-2020.10.01-x86_64.iso'
    	loopback loop $isofile
    	linux16 (loop)/arch/boot/memtest
    }

#### archboot

參見 Archboot Homepage。

    menuentry '[loopback]archlinux-2014.11-1-archboot' {
    	set isofile='/boot/iso/archlinux-2014.11-1-archboot.iso'
    	loopback loop $isofile
    	linux (loop)/boot/vmlinuz_x86_64 iso_loop_dev=$imgdevpath iso_loop_path=$isofile
    	initrd (loop)/boot/initramfs_x86_64.img
    }

## Syslinux和memdisk實現

Using the memdisk module, the ISO image is loaded into memory, and its bootloader is loaded. Make sure that the system that will boot this USB drive has sufficient amount of memory for the image file and running operating system.

### 準備

Make sure that the USB drive is properly partitioned and that there is a partition with file system supported by Syslinux, for example fat32 or ext4. Then install Syslinux to this partition, see Syslinux#Installation on BIOS.

### 安裝 memdisk 模塊

The memdisk module was not installed during Syslinux installation, it has to be installed manually. Mount the partition where Syslinux is installed to `/mnt/` and copy the memdisk module to the same directory where Syslinux is installed:

    # cp /usr/lib/syslinux/bios/memdisk /mnt/boot/syslinux/

### 配置

在將ISO文件複製至USB驅動盤之後，編輯Syslinux配置文件並為ISO鏡像創立菜單條目，最基礎的條目看起來像這樣：

    boot/syslinux/syslinux.cfg

    LABEL some_label
        LINUX memdisk
        INITRD /path/to/image.iso
        APPEND iso

參見memdisk on Syslinux wiki 以了解更多調試選項。

## 自動製作工具實現(開源軟體)

- GRUB2 Live ISO Multiboot (GLIM) — A set of GRUB configuration files to turn a VFAT formatted USB memory stick with GNU/Linux distribution ISO images into a multiboot USB drive.

  https://github.com/thias/glim || 未被打包？在 AUR 裡搜索

- liveusb-builder — 一個為GNU/Linux發行版創建多啟動U盤的腳本套件

  https://github.com/mytbk/liveusb-builder || liveusb-builder-gitAUR

- MultiBootUSB — 一個具有CLI和GUI界面的跨平台Python軟體，可添加或刪除多個Linux LIVE映像環境到U盤。

  https://github.com/mbusb/multibootusb || multibootusbAUR

- MultiSystem — 一個圖形化工具，可添加或刪除多個Linux LIVE映像環境到U盤。

  http://liveusb.info/dotclear/ || multisystemAUR

- Ventoy — 一個開源工具，為ISO/WIM/IMG/VHD(x)/EFI文件創建可引導的USB驅動器。不需要一遍又一遍格式化磁碟，只需要複製文件到U盤即可啟動。

  https://www.ventoy.net/ || ventoy-binAUR

## 更多參考

- GRUB:
  - https://help.ubuntu.com/community/Grub2/ISOBoot/Examples
  - https://help.ubuntu.com/community/Grub2/ISOBoot
  - GRUB Live ISO Multiboot - GRUB configurations for booting ISO images
- Syslinux:
  - Boot an ISO image

分類：​

- 安裝過程
- 使用「模板:風格」標記的頁面或章節
- Pages with missing package links

隱藏分類：​

- 包含損壞章節連結的頁面

多引導 USB 設備
新增話題