# USB Installation Media (简体中文)

翻译状态： 本文是英文页面 USB_Flash_Installation_Media 的翻译，最后翻译时间：2013-10-25，点击这里可以查看翻译后英文页面的改动。

相关文章

- CD Burning

注意: 对于 UEFI 引导方式，用这些内容来创建一份可引导的U盘。本页中的内容适用于 BIOS 引导，可能不能用于 UEFI 引导中。

本文探讨将 Arch 安装映像写入到USB驱动器（也被称为“闪存驱动器”，“USB记忆棒"，“U盘”等）上来引导BIOS系统的各种方法。它有点像是一个 LiveCD 系统（如果你可以称它为"LiveUSB"），因为SquashFS的性质，关机后所有的更改都会丢失。

如果你想把在USB驱动器中完整安装一份Arch Linux（即，使更改具有持久性），参见在U盘中安装Arch Linux。

## Gnu/Linux系统上

### 直接覆盖整个 USB 驱动器

警告:

- 这会永久性的删除 `/dev/sdx` 上的所有数据。
- 这种方法不适用于 UEFI 引导。

小贴士: 先用命令 `lsblk` 确认 没有 挂载该 USB 设备。
注意: 使用 `/dev/sdx` 而不是 `/dev/sdx1`。

    # dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx && sync

#### 怎样恢复你的 USB 驱动器

ISO 镜像是多功能镜像，既可以烧到光盘也能直接写入 USB，所以它不包含一个标准的分区表。

安装 Arch Linux 后，就不需要 USB 安装盘了。你需要往U盘的前 512 字节写零（表示主引导记录中的引导代码和非标准的分区表）来恢复它完整的容量。

    # dd count=1 bs=512 if=/dev/zero of=/dev/sdx && sync

然后用 gparted 创建一个新的分区表（如"msdos"）和文件系统（如 EXT4，FAT32），或者在终端中：

- 对于 EXT2/3/4 （相应地调整），命令是：

1. cfdisk /dev/sdx
2. mkfs.ext4 /dev/sdx1
3. e2label /dev/sdx1 USB_STICK

- 对于 FAT32，安装 dosfstools 软件包并运行：

1. cfdisk /dev/sdx
2. mkfs.vfat -F32 /dev/sdx1
3. dosfslabel /dev/sdx1 USB_STICK

### 不覆盖原有 USB 驱动器

该方法比直接用 `dd` 写入镜像稍微复杂，但优点是不破坏 U 盘的数据存储功能。在开始之前，请确保您的 USB 设备已经格式化为了 FAT32，EXT 2/3/4 或者 Btrfs 分区格式。为便于 UEFI 引导并/或使用其他操作系统， 您需要使用 FAT32。此外，您必须保证已经安装了 syslinux 软件包（版本 4.04 或者更高）。

1. 将 "arch" 文件夹从 ISO 复制到 USB 驱动器。对于 UEFI 主板，按这里的指示。

2. 把 Syslinux 启动程序安装到 USB 驱动器中，把启动代码安装到主引导记录中，并设置第一分区为可启动：

警告: 谨慎使用 `dd` 并保证指向的位置正确。下面的操作针对驱动器本身而非第一分区，这是一个非常常见的错误。
注意: 某些系统的 `mbr.bin` 文件位于 `/usr/share/syslinux/mbr.bin`。

    $ cd /path/to/folder/arch/boot/syslinux   #其中 path/to/folder 是USB驱动器的挂载点。
    # extlinux --install .   #正确输入你看到的命令，包括那个点(.)。
    # dd bs=440 conv=notrunc count=1 if=/usr/lib/syslinux/mbr.bin of=/dev/sdx
    # parted /dev/sdx toggle 1 boot

3. 调整启动配置文件：

警告: 未将驱动器的卷标设置为 "`ARCH_2013XX`" （用适当的发布月份代替）且未使用 UUID (这样就能随意地更改卷标) 将 会导致著名的 30 seconds error。

这里给出您如何同时替换 2 份配置文件中 `archisolabel=ARCH_2013XX` 的部分，使用等价的写法 `archisodevice=/dev/disk/by-uuid/47FA-4071` ，只要使用一行命令：

注意: 运行命令之前要修改 `/dev/sdx1`，否则它将替换为空白（因为 `sdx` 不存在）。

    $ sed -i "s|label=ARCH_.*|device=/dev/disk/by-uuid/$(blkid -o value -s UUID /dev/sdx1)|" archiso_sys{32,64}.cfg

如果你所使用的发行版中 "syslinux" 软件包的版本低于 4.06，对于 FAT32 文件系统（对于 EXT4 没这个必要）的变通方法，`syslinux.cfg` 中 `APPEND` 一行应作替换：

    $ sed -i "s|../../|/arch|" syslinux.cfg

#### 使用 UNetbootin

可以在任何 Linux 发行版或者 Windows 中用 UNetbootin 把你的 ISO 复制到 USB 设备中，但是 Unetbootin 会覆盖 syslinux.cfg，创建的 USB 设备不能正常引导。由于这个原因，不推荐使用 Unetbootin -- 请使用 `dd` 或者这里列出的其它方法。

警告: UNetbootin 覆盖了默认的 `syslinux.cfg`；在USB设备正常引导前需要还原它。

编辑 `syslinux.cfg`：

    sysconfig.cfg

    default menu.c32
    prompt 0
    menu title Archlinux Installer
    timeout 100

    label unetbootindefault
    menu label Archlinux_x86_64
    kernel /arch/boot/x86_64/vmlinuz
    append initrd=/arch/boot/x86_64/archiso.img archisodevice=/dev/sdx1 ../../

    label ubnentry0
    menu label Archlinux_i686
    kernel /arch/boot/i686/vmlinuz
    append initrd=/arch/boot/i686/archiso.img archisodevice=/dev/sdx1 ../../

你必须用你安装 Arch Linux 的位置，即首个系统未使用的字母来替换 `/dev/sdx1` 中的 x（例如，如果你有两个硬盘，使用 `c`。）。你也可以在启动的第一阶段显示菜单的时候按 `Tab` 键改变它。

## Mac OS X 系统

做一些特定操作后才能在 Mac 下使用 `dd` 写入 USB 设备。先插入 USB 设备，OS X 会自动挂载它，然后在终端程序中运行:

    $ diskutil list

用 `mount` 或者 `sudo dmesg | tail`（例如 `/dev/disk1`）来找出 USB 设备的名称，卸载设备上的分区（即，/dev/disk1s1）同时保留设备本身（即，/dev/disk1）：

    $ diskutil unmountDisk /dev/disk1

Now we can continue in accordance with the instructions above (but use if you are using the OS X `dd`, the number comes from `1024*8`). 现在我们可以依照上面写的 Linux 发行版的方法来继续操作（但在 OS X 调用 dd 的时候使用`bs=8192`，这个数字来自于 `1024*8`）。

    dd if=image.iso of=/dev/disk1 bs=8192

      20480+0 records in
      20480+0 records out
      167772160 bytes transferred in 220.016918 secs (762542 bytes/sec)

此时，在物理拔出U盘前，弹出您的USB驱动器可能是个好主意。

    $ diskutil eject /dev/disk1

## Windows 系统

### Win32 DIsk Imager

警告: 这些操作会销毁 U 盘中的所有信息！

首先从这里下载程序。然后解压并运行可执行程序。在 `Image FIle` 部分中选择 Arch Linux ISO，在 `Device` 部分中选择 U 盘的盘符。准备就绪后点击 `Write`。

小贴士: 默认情况下，Win32 Disk Imager 的文件浏览器假设磁盘镜像以 `.img` 扩展名为后缀。但是你可以在下拉列表中把 `Files of type` 变为 `*.*`，再继续选择 Arch Linux ISO。
注意: 安装后你可能需要以这里列出的流程恢复 U 盘。

### USBWriter for Windows

从 http://sourceforge.net/projects/usbwriter/ 下载程序并运行。选择 arch 镜像文件和目标U盘，然后点击 `write` 按钮。现在你应该能够从 U 盘启动安装 Arch Linux。

### 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:\

在本例中，USB 设备的盘符是 E:

当您确定正确的设备后，您可以将镜像写入到您的设备中，通过调用flashnul命令，后面输入您的设备序号，再输入 `-L` 及镜像的完整路径，例如：

    C:\>flashnul E: -L path\to\arch.iso

在您真的确定要写入这些数据时，输入yes，然后等它写入完成。如果您见到拒绝访问的错误提示，关闭所有打开的资源管理器的窗口。

如果是在 Vista 或者 Win7 下，您需要以管理员的身份打开控制台，否则flashnul不能以块设备的方式访问 U 盘，而只能通过 Windows 提供的驱动句柄写入数据。

注意: 请确认您使用的是盘符而不是数字。flashnul 1rc1, Windows 7 x64.

### Cygwin 方式

请确认您安装了Cygwin的 `dd` 包。

小贴士: 如果您不想安装 Cygwin，您可以直接从 这里下载 `dd` for Windows。查看下一节以获得更多信息。

将您的镜像文件放在您的home目录中：

    C:\cygwin\home\John\

以管理员身份运行cygwin（cygwin必须访问硬件）。用下列命令写入到您的USB设备：

    dd if=image.iso of=\\.\[x]: bs=4M

其中 image.iso 要输入 `cygwin` 目录内的 iso 镜像文件名，而 `\\.\[x]`: 里面的 x 是 Windows为您的USB设备指定的盘符，例如 `\\.\d:`。

Cygwin 6.0 版本中可以这样找到正确的分区：

    cat /proc/partitions

然后根据输出信息写入ISO映像，例如：

警告: 这个操作会不可恢复的删除您 USB 设备上的所有文件，所以执行这个操作前请先确定您的 USB 设备中没有任何重要的数据。

    dd if=image.iso of=/dev/sdb bs=4M

### dd for Windows

注意: 某些用户在使用这种方法时碰到了"isolinux.bin missing or corrupt"的问题。

http://www.chrysocome.net/dd 上有基于 GPL 协议的 dd for Windows。相比于 Cygwin，它的优势在于下载量小。使用方法已经在上面的 Cygwin 部分中说明了。

首先下载最新版本的 dd for Windows，并把内容解压到 Downloads 目录或者别的什么地方。 保 现在以管理员身份运行 `命令提示符`。然后切换目录（`cd`）到 Downloads 目录。

如果你的 Arch Linux ISO 在别的地方，你可能需要列出完整路径。方便起见，你可能会把它放在 dd 程序的同一目录中。命令的基本格式像这样：

    dd if=archlinux-2013-XX-xx-dual.iso of=\\.\x: bs=4m

警告: 这条命令会把驱动器的格式和内容按照 ISO 中的来填充。误操作后很可能无法恢复其原先的内容，在执行命令以前要确保你dd 中使用的是正确的驱动器！

用正常的日期和盘符来替换上面的空缺（以 "x" 来表示）

下面是一个实例：

    dd if=ISOs\archlinux-2013.08.01-dual.iso of=\\.\d: bs=4M

### 在内存中加载安装介质

This method uses Syslinux and a Ramdisk (MEMDISK) to load the entire Arch Linux ISO image into RAM. Since this will be running entirely from system memory, you will need to make sure the system you will be installing this on has an adequate amount. A minimum amount of RAM between 500 MB and 1 GB should suffice for a MEMDISK based, Arch Linux install.

这个方法使用 Syslinux (简体中文) 和一个 Ramdisk (MEMDISK) 来把整个 Arch Linux ISO 镜像加载到内存中。因为它将完全运行于系统内存中，您要确保使用这种方法安装的系统有足够的内存。至少 500MB 到 1G 内存就足以在 MEMDISK 上安装 Arch Linux。

小贴士: 一旦安装程序加载完毕，您就可以移除 U 盘，甚至再在另一台机器上用它开始执行整个安装步骤。使用 MEMDISK 还允许你在同一个 U 盘中引导并安装 Arch Linux 到它上面。

#### 准备 U 盘

首先格式化 U 盘分区为 ‘’‘FAT32 文件系统。然后在格式化后的磁盘中创建以下目录：

- `Boot`
  - `Boot/ISOs`
  - `Boot/Settings`

#### 复制需要的文件到 U 盘

然后，把要引导的 ISO 复制到 `Boot/ISOs` 目录。接着，从这里 最新版的 syslinux 中提取以下文件并复制到下列目录：

- `./win32/syslinux.exe` 到桌面或者系统中的 Downloads 目录。
- `./memdisk/memdisk` 到 U 盘中的 {{ic|Settings} 目录。

#### 创建配置文件

复制完所需文件后，在 U 盘的 /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-2013.08.01-dual.iso
             APPEND iso

更多关于 Syslinux 的信息，参见 Arch Wiki 文章。

#### 最后的步骤

最后，在 `syslinux.exe` 所在目录创建一个 `*.bat` 文件并运行（如果是在 Vista 或者 Windows 7 下，需要“以管理员身份运行”）：

    C:\Documents and Settings\username\Desktop\install.bat

     @echo off
     syslinux.exe -m -a -d /Boot/Settings X:

### Universal USB Installer

Windows 下的工具 [1] 可以快速创建包含多个 Linux 发行版安装程序的 Live USB 介质。创建后可以添加或删除安装程序，而不必重新格式化 USB。

## 故障排除

注意: 对于 MEMDISK （内存中引导整个ISO）方法，如果你尝试引导 i686 版本的系统时碰到了著名的 30 seconds error，那么在 `Boot Arch Linux (i686)` 条目上按 `Tab` 键，然后在末尾添加 `vmalloc=448M`。参考： 如果你的映像大于 128MiB 且你使用的是32位操作系统，你必须增加最大内存使用参数vmalloc。(*)
注意: 如果你碰到因 `/dev/disk/by-label/ARCH_XXXXXX` 未挂载而导致的 30 seconds error，可尝试重命名你的 USB 媒介为 `ARCH_XXXXXX`（例如 `ARCH_201302`）。

## 参见

- Gentoo liveusb 文档

Category:

- Getting and installing Arch (简体中文)