Difference between revisions of "USB flash installation media (简体中文)"

From ArchWiki
Jump to: navigation, search
(update translation)
(update translation)
Line 10: Line 10:
 
[[ru:USB Installation Media]]
 
[[ru:USB Installation Media]]
 
[[tr:USB_ile_kurulum]]
 
[[tr:USB_ile_kurulum]]
{{TranslationStatus (简体中文)|USB_Installation_Media|2013-02-10|246830}}
+
[[zh-TW:USB Installation Media]]
 +
{{TranslationStatus (简体中文)|USB_Installation_Media|2013-03-05|248213}}
 
{{Article summary start|概要}}
 
{{Article summary start|概要}}
 
{{Article summary text|多平台下创建可引导USB记忆棒的说明,它可用于安装Arch Linux、系统维护或者恢复。}}
 
{{Article summary text|多平台下创建可引导USB记忆棒的说明,它可用于安装Arch Linux、系统维护或者恢复。}}
Line 125: Line 126:
 
=== Linux Live USB Creator ===
 
=== Linux Live USB Creator ===
  
{{警告|这种方法不能用于 dual architecture iso。}}
+
{{警告|这种方法不能用于 dual architecture iso ('''已提供解决方案''')。}}
  
 
[http://www.linuxliveusb.com/ Linux Live USB Creator] 能用使用您手动下载的 iso 文件,或者自动下载需要的 iso 文件,然后制作一个可引导的 USB key 来安装 Arch。它还支持VirtualBox中USB key的自动安装,用于在Windows里启动Arch。您可以访问 [http://www.linuxliveusb.com/ 主页] 来获得更多信息。
 
[http://www.linuxliveusb.com/ Linux Live USB Creator] 能用使用您手动下载的 iso 文件,或者自动下载需要的 iso 文件,然后制作一个可引导的 USB key 来安装 Arch。它还支持VirtualBox中USB key的自动安装,用于在Windows里启动Arch。您可以访问 [http://www.linuxliveusb.com/ 主页] 来获得更多信息。
 +
 +
'''问题:''' 使用 Linux Live USB(LiLi) Creator 把 dual architecture iso 写入到 USB 时,LiLi 会默认把 USB 的卷标改为 ''MYLINUXLIVE'',但文件 ''archiso-x86_64.conf'' 中却使 linux 去寻找以发布的年月命名的安装媒介,例如:ARCH_201302。因此会发生著名的 30 second error。
 +
 +
'''解决方法:''' 有两种方案来解决这个问题:
 +
* 打开 USB 中的 /loader/archiso-x86_64.conf,把最后一行包含 archisolabel=something 改成你的 USB 的卷标,例如:如果你的 USB 卷标是 MYLINUXLIVE,那么这个文件应该看上去像这样:
 +
 +
{| border="1"
 +
|+ /loader/archiso-x86_64.conf:
 +
|''title  Arch Linux archiso x86_64 UEFI USB
 +
 +
linux  /arch/boot/x86_64/vmlinuz
 +
 +
initrd  /arch/boot/x86_64/archiso.img
 +
 +
options archisobasedir=arch archisolabel=MYLINUXLIVE''
 +
|}
 +
 +
* 或者你可以修改U盘的卷标为 ''/loader/archiso-x86_64.conf'' 文件中 ''archisolabel'' 那项的值。''autorun.inf'' 中也要改成相同的卷标,否则它会变回为 LiLi 的默认值 ''MYLINUXLIVE''。
  
 
=== UNetbootin ===
 
=== UNetbootin ===

Revision as of 16:24, 4 March 2013

翻译状态: 本文是英文页面 USB_Installation_Media翻译,最后翻译时间:2013-03-05,点击这里可以查看翻译后英文页面的改动。
概要 help replacing me
多平台下创建可引导USB记忆棒的说明,它可用于安装Arch Linux、系统维护或者恢复。
相关
CD Burning

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

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

注意: 对于 UEFI 引导方式,用这些内容来创建一份可引导的 USB记忆棒。

Gnu/Linux系统上

直接覆盖整个 USB 驱动器

警告: 这会永久性的删除 /dev/sdx 上的所有数据。
注意: 这种方法在UEFI引导时无效。
注意: 先用命令lsblk确认USB设备已插上但并未被挂载,然后确保使用的是 /dev/sdx 而不是 /dev/sdx1这是一个很常见的错误!
# dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx
注意: 一些旧的固件不能理解伪分区的起始偏移量为0的 isohybrid hack。参见 https://bugs.archlinux.org/task/32189 中一个涉及 isohybrid.pl 的修正。

怎样恢复你的 USB 驱动器

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

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

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

然后用 gparted 创建一个新的分区表(如"msdos")和文件系统(如 EXT4,FAT32),或者在终端中:

  • 对于 EXT2/3/4 (相应地调整),命令是:
# cfdisk /dev/sdx
# mkfs.ext4 /dev/sdx1
# e2label /dev/sdx1 USB_STICK
  • 对于 FAT32,安装 dosfstools 软件包并运行:
# cfdisk /dev/sdx
# mkfs.vfat -F32 /dev/sdx1
# 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 /media/somefolder/arch/boot/syslinux   #其中somefolder是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. 调整启动配置文件:

注意: 尽管您可以将 USB 驱动器的 label 设置为 "ARCH_2012XX" (用适当的发布月份代替),但一种可能更好的方法是使用 UUID(这样你之后想要重命名驱动器的 label 时可以在想要重命名驱动器的 label 时毋用担心出错,你也可以不设置它)。 错误地设置 label 或 UUID 会导致著名的 30 seconds error

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

注意: 运行命令之前要修改 /dev/sdx1,否则它将替换为空白(因为 sdx 不存在)。
$ sed -i "s|label=ARCH_2012.*|device=/dev/disk/by-uuid/$(lsblk -no UUID /dev/sdx1)|" archiso_sys{32,64}.cfg

如果你所使用的发行版中 "syslinux" 软件包的版本低于 4.06,对于 FAT32 文件系统(对于 EXT4 没这个必要)的变通方法,syslinux.cfgAPPEND 一行应作替换:

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

Mac OS X 系统

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

diskutil list

找出您的USB设备的命名,我的是/dev/disk1。(使用 `mount` 或 `sudo dmesg | tail`。) 然后运行:

diskutil unmountDisk /dev/disk1

卸载 USB 设备上的分区(即 /dev/disk1s1) 但保持设备本身(即 /dev/disk1)。 现在我们可以依照上面写的 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 系统

Image Writer for Windows

http://launchpad.net/win32-image-writer 下载程序并运行。选择 arch 镜像文件和 U 盘。Win32 Disk Imager 的文件浏览器默认使用 .img 后缀,如果下载的镜像是 .iso 后缀,您需要手动输入它的名称,这后缀的差异令人不爽,但是映像的写入都很正常。点击写入按钮,然后就能够从 U 盘启动并从U盘安装 Arch Linux了。

The Universal USB Installer

Universal USB Installer 是一个 Live Linux USB 制作器。它允许你选择 Linux 发行版并安装到您的 USB 闪存驱动器。

注意: The Universal USB Installer 设置 USB 分区的卷标为 PENDRIVE,导致启动失败。这是因为 Arch 不能在默认路径 /dev/disk/by-label/ARCH20130201 找到安装媒介。因此推荐使用 Image Writer for Windows。

Linux Live USB Creator

警告: 这种方法不能用于 dual architecture iso (已提供解决方案)。

Linux Live USB Creator 能用使用您手动下载的 iso 文件,或者自动下载需要的 iso 文件,然后制作一个可引导的 USB key 来安装 Arch。它还支持VirtualBox中USB key的自动安装,用于在Windows里启动Arch。您可以访问 主页 来获得更多信息。

问题: 使用 Linux Live USB(LiLi) Creator 把 dual architecture iso 写入到 USB 时,LiLi 会默认把 USB 的卷标改为 MYLINUXLIVE,但文件 archiso-x86_64.conf 中却使 linux 去寻找以发布的年月命名的安装媒介,例如:ARCH_201302。因此会发生著名的 30 second error。

解决方法: 有两种方案来解决这个问题:

  • 打开 USB 中的 /loader/archiso-x86_64.conf,把最后一行包含 archisolabel=something 改成你的 USB 的卷标,例如:如果你的 USB 卷标是 MYLINUXLIVE,那么这个文件应该看上去像这样:
/loader/archiso-x86_64.conf:
title Arch Linux archiso x86_64 UEFI USB

linux /arch/boot/x86_64/vmlinuz

initrd /arch/boot/x86_64/archiso.img

options archisobasedir=arch archisolabel=MYLINUXLIVE

  • 或者你可以修改U盘的卷标为 /loader/archiso-x86_64.conf 文件中 archisolabel 那项的值。autorun.inf 中也要改成相同的卷标,否则它会变回为 LiLi 的默认值 MYLINUXLIVE

UNetbootin

警告: 不要使用 UNETBOOTIN. 此程序会覆盖默认的syslinux.cfg并中断启动过程。请使用其它程序或方法。

Flashnul 方式

flashnul 是一个用来检测和维护闪存(USB-Flash,IDE-Flash,SecureDigital,MMC,MemoryStick,SmartMedia,XD,CompactFlash 等)的工具。

从命令提示符下,调用 flashnul –p 命令来确定 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. -bgalakazam

Cygwin方式

请确认您安装了Cygwin的 dd 包。 或者如果您不想安装 Cygwin,您可以直接从 http://www.chrysocome.net/dd 下载 dd for windows。

将您的镜像文件放在您的home目录中,在我的例子中是:

C:\cygwin\home\John\

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

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

其中image.iso要输入cypwin目录内的 iso 镜像文件名,而 \\.\[x]: 里面的 x 是 Windows为您的USB设备指定的盘符。在我的例子里是“\\.\d:”。

在cygwin 6.0版本上可以这样查看正确的分区

cat /proc/partitions

然后根据输出信息写入ISO映像,例如:

警告: 这个操作会不可恢复的删除您USB设备上的所有文件,所以执行这个操作前请先确定您的USB设备中没有任何重要的数据。
dd if=image.iso of=/dev/sdb

dd for Windows

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

从内存中引导整个 ISO

这个方法使用 Syslinux (简体中文)MEMDISK 来把整个 ISO 镜像加载到内存中,当然您要确保你有足够的内存来载入整个镜像。一旦它加载完毕,您看到了图形菜单,您就可以移除 USB 存储器,甚至在另一台机器上使用它再一次开始执行整个步骤。 这种方法还允许您安装系统到引导的同一个U盘中。

1. 格式化 USB 存储器为 FAT32 分区格式,并创建以下目录:

X:\Boot
X:\Boot\ISOs
X:\Boot\Settings

2. 把您要引导的 ISO 复制到 "ISOs" 目录 (例如 archlinux-2012.08.04-dual.iso),解压缩 最新版(例如 syslinux-4.05.zip):

× ./win32/syslinux.exe 到桌面,或者任何地方。

× ./memdisk/memdisk 到 "Settings" 目录。

同时在这个目录下创建一个 syslinux.cfg 文件:

X:\Boot\Settings\syslinux.cfg
DEFAULT arch_iso
 
 LABEL arch_iso
         MENU LABEL Arch Setup
         LINUX memdisk
         INITRD /Boot/ISOs/archlinux-2012.11.01-dual.iso
         APPEND iso
小贴士: 如果您想添加更多的发行版 (测试过 Debian 和 Parted Magic),您可以编辑这个文件。您也可以设置菜单和背景图来代替使用 Arch Linux ISO 中的默认值。请参考 Syslinux

3. 最后,于syslinux.exe的所在目录中创建一个 *.bat 文件并运行(如果是在 Vista 或者 Windows 7 下,需要“以管理员身份运行”):


C:\Documents and Settings\username\Desktop\install.bat
 @echo off
 syslinux.exe -m -a -d /Boot/Settings X:

结束了。

故障排除

注意: 对于 MEMDISK(内存中引导整个ISO)方法,如果你尝试引导 i686 版本的系统时碰到了著名的 30 seconds error,那么在 Boot Arch Linux (i686) 条目上按 Template:Keypress 键,然后在末尾添加 vmalloc=448M。这个方法仅适用于 MEMDISK 方法。参考: 如果你的映像大于 128MiB 且你使用的是32位操作系统,你必须增加最大内存使用参数vmalloc(*)
注意: 一般情况下,如果你碰到因 /dev/disk/by-label/ARCH_XXXXXX 未挂载而导致的 30 seconds error,可尝试重命名你的 USB 媒介为 ARCH_XXXXXX,例如 ARCH_201302,然后再一次尝试从它引导。这样应该能解决此错误。

参见