前记
"I use Arch btw"
每当你在互联网上看到这句话时,你就知道又有一个 Arch 用户要
拿自己穿长筒袜的图片来传教了
(bushi)。
如果你不知道什么是 Arch Linux ,请停止阅读此文,因为你很可能更适合继续使用 Windows 而非 Arch Linux 。
而对于许多具有一定计算机操作能力而愿意装个 Arch 尝尝鲜的电脑用户来说,他们往往会被 Arch 安装界面劝退。这也确实,毕竟就算官方安装教程摆在那里,大部分人还是会对纯黑色的命令行界面感到非常陌生而无所适从,而且很容易一不小心就漏掉几步,前功尽弃。
所以,这次让我们用一个安装实战的图文流解说来一步步啃掉这些硬骨头,最终得到一个能用的 Arch 系统,进而三生万物,不断扩展定制可能。
注意
- 本解说基于 UEFI 模式下对一台挂载 480G 硬盘、有线网络连接、AMD CPU 的虚拟机全新安装。
- 本解说会大量引用 Arch Linux 中文维基的内容,但我不保证这篇文章能随中文维基更新同步更新。如果两者间有冲突,请以 Arch Linux 中文维基的内容为准。
- 请在继续阅读前先阅读一遍官方中文维基安装指南,这样你才能至少部分读懂下文到底在讲什么。
- 不建议初学者用 archinstall 走捷径。[^1]
安装准备
以使用 rufus 为例:
- 插入 U 盘
- 在以下界面点击选择按钮,选择你下载好的镜像,然后其他设置按照下图就行,最后点击开始

然后等完成之后,安装介质就准备好了。
把 U 盘插到你要进行安装的电脑上,然后进 BIOS 更改开机选项,如果正确的话你应该能看到下图:

不要动,或者以第一个选项启动,然后安装就正式开始了。
安装过程
如果一切正常,你应该会看到这个界面:

正常而言,如果用的是有线连接,那么你已经连上互联网了。
连接到互联网
要在 Live 环境中配置网络连接,请遵循以下步骤:
- 确保系统已经列出并启用了网络接口,用 ip-link(8) 检查:
# ip link- 对于无线局域网(Wi-Fi)和无线广域网(WWAN),请确保网卡未被 rfkill 禁用。
- 连接到网络:
- 配置网络连接:
- DHCP:对于有线以太网、无线局域网(WLAN)和无线广域网(WWAN)网络接口来说,动态 IP 地址和 DNS 服务器分配(由 systemd-networkd 和 systemd-resolved 提供功能)能够开箱即用。
- 静态 IP 地址:按照网络配置 #静态 IP 地址进行操作。
- 用 ping 检查网络连接:
# ping ping.archlinux.org** 注意:** 默认情况下,安装映像在启动时已经预先配置好并启用了 systemd-networkd、systemd-resolved、iwd 和 ModemManager。但在已经安装完成了的系统之中并非如此。
然后更新下系统时间,输入:
timedatectl
之后再用
fdisk -l #此处为小写字母l
来查看硬盘设备(见下图)

可以看到,我们的硬盘应该是 /dev/sda 。
结果中以
rom、loop或者airootfs结尾的设备可以被忽略。结果中以rpmb、boot0或者boot1结尾的mmcblk*设备也可以被忽略。
接下来我们就该给硬盘分区了。
对于一个选定的设备,以下分区是必需的:
请使用分区工具(fdisk 、parted、cfdisk 等等)修改分区表。例如:
# cfdisk /dev/要被分区的磁盘注意:
花时间规划一个长期的分区方案,以避免将来需要有风险和复杂的转换或重新分区。
如果要从中启动的磁盘已经有一个 EFI 分区,请不要创建另一个 EFI 分区,而是使用现有分区。
Swap 交换空间可以在 Swap# 交换文件 上为支持它的文件系统设置。或者,你也可以在安装完毕后配置基于 zram 的 swap 以避免使用基于磁盘的 swap。
………
另请参阅布局示例。
在这个示例中,我们应该给硬盘创造以下分区:
-
1GB EFI 分区
-
4GB SWAP
-
475GB / 挂载点
输入
cfdisk /dev/sda你应该看到这个界面:

选择 gpt 选项,按 Enter,你应该会看到这个界面:
一般你已经在 New 选项下了,那就按 Enter ,然后在提示行里输入 1G ,再次按 Enter ,你就会看到分出了一个 /dev/sda1 分区。使用方向键切换磁盘空间和选项,把剩余的区都分了,你应该会看到下图的画面,使用方向键移动到 Write 选项,按 Enter 。
在接下来的提示里输入 yes ,按 Enter :

然后区就分好了,移动到 Quit 选项按 Enter 退出到命令行。

接下来应该格式化分区。
格式化分区
创建分区后,必须使用合适的文件系统对每个新创建的分区进行格式化。详情请参阅文件系统 #创建文件系统。
** 注意:** 对于堆叠式块设备(stacked block devices)请使用恰当的块设备路径替换下文中的
/dev/<i>*_partition</i>处。例如,要在根分区
/dev/<i>root_partition</i>上创建一个 Ext4 文件系统,请运行:# mkfs.ext4 /dev/root_partition(根分区)如果你要创建一个 EFI 系统分区,使用 mkfs.fat(8) 将其格式化为 Fat32。
** 警告:** 只有在分区步骤中创建 EFI 系统分区时才需要格式化。如果这个磁盘上已经有一个 EFI 系统分区了,将它重新格式化会破坏其他已安装操作系统的引导加载程序。
# mkfs.fat -F 32 /dev/efi_system_partition(EFI 系统分区)如果创建了交换分区,请使用 mkswap(8) 将其初始化:
# mkswap /dev/swap_partition(交换空间分区)
我们输入:
mkfs.ext4 /dev/sda3
mkfs.fat -F 32 /dev/sda1
mkswap /dev/sda2
系统会格式化分区,用于后续操作(见下图)。

然后我们应该挂载分区。
挂载分区
将根磁盘卷挂载到
/mnt,例如:# mount /dev/root_partition(根分区) /mnt然后使用 mkdir(1) 在
/mnt下创建任何剩余的挂载点(例如,为/boot而创建/mnt/boot),并按相应的层级顺序挂载相应的磁盘卷。** 提示:** 使用
--mkdir选项运行 mount(8) 来创建指定的挂载点。或者,先使用 mkdir(1) 创建挂载点再挂载。** 注意:** 挂载分区一定要遵循顺序,先挂载根(root)分区(到
/mnt),再挂载引导(boot)分区(到/mnt/boot或/mnt/efi,如果单独分出来了的话),最后再挂载其他分区。否则您可能遇到安装完成后无法启动系统的问题。参见 en:Talk:Installation guide#Clarify root mount。对于 UEFI 系统,挂载 EFI 系统分区:
# mount --mkdir /dev/efi_system_partition /mnt/boot如果创建了交换空间卷,请使用 swapon(8) 启用它:
# swapon /dev/swap_partition(交换空间分区)稍后 genfstab 将自动检测挂载的文件系统和交换空间。
我们输入:
mount /dev/sda3 /mnt
mount --mkdir /dev/sda1 /mnt/boot
swapon /dev/swap_partition(交换空间分区)
系统会挂载分区,用于核心安装(见下图)。

关键的一步:安装软件包
开始安装系统
选择镜像站
需安装的软件包会从文件
/etc/pacman.d/mirrorlist中所列的镜像站下载。下载软件包时,列表中越靠前的镜像站会拥有越高的优先级。在从 LiveCD 启动的系统中,所有未注释的 HTTPS 镜像站都会启用,位于顶端的全球镜像站对大多用户来说应当足够快,但仍请您检查
/etc/pacman.d/mirrorlist文件,看看列出的镜像站的顺序是否合适。如果不合适,可以手动编辑文件,将离您所处地理位置最近的镜像移到文件的头部,同时也应该考虑一些其他的评判标准。此外,您可使用 reflector 根据几种不同的评判标准来创建新的 mirrorlist 文件。如果
/etc/pacman.d/mirrorlist文件中没有合适的镜像站,可以手动从 archlinux 官方网站的镜像站列表下载一份。这需要您所在的网络能够正常访问 Arch Linux 官方网站。例如,使用 curl(1) 下载位于中国大陆的 HTTPS 镜像站:# curl -L 'https://archlinux.org/mirrorlist/?country=CN&protocol=https' -o /etc/pacman.d/mirrorlist或者,也可以通过安装 pacman-mirrorlist包 来获取按国家分列的原始镜像列表。这么做的缺点是,pacman 仍然会使用当前配置中的镜像站来下载软件包数据库和 pacman-mirrorlist包,这可能会很慢。在挑选了能用的镜像之后,可以执行
# pacman -Sy pacman-mirrorlist再将
/etc/pacman.d/mirrorlist.pacnew复制到/etc/pacman.d/mirrorlist并进行编辑。或者,如果您记得想要使用的镜像站的 URL,那么可以手动编辑
/etc/pacman.d/mirrorlist文件并手动输入 URL。这个文件接下来还会被 pacstrap 拷贝到新系统里,所以请您确保设置正确。
安装必需的软件包
除
/etc/pacman.d/mirrorlist之外的配置不会从 Live 环境传递到安装的系统中。因此,若您在 Live 环境的/etc/pacman.conf里启用了非官方用户仓库(如 archlinuxcn 仓库),请在新安装的系统手动启用之。base包 是唯一的必需软件包,其不包含来自 Live 系统的所有工具,因此需要安装其他的软件包。请着重关注并按需选择下述软件包:
- CPU 微码更新——amd-ucode包 或 intel-ucode包——用于硬件错误和安全修复。
- 文件系统的用户空间工具(比如 XFS 和 Btrfs 文件系统对应的管理工具),可用于创建和管理文件系统以及 fsck。
- 访问和管理 RAID 或 LVM 分区的工具。
- 未包含在 linux-firmware包 中的额外必需固件(如用于内建音频的 sof-firmware包、用于 Marvell 无线的 linux-firmware-marvell包 以及博通无线网卡的固件包 )。
- 联网所需要的程序(例如网络管理器或 DHCP 客户端,Wi-Fi 认证软件和移动宽带连接所需的 ModemManager,以及部分 USB 无线网卡需要的 usb_modeswitch包)。
- GPG 密钥环(如 archlinuxcn-keyringCNRepo,若启用了某些非官方用户仓库。)
- 控制台文本编辑器(如 nano、vim 和 emacs包)以便从控制台编辑配置文件(如点文件)。
- 访问 man 和 info 文档的工具:man-db包, man-pages包 和 texinfo包。
文件 pkglist.x86_64.txt 中包含 Live 系统安装的软件包列表。
要安装您选择的其他软件包或软件包组,请将它们的名字追加到下面的 pacstrap(8) 命令后(以空格分隔),或者也可以在 Chroot 进入新系统后使用 pacman 手动安装。
例如,一个包含 Linux 内核和常见硬件固件的基本安装:
# pacstrap -K /mnt base linux linux-firmware** 注意:** 有时,由于安装映像中的软件包版本过旧,会导致在运行 pacstrap 的时候无法正常安装软件包(提示为文件签名损坏)。 请参阅 Pacman/ 软件包签名 #手动更新密钥环 中提到的解决方案。 如果您启用了中文社区仓库或其他非官方用户仓库,也不要忘了一同更新其密钥环。
提示:
我们输入(一定别打错了!):
curl -L 'https://archlinux.org/mirrorlist/?country=CN&protocol=https' -o /etc/pacman.d/mirrorlist
nano /etc/pacman.d/mirrorlist

然后按 Enter ,会进入如下界面:

解释:按方向键控制光标随便到下面哪个 “Server” 字段上,按退格键把一个 Server 前的 # 删掉,然后按下 Ctrl + S 保存,再按下 Ctrl + X 退出。
然后我们就可以下载软件包了。
假设这场安装是用 AMD CPU 和有线网络连接的,那我们就输入:
pacstrap -K /mnt base linux linux-firmware amd-ucode nano networkmanager
当然,你也可以随意定制这条指令来安装你要安装的软件包。

然后按 Enter 。
你会看到命令行输出一大堆,过一段时间后又可以输入了(见下图)。

然后我们就得配置系统了。
配置系统
生成 fstab 文件
生成 fstab 文件以使需要的文件系统(如启动目录
/boot)在启动时被自动挂载,用-U或-L选项分别设置 UUID 或卷标:# genfstab -U /mnt > /mnt/etc/fstab强烈建议在执行完以上命令后,检查一下生成的
/mnt/etc/fstab文件是否正确。如果有问题,最好在现在手动修改。对于熟练者,可以自行编辑/mnt/etc/fstab文件。可以手动修改
/mnt/etc/fstab添加挂载选项(参见 mount(8) § FILESYSTEM-INDEPENDENT_MOUNT_OPTIONS 和 ext4(5) § MOUNT_OPTIONS)。例如,给固态硬盘的 ext4 文件系统添加discard选项以启用 TRIM。** 警告:** 在启用 TRIM 功能前,请确保 SSD 支持 TRIM,否则可能导致数据丢失!
chroot 到新安装的系统
接下来的步骤需要像启动到新安装的系统一样直接与其环境、工具和配置进行交互,请 chroot 到新安装的系统:
# arch-chroot /mnt** 提示:** 此处使用的是
arch-chroot而不是直接使用chroot,注意不要输错了。设置时间和时区
为顺应人类习惯(如显示正确的当地时间及处理夏令时),请设置时区:
# ln -sf /usr/share/zoneinfo/地区名/城市名 /etc/localtime** 提示:** 例如,在中国大陆需要将时区设置为北京时间,那么请运行
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime。时区名称是上海而非北京,是因为上海是该时区内人口最多的城市。然后运行 hwclock(8) 以生成
/etc/adjtime:# hwclock --systohc这个命令假定已设置硬件时间为 UTC 时间。详细信息请查看系统时间 #时间标准。
为了防止时钟漂移并确保时间准确,请手动启用 NTP(网络时间协议,Network Time Protocol)客户端(例如 systemd-timesyncd)设置时间同步。
区域和本地化设置
程序和库如果需要本地化文本,都依赖区域设置,后者明确规定了地域、货币、时区日期的格式、字符排列方式和其他本地化标准。
需要设置这两个文件:
locale.gen与locale.conf。编辑
/etc/locale.gen,然后取消掉en_US.UTF-8 UTF-8和其他需要的 UTF-8 区域设置前的注释(#)。接着执行
locale-gen以生成 locale 信息:# locale-gen然后创建 locale.conf(5) 文件,并编辑设定 LANG 变量,比如:
/etc/locale.confLANG=en_US.UTF-8另外对于中文用户:
提示:
- 用户可以设置自己的 locale,详情请参阅 在用户会话中覆盖系统区域设置 或 设置当前区域;
- 将系统 locale 设置为
en_US.UTF-8,系统的日志就会用英文显示,这样更容易判断和处理问题;
- 也可以设置为
en_GB.UTF-8[英语(英国)]或en_SG.UTF-8[英语(新加坡)],附带以下特点:
- 进入桌面环境后以 24 小时制显示时间;
- LibreOffice 等办公软件的纸张尺寸会默认为
A4而非Letter(US);- 可尽量避免不必要且可能造成处理麻烦的英制单位。
- 设置的 LANG 变量需与 locale 设置一致,否则会出现以下错误:
Cannot set LC_CTYPE to default locale: No such file or directory** 警告:** 并不推荐在此设置任何中文 locale,这可能会导致 tty 上中文显示为方块(因为 TTY 下没有 CJK 字体)。如果您不经常使用 tty ,或是稍后需要安装桌面环境,则在不使用 tty 后可以设置为中文的 locale 。为了使 TTY 显示中文,也可以使用打了补丁的内核,如 linux-lilyCNRepo。
如果需要修改#控制台键盘布局和字体,可编辑 vconsole.conf(5) 使其长期生效,以德语键盘(qwertz)为例:
/etc/vconsole.confKEYMAP=de-latin1** 注意:** 如果键盘为标准美式键盘(中国最常见的键盘布局),请勿照抄如上设置。
网络配置
为您的系统设置一个固定且易于辨识的名称(在联网环境中尤其有用),请创建 hostname 文件:
/etc/hostname主机名** 提示:** 请参阅 RFC 1178 以获取一些关于为计算机取名的建议。如 hostname(7) 所述,其必须包含 1-63 个字符,仅使用小写的
a-z、0-9以及-,但不得以-开头。请接着完成新安装的环境的网络配置,配置过程中可能需要安装合适的网络管理软件。
** 警告:** 请按上述网络配置指引正确配置好网络后再重新启动,否则系统重新启动后可能无法连接网络(不过可以用 LiveCD 重新进入 arch-chroot 进行配置)。例如在虚拟机软件 VirtualBox 安装并使用桥接模式时就需要配置 DHCP 。
关于 initramfs
通常不需要自己创建新的 initramfs,因为在执行 pacstrap 时已经安装 linux包,这时已经运行过 mkinitcpio 了。
如果是 LVM、系统加密或 RAID 等分区配置,请修改 mkinitcpio.conf 并用以下命令重新创建一个 Initramfs:
# mkinitcpio -P设置 root 密码
使用以下命令为 root 用户设置一个安全的密码以便进行管理操作:
# passwd** 提示:** 建议为 root 用户选择一个强密码并保护其安全。
安装引导程序
需要安装 Linux 引导加载程序,才能在安装后启动系统,可以使用的的引导程序已在引导加载程序中列出,请选择一个安装并参阅其 wiki 页面以配置它,GRUB 是一个比较常见且通用的选择。
** 警告:** 这是安装的最后一步也是关键的一步,请点击上述链接并按指引正确安装好引导加载程序后再重新启动。否则计算机重新启动后将无法正常进入 Arch Linux 系统。
别怕,看着很多,其实一点也不少(误),但只要我们细心应对,很快就好。
输入:
genfstab -U /mnt > /mnt/etc/fstab

接下来输入:
arch-chroot /mnt
按下 Enter ,然后输入:
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc
locale-gen
然后,再输入:
nano /etc/locale.conf

然后输入:

保存退出,然后输入:
nano /etc/locale.conf

再在接下来的界面里输入一个符合规定的名称(a-z,千万别有大写或者 "_"),保存退出。
然后输入
passwd
配置超管密码。

然后千万,一定要安装引导程序!!!!!
以安装 GRUB 为例:
安装
注意:
- 不同硬件厂商的 UEFI 实现方式不一样,下面描述的步骤应该可以在大部分 UEFI 系统上面正常应用。对于用了下面的方法却遇到问题的用户,请将在特定的硬件上所遇到的问题的细节,以及可能的解决办法分享出来。这些案例可以添加到页面 GRUB/EFI examples 上面。
- 本节假设您正在 x64(64 位)UEFI 系统上安装 GRUB。对于 IA32 (32 位) UEFI 系统(不要和 32 位 CPU 相混淆), 将
x86_64-efi替换成i386-efi。根据 UEFI# 检查系统位数中的说明来确定你的 UEFI 系统位数。** 警告:** 自 grub包 2:2.06.r566.g857af0e17-1 起,无法从 IA32 UEFI(
i386-efi) 系统启动。参见 FS#79098。首先安装软件包 grub包 和 efibootmgr包。其中“GRUB”是启动引导器,“efibootmgr”被 GRUB 脚本用来将启动项写入 NVRAM。
然后按照下列步骤将 GRUB 安装到你的硬盘上:
- 挂载 EFI 系统分区。需要注意的是在本节的内容里,把
<i>esp</i>替换成 ESP 分区挂载点;- 选择一个 bootloader-id,在本例被称为
GRUB。这将在<i>esp</i>/EFI/中创建一个与标识同名的目录来储存 EFI 二进制文件,而且这个名字还会用于在 UEFI 启动菜单中区分 GRUB 启动项;- 执行下面的命令来将 GRUB EFI 应用
grubx64.efi安装到<i>esp</i>/EFI/GRUB/,并将其模块安装到/boot/grub/x86_64-efi/。注意:
- 确保你安装 GRUB 软件包和运行命令的系统是你想用 GRUB 引导的系统。也就是说如果你是通过安装介质引导的,你需要在 chroot 之后再运行
grub-install。如果因为某些原因不得不在安装的系统之外运行grub-install,在后面加上--boot-directory=选项来指定挂载/boot目录的路径,例如--boot-directory=/mnt/boot。- 某些主板无法处理包含空格的
bootloader-id。# grub-install --target=x86_64-efi --efi-directory=esp --bootloader-id=GRUB上述安装完成后, GRUB 的主目录将位于
/boot/grub/。注意上述例子中,grub-install还将在固件启动管理器中创建一个条目,名叫GRUB。如果你的启动项已满,这个命令会执行失败。你需要使用 efibootmgr 来删除不必要的条目。在配置完成后,记得#生成主配置文件。
** 提示:** 如果你使用了
--removable选项,那 GRUB 将被安装到<i>esp</i>/EFI/BOOT/BOOTX64.EFI(当使用i386-efi时是<i>esp</i>/EFI/BOOT/BOOTIA32.EFI),此时即使 EFI 变量被重设或者你把这个驱动器接到其他电脑上,你仍可从这个驱动器上启动。通常来说,你只要像操作 BIOS 设备一样在启动时选择这个驱动器就可以了。如果设备是同时安装了 Windows 的多引导启动,注意 Windows 通常会在这里安装一个 EFI 可执行程序,该程序的目的是仅重建 Windows 的 UEFI 启动项。如果你想在 Mac 上安装 GRUB,那你必须要使用该选项。某些台式机主板只会在此位置寻找 EFI 可执行文件,因此该选项是必需的,尤其是微星(MSI)主板。 如果你更新了 UEFI,启动项可能会在更新后丢失。因此可以创建一个“removable”启动项作为后备。注意:
--efi-directory和--bootloader-id是 GRUB UEFI 特有的。--efi-directory替代了已经废弃的--root-directory。- 您可能注意到在
grub-install命令中没有 device_path 选项(例如/dev/sda)。事实上即使提供了 device_path,也会被 GRUB UEFI 安装脚本忽略,因为 UEFI 启动加载器不使用 MBR 启动代码或启动扇区。如果遇到问题,查看 UEFI 故障排查。参见 GRUB/ 技巧和窍门 #UEFI 延伸阅读。
输入:
pacman -S grub
pacman -S efibootmgr


然后输入:
grub-install --target=x86_64-efi --efi-directory=boot --bootloader-id=GRUB

最后一定要记得去生成主配置文件!!!!!
输入:
grub-mkconfig -o /boot/grub/grub.cfg
然后退出环境,重启就可以了。

最后再开一下网络,就大功告成了 ~

恭喜你完成了安装过程!
安装后的工作
创建非特权账户、图形用户界面的安装、声音管理、触摸板支持等系统管理教程和后期工作参见建议阅读及其子页面。
感兴趣的各类程序,请参见应用程序列表及其子页面。
还建议新用户阅读给新用户的关于如何不去弄坏 Arch Linux 系统的建议一文。