USB 闪存安装介质
本文档讨论了多种跨平台方法来创建用于在 BIOS 和 UEFI 系统中启动的 Arch Linux 安装 USB 驱动器(也称为“闪存驱动器”、“USB stick”、“USB key”等)。结果将是一个 Live USB 系统,可用于安装 Arch Linux、系统维护或恢复目的,并且由于使用 Overlayfs 进行 / 操作,所有更改将在计算机关机后被丢弃。
如果您想从 USB 驱动器运行 Arch Linux 的完整安装(即具有持久化设置),请参阅 Install Arch Linux on a removable medium。如果您想将可启动的 Arch Linux USB stick 用作救援 USB,请参阅 chroot。
在执行任何这些步骤之前,请从 https://archlinux.org.cn/download/ 下载 ISO 文件并 验证其完整性。
直接使用 ISO 文件(BIOS 和 UEFI)
在 GNU/Linux 中
使用基本的命令行工具
此方法是推荐的,因为它简单且普遍可用,因为这些工具是 coreutils 的一部分(由 base 元数据包引入)。
通过 ls -l /dev/disk/by-id/usb-* 找出您的 USB 驱动器名称,并用 lsblk 检查以确保它**未**被挂载。
运行以下命令之一,将 /dev/disk/by-id/usb-My_flash_drive 替换为您的驱动器,例如 /dev/disk/by-id/usb-Kingston_DataTraveler_2.0_408D5C1654FDB471E98BED5C-0:0。(**不要**附加分区号,所以**不要**使用类似 /dev/disk/by-id/usb-Kingston_DataTraveler_2.0_408D5C1654FDB471E98BED5C-0:0-part1 或 /dev/sdb1 的内容)
- 使用 cat(1)
# cat path/to/archlinux-version-x86_64.iso > /dev/disk/by-id/usb-My_flash_drive
- 使用 cp(1)
# cp path/to/archlinux-version-x86_64.iso /dev/disk/by-id/usb-My_flash_drive
- 使用 dd
# dd bs=4M if=path/to/archlinux-version-x86_64.iso of=/dev/disk/by-id/usb-My_flash_drive conv=fsync oflag=direct status=progress
- 使用 tee(1)
# tee < path/to/archlinux-version-x86_64.iso > /dev/disk/by-id/usb-My_flash_drive
- 使用 pv
# pv path/to/archlinux-version-x86_64.iso -Yo /dev/disk/by-id/usb-My_flash_drive
请参阅 [1] 和 [2] 以获取对这些工具使用情况的比较和见解,以及为什么 dd 可能是最不适合的工具。
- 在相应命令后使用 root 权限执行
sync可确保缓冲区完全写入设备,然后您才能移除它。 - 如果 USB 的 Arch ISO 的 UEFI 版本挂起或无法加载,请尝试在同一 USB 驱动器上重复创建介质的过程一到多次。如果无效,您也可以尝试更新主板的固件。
wipefs --all /dev/disk/by-id/usb-My_flash_drive 来删除 ISO 9660 文件系统签名。使用 KDE ISO Image Writer
KDE ISO Image Writer 可通过 isoimagewriter 下载。它可以自动检测 USB 驱动器,您需要手动选择一个 ISO 文件。建议使用 .sig 文件进行签名,但可以通过点击“create”来跳过。
使用 GNOME Disk Utility
运行 GNOME 的 Linux 发行版可以通过 nautilus 和 gnome-disk-utility 轻松制作 Live USB。只需右键单击 .iso 文件,然后选择 Open With Disk Image Writer。当 GNOME Disk Utility 打开时,在 Destination 下拉菜单中指定闪存驱动器,然后点击 Start Restoring。
使用 MultiWriter
gnome-multi-writer 是一个简单的基于 GTK3 的图形工具,可以一次将 ISO 文件写入一个或多个 USB 设备。
使用 Kindd
Kindd 是 dd 的一个基于 Qt 的图形前端。它可作为 kinddAUR 使用。
使用 Popsicle
Popsicle 是 PopOS 开发团队为并行闪存 ISO 文件到多个 USB 设备而制作的工具。它使用 Rust 编写,并使用 GTK。它可作为 popsicleAUR 使用。
使用 SUSE Studio ImageWriter
SUSE Studio ImageWriter 是 openSUSE 开发团队制作的一个基于 Qt 的工具。它可作为 imagewriterAUR 使用。
使用 xorriso-dd-target
xorriso-dd-target(来自 libisoburn)是一个 shell 脚本,它试图降低覆盖错误存储设备的风险。其最安全模式名为 -plug_test。例如,作为普通用户使用,该用户可以使用 sudo 提升到 root 权限。
$ xorriso-dd-target -with_sudo -plug_test -DO_WRITE -image_file archlinux-version-x86_64.iso
有关详情,请参阅 xorriso-dd-target(1)。
使用 USBImager
USBImager 是一个跨平台的图形应用程序,可将压缩的磁盘映像写入和验证到 USB 驱动器,并创建备份。它可作为 usbimagerAUR 使用。
在 Windows 中
使用 KDE ISO Image Writer
KDE ISO Image Writer 可在 isoimagewriter 下载 .exe 文件。它可以自动检测 USB 驱动器,您需要手动选择一个 ISO 文件。建议使用 .sig 文件进行签名,但可以通过点击“create”来跳过。
使用 win32diskimager
win32diskimager 是另一个图形工具,用于从 Windows 将映像写入 USB stick 或 SD/CF 卡。选择您的 ISO 映像和目标 USB 驱动器盘符(您可能需要先格式化它以分配盘符),然后点击 Write。
使用 USBwriter
此方法不需要任何变通方法,并且与 Linux 下的 dd 一样直接。只需下载 Arch Linux ISO,然后以本地管理员权限使用 USBwriter 工具写入您的 USB 闪存存储器。
使用 USBImager
USBImager 是一个跨平台的图形应用程序,可将压缩的磁盘映像写入和验证到 USB 驱动器,并创建备份。
使用 Rufus
Rufus 是一个多用途的 USB ISO 写入器。它提供图形用户界面,并且不关心驱动器是否正确格式化。
只需选择 Arch Linux ISO,选择您要创建可启动 Arch Linux 的 USB 驱动器,然后点击 START。
使用 Cygwin
确保您的 Cygwin 安装包含 dd 包。
将您的映像文件放在您的主目录中。
C:\cygwin\home\User\
以管理员身份运行 Cygwin(Cygwin 访问硬件需要管理员权限)。要写入您的 USB 驱动器,请使用以下命令:
dd if=archlinux-version-x86_64.iso of=\\.\x: bs=4M
其中 archlinux-version-x86_64.iso 是 cygwin 目录内 iso 映像文件的路径,而 \\.\x: 是您的 USB 闪存驱动器,其中 x 是 Windows 指定的盘符,例如 \\.\d:。
在 Cygwin 6.0 中,使用以下命令找出正确的分区:
cat /proc/partitions
并使用输出中的信息写入 ISO 映像。例如:
dd if=archlinux-version-x86_64.iso of=/dev/sdb bs=4M
使用 dd for Windows
Windows 的 GPL 许可 dd 版本可在 http://www.chrysocome.net/dd 找到。它相对于 Cygwin 的优点是下载量更小。使用方法与上述 Cygwin 说明相同。
首先,下载最新版本的 dd for Windows。下载完成后,将存档的内容解压到 Downloads 目录或其他位置。
现在,以管理员身份启动您的 Command Prompt。接着,使用 cd 命令切换到 Downloads 目录。
如果您的 Arch Linux ISO 在其他位置,您可能需要指定完整路径。为方便起见,您可以将 Arch Linux ISO 放在与 dd 可执行文件相同的文件夹中。命令的基本格式如下:
# dd if=archlinux-version-x86_64.iso od=\\.\x: bs=4M
od 参数,该参数在上述命令中使用。但请注意,此参数仅适用于 dd for Windows,在 dd 的其他实现中找不到。使用 flashnul
flashnul 是一个用于验证闪存(USB-Flash, IDE-Flash, SecureDigital, MMC, MemoryStick, SmartMedia, XD, CompactFlash 等)功能和维护的实用程序。
从命令提示符,用 -p 调用 flashnul,并确定您的 USB 驱动器是哪个设备索引,例如:
C:\>flashnul -p
Avaible physical drives: Avaible logical disks: C:\ D:\ E:\
确定了正确的设备后,您可以通过调用 flashnul 并指定设备索引、-L 和映像路径来将映像写入您的驱动器,例如:
C:\>flashnul E: -L path\to\archlinux-version-x86_64.iso
只要您非常确定要写入数据,请键入 yes,然后等待片刻。如果出现“访问被拒绝”错误,请关闭任何打开的 Explorer 窗口。
在 macOS 中
使用 macOS dd
首先,您需要识别 USB 设备。打开 /Applications/Utilities/Terminal 并使用以下命令列出所有存储设备:
$ diskutil list
您的 USB 设备将显示为类似 /dev/disk2 (external, physical) 的内容。通过检查名称和大小来验证这是您要擦除的设备,然后使用其标识符执行以下命令,而不是 /dev/diskX。
USB 设备通常在 macOS 中是自动挂载的,您必须在用 dd 对其进行块写入之前卸载(不是弹出)它。在 Terminal 中,执行:
$ diskutil unmountDisk /dev/diskX
现在将 ISO 映像文件复制到设备:
- BSD 派生的
dd,包括 macOS 的默认dd,使用小写m后缀。这与本文档其他部分使用的 GNUdd不同。 disk前的r表示原始模式,这使得传输速度大大加快。- 在较新版本的 macOS 中,dd 命令支持
status=progress并可用于显示进度。也可以按如下方式手动查看进度:
# dd if=path/to/archlinux-version-x86_64.iso of=/dev/rdiskX bs=1m
此命令将静默运行。要查看进度,请按 Ctrl+t 发送 SIGINFO。请注意,这里的 diskX 不应包含 s1 后缀,否则 USB 设备将只能在 UEFI 模式下启动,而不能在旧版模式下启动。完成后,macOS 可能会显示“您插入的磁盘无法被此计算机读取”的错误。选择 Ignore。USB 设备将可启动。
使用 USBImager
USBImager 是一个跨平台的图形应用程序,可将压缩的磁盘映像写入和验证到 USB 驱动器,并创建备份。
在 Android 中
使用 EtchDroid
EtchDroid 是 Android 的 OS 映像刷写器。自 Android 5 起,它无需 root 权限即可工作。如果您遇到问题,请查看上游 GitHub。
要创建 Arch Linux 安装程序,请在您的 Android 设备上下载 ISO 映像文件。将 USB 驱动器插入您的设备,如果需要,请使用 USB-OTG 适配器。打开 EtchDroid,选择 Flash raw image,选择您的 Arch ISO,然后选择您的 USB 驱动器。授予 USB API 权限并确认。
在写入映像时,请将手机放在桌子上:许多 USB-OTG 适配器都有点摇晃,您可能会意外拔掉它。
手动格式化
这些方法可以使闪存驱动器保持可用于数据存储。对于单分区布局,额外数据可以写入与 ISO 安装在同一分区。这是与其它操作系统兼容的最佳布局。或者,ISO 可以安装在 已分区设备内的特定分区中,而不影响其他分区,并且数据可以存储在这些其他分区上。
仅 UEFI
对于仅 UEFI 启动,将 ISO 内容提取到 FAT 格式的 USB 闪存驱动器就足够了。
这不需要在驱动器上创建 EFI 系统分区,因为所有 UEFI 都将愉快地从 USB 闪存驱动器启动任何 FAT 卷。最兼容的设置将是使用 MBR 分区表,并具有一个类型为 0c“W95 FAT32 (LBA)”的单一活动(可启动)主分区。[3]
在 GNU/Linux 中
此方法将 ISO 映像中的文件提取到 USB 闪存驱动器。
- 如果尚未完成,请在
/dev/disk/by-id/usb-My_flash_drive上创建 分区表,并在设备上创建 分区(/dev/disk/by-id/usb-My_flash_drive-partn)。 - 如果尚未完成,请将分区格式化为 FAT32。
# mkfs.fat -F 32 /dev/disk/by-id/usb-My_flash_drive-partn
- 挂载文件系统。
# mount /dev/disk/by-id/usb-My_flash_drive-partn /mnt
- 将 ISO 映像提取到挂载的文件系统。
# bsdtar -x -f archlinux-version-x86_64.iso -C /mnt
- 卸载文件系统。
在 Windows 中
此方法将 ISO 映像中的文件复制到 USB 闪存驱动器。
- 对 USB 闪存驱动器进行分区并格式化为 FAT32。
- 右键单击
archlinux-version-x86_64.iso并选择 Mount。 - 导航到新创建的 DVD 驱动器,并将所有文件和文件夹复制到 USB 闪存驱动器。
- 复制完成后,右键单击 DVD 驱动器并选择 Eject。
- 弹出 USB 闪存驱动器。
在 macOS 中
DiskImageMounter 和 Disk Utility 都无法挂载 isohybrid ISO,但由于 macOS 自带 libarchive,因此可以使用 bsdtar 将 ISO 简单地提取到闪存驱动器上。
- 如果尚未完成,请使用 Disk Utility 对 USB 闪存驱动器进行分区并将其格式化为 FAT32。
- 挂载卷。
- 打开 Terminal 应用程序,并使用 bsdtar 将 ISO 映像提取到挂载的文件系统中:
$ bsdtar -x -f archlinux-version-x86_64.iso -C /Volumes/your-flash-drive
- 完成后,卸载并弹出 USB 闪存驱动器。
BIOS 和 UEFI
此方法更复杂,但兼容性最好。对于非常旧的计算机,这是必需的。
在 GNU/Linux 中
/dev/disk/by-id/usb-My_flash_drive-partn。在以下任何命令中,请根据您的系统调整 My_flash_drive 和 n。- 如果尚未完成,请在
/dev/disk/by-id/usb-My_flash_drive上创建 分区表。 - 如果尚未完成,请在设备上创建分区。分区
/dev/disk/by-id/usb-My_flash_drive-partn必须格式化为 FAT32。 - 挂载 USB 闪存设备中的 FAT32 文件系统,并将 ISO 映像的内容 提取到其中。例如:
# mount /dev/disk/by-id/usb-My_flash_drive-partn /mnt # bsdtar -x -f archlinux-version-x86_64.iso -C /mnt
适用于 BIOS 系统的 Syslinux 文件已复制到 /mnt/boot/syslinux/。 卸载 FAT 文件系统,安装 syslinux 和 mtools 包,并运行以下命令使分区可引导:
# umount /mnt # syslinux --directory boot/syslinux --install /dev/disk/by-id/usb-My_flash_drive-partn # dd bs=440 count=1 conv=notrunc if=/usr/lib/syslinux/bios/mbr.bin of=/dev/disk/by-id/usb-My_flash_drive
- 如果
/dev/disk/by-id/usb-My_flash_drive具有 GUID 分区表,请将mbr.bin替换为gptmbr.bin。有关详细信息,请参阅 Syslinux#Manually。 - 对于 MBR 分区表,您需要设置“boot”标志。有关详细信息,请参阅 Syslinux#MBR partition table。
在 Windows 中
- 对于手动格式化,请不要使用任何 **Bootable USB Creator utility** 来创建 UEFI 可启动 USB。对于手动格式化,也不要使用 dd for Windows 将 ISO dd 到 USB 驱动器。
- 在下面的命令中,假设
X:是 Windows 中的 USB 闪存驱动器。 - Windows 使用反斜杠
\作为路径分隔符,因此在以下命令中也使用它。 - 所有命令都应在 Windows 命令提示符**以管理员身份**运行。
>表示 Windows 命令提示符。
- 使用 Rufus USB partitioner 对 USB 驱动器进行分区和格式化。选择分区方案选项为 **MBR for BIOS and UEFI**,文件系统为 **FAT32**。取消选中“Create a bootable disk using ISO image”和“Create extended label and icon files”选项。
- 使用 7-Zip 将 ISO(类似于解压 ZIP 存档)提取到 USB 闪存驱动器。
- 从 https://linuxkernel.org.cn/pub/linux/utils/boot/syslinux/ 下载官方 Syslinux 6.xx 二进制文件(zip 文件)并解压。Syslinux 的版本应与 ISO 映像中使用的版本相同。
- 运行以下命令(在 Windows cmd 提示符下,以管理员身份):
> cd bios\ > for /r %Y in (*.c32) do copy "%Y" "X:\boot\syslinux\" /y > copy mbr\*.bin X:\boot\syslinux\ /y
- 通过运行以下命令将 Syslinux 安装到 USB(在 x64 Windows 上使用
win64\syslinux64.exe):
> cd bios\ > win32\syslinux.exe -d /boot/syslinux -i -a -m X:
- 仅复制文件将导致设备无法启动:最后一个命令将 Syslinux 文件安装到 USB 分区的 VBR,在 MBR 分区表中将分区设置为“active/boot”,并将 MBR 引导代码写入 USB 设备。
- -d 开关需要一个具有正斜杠路径分隔符的路径,就像在 *unix 系统中一样。
仅 BIOS
在 GNU/Linux 中
制作 USB-ZIP 驱动器
对于某些旧的 BIOS 系统,仅支持从 USB-ZIP 驱动器启动。此方法允许您仍然从 USB 硬盘启动。
- 安装 syslinux 和 mtools。
- 使用
ls /dev/disk/by-id/usb-*查找您的 USB 驱动器。 - 键入
mkdiskimage -4 /dev/disk/by-id/usb-My_flash_drive 0 64 32。这需要一些时间。
从这里继续手动格式化方法。由于 ZIP 驱动器的工作方式,分区将是 /dev/disk/by-id/usb-My_flash_drive-part4。
使用多重引导 USB 驱动器
这允许从单个 USB 设备引导多个 ISO,包括 archiso。将现有 USB 驱动器更新到较新的 ISO 比大多数其他方法更简单。请参阅 Multiboot USB drive。
使用 Ventoy
Ventoy 是一个开源工具,用于创建 ISO/WIM/IMG/VHD(x)/EFI 文件的可启动 USB 驱动器。使用 Ventoy,您无需反复格式化磁盘,只需将 ISO/WIM/IMG/VHD(x)EFI 文件复制到 USB 驱动器即可直接引导。您可以一次复制多个文件,Ventoy 将为您提供一个引导菜单来选择它们。它可作为 ventoy-binAUR 使用。
在 Windows 中
从 RAM 加载安装介质
此方法使用 Syslinux 和 Ramdisk(MEMDISK)将整个 Arch Linux ISO 映像加载到 RAM 中。由于这将完全在系统内存中运行,因此您需要确保您要安装此程序的系统具有足够的内存。对于基于 MEMDISK 的 Arch Linux 安装,最低需要 500 MB 到 1 GB 的 RAM。
有关 Arch Linux 系统要求以及 MEMDISK 的更多信息,请参阅 Installation guide 和 此处。供参考,这是 之前的论坛帖子。
准备 USB 闪存驱动器
首先,将 USB 闪存驱动器格式化为 **FAT32**。然后在此新格式化的驱动器上创建以下文件夹。
启动Boot/ISOsBoot/Settings
将所需文件复制到 USB 闪存驱动器
接下来,将您想要引导的 ISO 复制到 Boot/ISOs 文件夹。之后,从以下位置提取最新版本的 syslinux 文件到以下文件夹:
./win32/syslinux.exe到您的系统上的 Desktop 或 Downloads 文件夹。./memdisk/memdisk到您的 USB 闪存驱动器上的Settings文件夹。
创建配置文件
复制所需文件后,导航到 USB 闪存驱动器,进入 Boot/Settings,并创建一个 syslinux.cfg 文件。
INITRD 行上,请务必使用您复制到 ISOs 文件夹的 ISO 文件的名称。/Boot/Settings/syslinux.cfg
DEFAULT arch_iso
LABEL arch_iso
MENU LABEL Arch Setup
LINUX memdisk
INITRD /Boot/ISOs/archlinux-version-x86_64.iso
APPEND iso
有关更多信息,请参阅 Syslinux 文章。
最后步骤
最后,在 syslinux.exe 所在的位置创建一个 *.bat 文件并运行它(如果您使用的是 Vista 或 Windows 7,请“以管理员身份运行”)
C:\Documents and Settings\username\Desktop\install.bat
@echo off syslinux.exe -m -a -d /Boot/Settings X:
不推荐的方法
使用 etcher
etcher 包含分析和第三方广告。请参阅 [4]、[5] 和 [6]。
使用 Universal USB Installer
- 下载页面包含伪造的 Download 按钮,其中可能包含恶意软件。
- Universal USB Installer 不直接写入 ISO,由于 syslinux 版本不匹配,这会破坏 BIOS 引导。请参阅 [7]。
- Arch Linux 安装映像的引导加载程序期望 ISO 内容位于标签为
ARCH_YYYYXX的卷上。Universal USB Installer 不会更新文件系统标签,也不会更正引导加载程序配置。
使用 UNetbootin
- UNetbootin 不直接写入 ISO,由于 syslinux 版本不匹配,这会破坏 BIOS 引导。
- Arch Linux 安装映像的引导加载程序期望 ISO 内容位于标签为
ARCH_YYYYXX的卷上。UNetbootin 不会更新文件系统标签,也不会更正引导加载程序配置。
技巧与提示
向驱动器添加额外的数据分区
有两种方法可以向使用 #Using the ISO as is (BIOS and UEFI) 准备的驱动器添加额外的(第三个)分区。
- 通过创建所需大小的文件系统映像并在写入 ISO 到 USB 闪存驱动器之前将其附加到 ISO。例如,请参阅 Install Arch Linux via SSH#Using a single USB flash drive。
- 通过使用 fdisk 编辑驱动器的 MBR 分区表,而不触及 ISO 9660 或无效的 GPT 结构。这将破坏无效 GPT 中的备份 GPT 头,但这应该无关紧要。
要编辑驱动器上的 MBR 分区表,请运行:
# fdisk -t mbr --wipe never /dev/disk/by-id/usb-My_flash_drive
使用 n 命令创建一个新分区(如果它应该跨越所有可用空间,则保留第一个和最后一个扇区的默认值)。如果您想在其他操作系统中访问它,请使用 t 命令更改 MBR 分区类型 ID(例如,设置为 0c“W95 FAT32 (LBA)”或 07“HPFS/NTFS/exFAT”)。将更改写入磁盘并通过 w 命令退出。
分区后,在新建分区(/dev/disk/by-id/usb-My_flash_drive-part3)上创建文件系统。
故障排除
设备未显示
如果您遇到device did not show up after 30 seconds错误,这是由于/dev/disk/by-label/ARCH_YYYYMM未挂载所致,请尝试将您的USB介质重命名为ARCH_YYYYMM,以便Arch可以找到它。(例如,对于archlinux-2021.02.01-x86_64.iso,请使用ARCH_202102)。
无法设置loop设备:没有此类文件或目录
如果您遇到losetup: /run/archiso/bootmnt/arch/x86_64/airootfs.sfs: failed to set up loop devices: No such file or directory,请尝试使用USB 2.0端口。例如,一些通过USB集线器的USB 3.0端口可能无法正常工作。
其他错误
如果您遇到其他错误,请尝试使用另一个USB设备。有多种情况表明更换设备可以解决所有问题。