USB 闪存安装介质
本页面讨论了如何在 BIOS 和 UEFI 系统中创建 Arch Linux 安装器 USB 驱动器(也称为“闪存驱动器”、“USB 棒”、“USB 密钥”等)的各种多平台方法。结果将是一个 live USB 系统,可用于安装 Arch Linux、系统维护或恢复目的,并且由于对 /
使用 Overlayfs,一旦计算机关闭,所有更改都将被丢弃。
如果您想从 USB 驱动器运行 Arch Linux 的完整安装(即具有持久设置),请参阅 在可移动介质上安装 Arch Linux。如果您想将可启动的 Arch Linux USB 棒用作救援 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 镜像写入工具
KDE ISO 镜像写入工具可以通过 isoimagewriter 下载。它可以自动检测 USB 驱动器,您需要手动选择 ISO 文件。建议使用 .sig 文件进行签名,但可以通过单击“创建”跳过。
使用 GNOME 磁盘工具
运行 GNOME 的 Linux 发行版可以通过 nautilus 和 gnome-disk-utility 轻松制作 live USB。只需右键单击 .iso 文件,然后选择使用磁盘映像写入器打开。当 GNOME 磁盘工具打开时,从目标下拉菜单中指定闪存驱动器,然后单击开始恢复。
使用 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 镜像写入工具
KDE ISO 镜像写入工具可以从 isoimagewriter 下载 .exe 文件。它可以自动检测 USB 驱动器,您需要手动选择 ISO 文件。建议使用 .sig 文件进行签名,但可以通过单击“创建”跳过。
使用 win32diskimager
win32diskimager 是另一个图形工具,用于从 Windows 将映像写入 USB 棒或 SD/CF 卡。选择您的 ISO 镜像和目标 USB 驱动器盘符(您可能需要先格式化它以分配盘符),然后单击写入。
使用 USBwriter
此方法不需要任何变通方法,并且像 Linux 下的 dd
一样简单直接。只需下载 Arch Linux ISO,并使用本地管理员权限使用 USBwriter 实用程序写入您的 USB 闪存。
使用 USBImager
USBImager 是一个多平台图形应用程序,用于将压缩磁盘映像写入 USB 驱动器并验证,以及创建备份。
使用 Rufus
Rufus 是一款多用途 USB ISO 写入工具。它提供图形用户界面,并且不关心驱动器是否已正确格式化。
只需选择 Arch Linux ISO、您要创建可启动 Arch Linux 的 USB 驱动器,然后单击开始。
使用 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
目录或其他位置。
现在,以管理员身份启动您的命令提示符。接下来,将目录 (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 闪存、IDE 闪存、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,然后稍等片刻即可完成写入。如果您收到访问被拒绝错误,请关闭您打开的任何资源管理器窗口。
在 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
用于原始模式,这使得传输速度更快。- 在较新版本的 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-OTG 适配器将 USB 驱动器插入您的设备。打开 EtchDroid,选择刷写原始镜像,选择您的 Arch ISO,然后选择您的 USB 驱动器。授予 USB API 权限并确认。
在写入镜像时,将您的手机放在桌子上:很多 USB-OTG 适配器有点摇晃,您可能会不小心拔掉它。
使用手动格式化
BIOS 和 UEFI
在 GNU/Linux 中
此方法比使用 dd
直接写入镜像更复杂,但它确实使闪存驱动器可用于数据存储(也就是说,ISO 安装在已分区设备内的特定分区中,而不会更改其他分区)。
/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#手动。 - 对于 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 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 分区表中的“活动/启动”,并将 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
。
仅 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
并选择挂载。 - 导航到新创建的 DVD 驱动器,并将所有文件和文件夹复制到 USB 闪存驱动器。
- 复制完成后,右键单击 DVD 驱动器并选择弹出。
- 弹出 USB 闪存驱动器。
在 macOS 中
DiskImageMounter 和 Disk Utility 都无法挂载 isohybrid ISO,但由于 macOS 附带了 libarchive,因此可以使用 bsdtar 将 ISO 简单地提取到闪存驱动器上。
- 如果尚未完成,请使用 Disk Utility 对 USB 闪存驱动器进行分区并将分区格式化为 FAT32。
- 挂载卷。
- 打开终端应用程序并使用 bsdtar 将 ISO 镜像提取到挂载的文件系统
$ bsdtar -x -f archlinux-version-x86_64.iso -C /Volumes/your-flash-drive
- 完成后,卸载并弹出 USB 闪存驱动器。
使用多启动 USB 驱动器
这允许从单个 USB 设备启动多个 ISO,包括 archiso。与大多数其他方法相比,将现有 USB 驱动器更新到更新的 ISO 更简单。请参阅多启动 USB 驱动器。
使用 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 要求的更多信息,请参阅安装指南和此处。作为参考,这是之前的论坛帖子。
准备 USB 闪存驱动器
首先将 USB 闪存驱动器格式化为 FAT32。 然后在新格式化的驱动器上创建以下文件夹。
Boot
Boot/ISOs
Boot/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]。
使用 Universal USB Installer
- 下载页面包含可能含有恶意软件的虚假下载按钮。
- 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 不会更新文件系统标签,也不会更正引导加载程序配置。
技巧和窍门
向驱动器添加额外的数据分区
有两种方法可以向使用 #按原样使用 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 设备。 在多种情况下,它解决了所有问题。