USB 闪存安装介质
本页面讨论了多种跨平台方法,用于创建可从 BIOS 和 UEFI 系统启动的 Arch Linux 安装 USB 驱动器(也称为“闪存驱动器”、“U 盘”、“USB 密钥”等)。最终得到的是一个 Live USB 系统,可用于安装 Arch Linux、系统维护或恢复目的;由于对 / 使用了 Overlayfs,计算机关闭后所有更改都会丢失。
如果您希望从 USB 驱动器进行完整的 Arch Linux 安装(即具有持久设置),请参阅 在可移动介质上安装 Arch Linux。如果您想将可启动的 Arch Linux U 盘用作救援 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
- pv(1):
# pv path/to/archlinux-version-x86_64.iso --output=/dev/disk/by-id/usb-My_flash_drive --sync
- tee(1):
# tee < path/to/archlinux-version-x86_64.iso > /dev/disk/by-id/usb-My_flash_drive
请参阅 [1] 和 [2] 以了解这些工具的对比和观点,以及为什么 dd 可能是最不适合的工具,并注意 cat(支持 splice(2) 系统调用)比 dd 更快。
- 在执行相应的命令后,以 root 权限运行
sync可以确保在移除设备之前,缓冲区已完全写入设备。 - 如果 USB 的 Arch ISO 的 UEFI 版本挂起或无法加载,请尝试在同一个 USB 驱动器上重复多次创建介质的过程。如果这不起作用,您也可以尝试更新主板固件。
wipefs --all /dev/disk/by-id/usb-My_flash_drive 来删除 ISO 9660 文件系统签名,然后再进行重新分区和重新格式化。GNOME 磁盘工具
运行 GNOME 的 Linux 发行版可以通过 nautilus 和 gnome-disk-utility 轻松制作 Live USB。只需右键单击 .iso 文件,然后选择用磁盘映像写入器打开。当 GNOME 磁盘工具打开时,在目标下拉菜单中指定闪存驱动器并单击开始恢复。
KDE ISO Image Writer
KDE ISO Image Writer 可以通过 isoimagewriter 下载。它可以自动检测 USB 驱动器,您需要手动选择一个 ISO 文件。建议使用 .sig 文件进行签名验证,但也可以通过单击“创建”来跳过。
MultiWriter
gnome-multi-writer 是一个基于 GTK3 的简单图形工具,用于将 ISO 文件同时写入一个或多个 USB 设备。
Popsicle
Popsicle 是 PopOS 开发团队制作的一个工具,用于并行地将 ISO 文件闪存到多个 USB 设备。它由 Rust 编写并使用 GTK。它在 AUR 中作为 popsicleAUR 提供。
SUSE Studio ImageWriter
SUSE Studio ImageWriter 是 openSUSE 开发团队制作的基于 Qt 的工具。它在 AUR 中作为 imagewriterAUR 提供。
USBImager
USBImager 是一个跨平台的图形化应用程序,用于将压缩磁盘映像写入 USB 驱动器并进行验证,同时还能创建备份。它在 AUR 中作为 usbimagerAUR 提供。
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)。
在 Windows 中
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
GPL 授权的 dd Windows 版本可在 http://www.chrysocome.net/dd 获取。相较于 Cygwin,它的优势在于下载量较小。请按照上述 Cygwin 的说明使用它。
首先,下载最新版本的 dd for Windows。下载完成后,将归档文件的内容解压到 Downloads 目录或其他位置。
现在,以管理员身份启动命令提示符。接下来,使用 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:\
当您确定了正确的设备后,可以通过调用带有设备索引、-L 参数以及指向您镜像路径的 flashnul 来将镜像写入驱动器,例如:
C:\>flashnul E: -L path\to\archlinux-version-x86_64.iso
只要您确定要写入数据,请输入 yes,然后等待它完成写入。如果您收到“拒绝访问”错误,请关闭所有打开的资源管理器窗口。
KDE ISO Image Writer
KDE ISO Image Writer 可以作为 .exe 文件在 isoimagewriter 下载。它可以自动检测 USB 驱动器,您需要手动选择一个 ISO 文件。建议使用 .sig 文件进行签名验证,但也可以通过单击“创建”来跳过。
Rufus
Rufus 是一个多用途的 USB ISO 写入器。它提供了一个图形用户界面,并且不介意驱动器是否已正确格式化。
只需选择 Arch Linux ISO,选择您要创建可启动 Arch Linux 的 USB 驱动器,然后单击开始。
USBImager
USBImager 是一个跨平台的图形化应用程序,用于将压缩磁盘映像写入 USB 驱动器并进行验证,同时还能创建备份。
USBwriter
此方法不需要任何变通方法,并且像 Linux 下的 dd 一样直接。只需下载 Arch Linux ISO,并利用本地管理员权限使用 USBwriter 实用程序将其写入您的 USB 闪存设备。
win32diskimager
win32diskimager 是另一个用于从 Windows 将镜像写入 USB 闪存盘或 SD/CF 卡的图形工具。选择您的 ISO 镜像和目标 USB 驱动器盘符(您可能需要先格式化以分配盘符),然后单击 Write(写入)。
在 macOS 中
macOS dd
首先,您需要识别 USB 设备。打开 /Applications/Utilities/Terminal 并使用以下命令列出所有存储设备:
$ diskutil list
您的 USB 设备将显示为类似 /dev/disk2 (external, physical) 的信息。通过检查名称和大小确认这是您要擦除的设备,然后在下面的命令中使用其标识符,而不是 /dev/diskX。
USB 设备在 macOS 中通常会自动挂载,在用 dd 进行块写入之前,您必须将其卸载(而不是弹出)。在终端中执行:
$ diskutil unmountDisk /dev/diskX
现在将 ISO 镜像文件复制到该设备:
- 源自 BSD 的
dd(包括 macOS 默认的dd)使用小写m后缀。这与本文其他部分使用的 GNUdd不同。 disk前面的r代表原始模式(raw mode),这会使传输速度快得多。- 在较新版本的 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 可能会提示您插入的磁盘此计算机无法读取。请选择忽略。USB 设备即刻可启动。
USBImager
USBImager 是一个跨平台的图形化应用程序,用于将压缩磁盘映像写入 USB 驱动器并进行验证,同时还能创建备份。
在 Android 中
EtchDroid
EtchDroid 是一个 Android 操作系统的镜像刷写工具。自 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 和 磁盘工具 都无法挂载 isohybrid ISO,但由于 macOS 随附了 libarchive,可以使用 bsdtar 将 ISO 直接解压到闪存驱动器上。
- 如果尚未完成,请使用磁盘工具对 USB 闪存驱动器进行分区并将分区格式化为 FAT32。
- 挂载该卷。
- 打开终端应用程序并使用 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(以实现与所有 UEFI 实现的兼容性)。 - 挂载位于 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 分区表,请用gptmbr.bin替换mbr.bin。有关详细信息,请参阅 Syslinux#手动操作。 - 对于 MBR 分区表,您需要设置“boot”(启动)标志。有关详细信息,请参阅 Syslinux#MBR 分区表。
在 Windows 中
- 对于手动格式化,请勿使用任何可启动 USB 创建器实用程序来创建 UEFI 可启动 USB。对于手动格式化,也不要使用 dd for Windows 将 ISO dd 到 USB 驱动器。
- 在下方的命令中,假定
X:为 Windows 中的 USB 闪存驱动器。 - Windows 使用反斜杠
\作为路径分隔符,因此下方的命令也使用此分隔符。 - 所有命令都应在 Windows 命令提示符下以管理员身份运行。
>表示 Windows 命令提示符。
- 使用 Rufus USB 分区器对 USB 驱动器进行分区和格式化。将分区方案选项选择为用于 BIOS 和 UEFI 的 MBR,并将文件系统选择为 FAT32。取消选中“使用 ISO 镜像创建可启动磁盘”和“创建扩展标签和图标文件”选项。
- 使用 7-Zip 将 ISO(类似于解压 ZIP 归档文件)解压到 USB 闪存驱动器。
- 从 https://linuxkernel.org.cn/pub/linux/utils/boot/syslinux/ 下载官方 Syslinux 6.xx 二进制文件(zip 文件)并解压。Syslinux 的版本应与 ISO 镜像中使用的版本相同。
- 运行以下命令(在 Windows 命令提示符下,以管理员身份):
> 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 分区表中将分区设置为“活动/启动”,并将 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 比大多数其他方法更简单。
在 GNU/Linux 中
请参阅 多重引导 USB 驱动器。
在 Windows 中:使用 Syslinux 和 memdisk
此方法使用 Syslinux 和 Ramdisk (MEMDISK) 将整个 Arch Linux ISO 镜像加载到 RAM 中。由于这将完全在系统内存中运行,您需要确保安装系统的机器拥有充足的内存。对于基于 MEMDISK 的 Arch Linux 安装,500 MB 到 1 GB 之间的最小内存量应该足够了。
有关 Arch Linux 系统要求以及 MEMDISK 要求的信息,请参阅 安装指南 和 此处。作为参考,这是 之前的论坛帖子。
准备 USB 闪存驱动器
首先将 USB 闪存驱动器格式化为 FAT32。然后在刚格式化的驱动器上创建以下文件夹。
启动Boot/ISOsBoot/Settings
将必要文件复制到 USB 闪存驱动器
接下来,将您想要引导的 ISO 复制到 Boot/ISOs 文件夹。之后,从 此处 获取最新版本的 syslinux,并解压以下文件到对应文件夹:
./win32/syslinux.exe复制到您系统上的桌面或下载文件夹。./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]。
UNetbootin
- UNetbootin 不会直接写入 ISO,由于 syslinux 版本差异,这会破坏 BIOS 引导。
- Arch Linux 安装镜像的引导加载程序期望 ISO 内容位于具有年和月标签 (
ARCH_YYYYXX) 的卷上。UNetbootin 不会更新文件系统标签,也不会校正引导加载程序配置。
Universal USB Installer
- 下载页面包含可能含有恶意软件的虚假 Download 按钮。
- Universal USB Installer 不会直接写入 ISO,由于 syslinux 版本差异,这会破坏 BIOS 引导。请参阅 [7]。
- Arch Linux 安装镜像的引导加载程序期望 ISO 内容位于具有年和月标签 (
ARCH_YYYYXX) 的卷上。Universal USB Installer 不会更新文件系统标签,也不会校正引导加载程序配置。
技巧与提示
向驱动器添加额外数据分区
有两种方法可以向使用 #直接使用 ISO (BIOS 和 UEFI) 准备的驱动器添加额外(第三)分区。
- 通过创建一个所需大小的文件系统镜像并将其附加到 ISO(在将 ISO 写入 USB 闪存驱动器之前)。请参阅 通过 SSH 安装 Arch Linux#使用单个 USB 闪存驱动器 获取示例。
- 通过使用 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) 上创建文件系统。
故障排除
设备未显示
如果您因为 /dev/disk/by-label/ARCH_YYYYMM 未挂载而收到 device did not show up after 30 seconds 错误,请尝试将您的 USB 介质重命名为 ARCH_YYYYMM,以便 Arch 可以找到它。(例如,对于 archlinux-2021.02.01-x86_64.iso,请使用 ARCH_202102)。
无法设置循环设备:没有那个文件或目录
如果您收到 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 设备。在多种场景中,更换设备解决了所有问题。