文章

2025 年 Arch Linux 安装教程

Arch Linux 是一个滚动更新的 GNU/Linux 发行版,它不提供固定周期的大版本发布,软件包与内核持续更新到仓库中的最新稳定版本;用户需自行安装包括内核在内的所有软件,实现高度可控。这会带来极佳的灵活性,同时锻炼用户的动手能力,并了解 Linux 的基础知识;Arch Linux 适合每一个有着折腾精神,喜欢深度定制且希望系统使用拥有最新软件的用户

根据 StatCounter 截至 2025 年 7 月的统计,Linux 的用户数量仍在持续上升。现在从 WindowsEULA 切换到 Arch Linux 无疑是个不错的选择。接下来,我们将进入 Arch Linux 的安装指南。

凡是专有软件,本文都使用 EULA 上标进行标注,这些软件不尊重用户的自由和社区。请酌情考虑是否使用

安装前的准备

本指南使用如今普遍流行的 UEFI + GPT 形式进行安装,传统的 BIOS 模式不再赘述。在执行下述操作之前,请确保你已启用 UEFI 并关闭安全启动。

1. 获取安装映像

打开 Arch Linux 的 ISO 下载页面,你可以使用 BitTorrent 种子下载最新的 Arch Linux 映像。当然,更推荐使用你所在地区的镜像站点来加速下载,以下是几个在中国大陆各地速度都较为稳定的镜像站。

最后测速并更新于 2025-08-02(排名不分先后)

下载类似 archlinux-YYYY.MM.DD-x86_64.iso 或者 archlinux-x86_64.iso 即是最新版的映像文件。推荐同时在 Arch Linux 官网 下载 sig 签名文件,并在下载完成后使用 GnuPg 验证来确保文件安全且未损坏。

请确保下载最新的安装镜像!Arch Linux 是滚动发行版,无法使用旧的安装镜像安装旧版本

一般情况下,Arch Linux 官方在每月的第一天释放新的映像文件

使用命令行工具 Aria2 在 12 秒下载完成 Arch Linux 安装映像

选择合适的镜像站,亦能跑慢网速

2. 刻录到安装介质

推荐准备一个 2 GiB 以上的 U 盘,用来刻录一个 Arch Linux 安装盘。

在 WindowsEULA 下,推荐使用 VentoyRufus 或者 balenaEtcher。这些软件都带有图形用户界面,新手也很容易上手。

在 Windows 下使用 balenaEtcher 对映像进行刻录

图片来自 archlinux 简明指南

在 GNU/Linux 下,你可以使用 dd 命令来刻录到 U 盘。

# 将 /path/to/archlinux.iso 替换为你下载的安装映像所在的路径,/dev/sdx 替换为你的 U 盘块设备所在的路径
sudo dd bs=4M if=/path/to/archlinux.iso of=/dev/sdx status=progress oflag=sync

3. 启动到安装介质

现在,保持你的安装介质插入。冷重启你的电脑,在 POST 自检时快速按下启动选择热键(在大部分主板上,它是 F8 或 F12,启动画面也可能会有提示),选择启动到安装介质。

此时,你因该会看到一个纯文本的引导界面。(如果你看到是带有 Arch Linux Logo 的图形界面,那么说明你使用了 BIOS 引导,请在主板设置中开启 UEFI 并关闭 CSM

在 UEFI 下引导安装媒介,出现 systemd-boot 启动页面

systemd-boot 引导界面

选择 Arch Linux install medium (x86_64, UEFI),引导 Arch Linux 安装映像。

稍等片刻后你应该能看到类似下图的命令行界面,此时便可以正式开始安装 Arch Linux 了!

进入 Arch Linux 安装映像

Arch Linux 安装界面

安装 Arch Linux

4. 禁用 reflector 系统服务

Arch Linux 在 2020 年在安装映像中默认启用了 reflector 服务,此服务用于筛选出最新的镜像并按速度排序,写入到镜像源列表。这也许是一项很好的功能,但在中国大陆地区,此服务并不可靠。

可以使用如下命令禁用 reflector 服务

systemctl stop reflector.service

5. 修改终端字体(可选)

如果你认为你的终端字体太小,可以使用如下命令将字体修改为 20px 的粗体终端字体

setfont /usr/share/kbd/consolefonts/ter-v20b.psf.gz

6. 连接到互联网

一般地,如果你使用有线连接,通过 DHCP,Arch Linux 因该可以自动获取你的 IP 地址和 DNS 服务器。

如果你使用 WiFi,你可以通过 iwctl来认证无线局域网

iwctl                           # 启动iwctl交互式命令行工具
device list                     # 查看可用无线设备(如wlan0)
station wlan0 scan              # 扫描wlan0设备可用的WiFi网络
station wlan0 get-networks      # 显示扫描到的所有WiFi列表
station wlan0 connect wifi-name # 连接指定WiFi(输入命令后按提示输密码)
exit                            # 退出iwctl命令行环境

测试网络连通性

使用 ping 测试网络联连通性

ping ping.archlinux.org

你应该能看到类似下图的结果,不同于 WindowsEULA 下的 ping,手动按下 Ctrl + C 来退出 ping

成功 ping

7. 更新系统时钟

使用 timedatectl 来同步时间,这一步是必须的,正确的系统时间对于部分程序来说非常重要。

timedatectl set-timezone Asia/Shanghai # 设置时区
timedatectl set-ntp true               # 同步系统时间
timedatectl status                     # 检查服务状态

8. 分区和格式化

我们将会创建 3 个分区。注意,这会损坏你硬盘中的数据

  1. EFI 分区 -- 512MiB ~ 4GiB

  2. swap 分区 -- 你的系统内存的 50% ~ 150%

  3. 根分区 -- 所有的剩余空间

使用 fdisk -l 列出系统下的所有块设备

使用 fdisk 列出所有块设备

这里,我需要安装系统的设备是 /dev/sda,此处假设您需要在 /dev/sdx 上安装 Arch Linux,请根据实际情况替换下文内容

修改分区格式

如果你的磁盘不是使用的 gpt 格式,你需要使用 parted 修改它的格式。

parted /dev/sdx                   # 启动parted磁盘分区工具(进入交互模式)
(parted) mktable                  # 在parted提示符下输入mktable命令
(parted) New disk label type? gpt # 输入gpt创建GPT分区表(如有数据需输入yes确认)
(parted) quit                     # 退出parted交互环境

分区

接下来,使用 cfdisk 工具进行分区。

cfdisk /dev/sdx

将进入 cfdisk 的用户界面,使用 选择分区, 选择选项 Enter 进行操作。

使用 New 创建一个新的分区

使用 Write 将修改写入设备

使用 Delete 删除分区

使用 Resize 调整分区容量

使用 Type 修改分区类型

使用 Quit 退出 cfdisk

创建一个 512MiB ~ 4GiB 的分区,调整类型为 EFI System

创建一个是你的物理内存容量的 50% ~ 150% 大小的分区,调整类型为 Linux swap

使用硬盘所有剩余空间创建一个分区,类型使用默认的 Linux filesystem

最终结果应该近似下图(分区容量可能不一致)

使用 cfdisk 创建了三个分区

此时使用 Write,并输入 yes 保存修改。使用 Quit 退出 cfdisk

输入 yes 确认操作

再次使用 fdisk 确认硬盘修改是否正确

fdisk 检查

可以看到,/dev/sda1 /dev/sda2 /dev/sda3 都已被正确的创建并且对应刚才选择的分区格式。

此处假设您创建了 /dev/sdx1 /dev/sdx2 /dev/sdx3 三个分区,请根据实际情况替换下文内容

格式化并创建 Btrfs 子卷

使用以下命令格式化对应的 EFI 分区

双系统无需进行此操作

mkfs.fat -F32 /dev/sdx1

使用以下命令格式化对应的 swap 分区

mkswap /dev/sdx2

最后将 Linux filesystem 格式化为 Btrfs 分区

此处 ArchLinux 是分区的卷标,可以自定义。推荐仅使用英文大小写字母,数字,连字符和下划线,避免使用空格和特殊字符。

mkfs.btrfs -L ArchLinux /dev/sdx3

创建 Btrfs 子卷

先将刚才格式化好的 Btrfs 分区挂载到 /mnt

此处的 compress=zstd 用于开启 zstd:3 透明压缩。一般情况下,此选项对性能没有什么损耗并且可以减少硬盘占用。

mount -t btrfs -o compress=zstd /dev/sdx3 /mnt

使用 btrfs 命令分别为 //home 创建 Btrfs 子卷。如果您有其它需求,也可新建其它子卷并在后续操作中正确的新建目录。

btrfs subvolume create /mnt/@     # 创建 / 子卷
btrfs subvolume create /mnt/@home # 创建 /home 子卷

创建完成后卸载 /mnt

umount /mnt

9. 挂载分区

按照顺序分别挂载分区

mount -t btrfs -o subvol=/@,compress=zstd /dev/sdx3 /mnt # 挂载 / 目录
mkdir -p /mnt/{home,boot}    # 创建 /home 和 /boot 目录
mount -t btrfs -o subvol=/@home,compress=zstd /dev/sdx3 /mnt/home # 挂载 /home 目录
mount /dev/sdx1 /mnt/boot # 挂载 /boot 目录
swapon /dev/sdx2          # 挂载交换分区

使用 dffree 命令分别检查挂载情况

-h 参数允许以人类可读的方式显示容量

df -h 
free -h

10. 配置镜像源

使用 vim 修改镜像源列表 /etc/pacman.d/mirrorlist ,此处使用与上述相同的镜像源(但将 MirrorZ 置于最后一个备用)

vim /etc/pacman.d/mirrorlist

你可能会看到类似这样的镜像源列表。如果你没有关闭 reflector 服务,可能会出现不一样的结果,不过不用担心,您仍然可以执行下述操作。

按下 i 键进入编辑模式,使用 操控光标的位置到开头,使用 Enter 新增一行并输入如下内容

Server = https://mirrors.pku.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
Server = https://mirror.sjtu.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.cernet.edu.cn/archlinux/$repo/os/$arch

按下 Esc 推出编辑模式,输入 :Shift + ;进入命令模式,随后输入 wq 保存并退出。

使用以下命令更新镜像源

pacman -Sy --noconfirm archlinux-keyring

11. 安装系统

使用 pacstrap 命令安装基本操作系统

不要使用 -K 参数!在某些教程中可能提到,但它会破坏新系统的包验证

此处的 linux 和 linux-headers 使用 linux 内核。如果你想安装其它内核,可以在此处同时安装,如 linux-librelinux-libre-headers,但不推荐删除原来的内核

pacstrap /mnt base base-devel linux linux-headers linux-firmware grub efibootmgr btrfs-progs networkmanager sudo vim neovim zsh zsh-completions terminus-font man-db man-pages fastfetch

安装微码

pacstrap /mnt intel-ucode # 如果你使用 Intel CPU
pacstrap /mnt amd-ucode   # 如果你使用 AMD CPU

12. 生成 fstab

使用 genfstab 生成 fstab 并输出重定向到 /mnt/etc/fstab

genfstab -U /mnt > /mnt/etc/fstab

输出 fstab 文件以确保无误

cat /mnt/etc/fstab

输出内容应类似下方

# /dev/sda3
/dev/sda3           	/         	btrfs     	rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@	0 0

# /dev/sda3
/dev/sda3           	/home     	btrfs     	rw,relatime,compress=zstd:3,space_cache=v2,subvol=/@home	0 0

# /dev/sda1
UUID=1C11-E40E      	/boot     	vfat      	rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro	0 2

# /dev/sda2
/dev/sda2           	none      	swap      	defaults  	0 0

13. chroot 到新系统

使用 arch-chroot 将当前可见更目录修改为 /mnt

arch-chroot /mnt

14. 设置与主机名与时区

输出主机名并重定向到 /etc/hostname

echo my-arch-linux-hostname >> /etc/hostname # 将 my-arch-linux-hostname 替换为你想要的主机名

设置时区为 Asia/Shanghai

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

使用 hwclock 将系统时间同步到硬件

hwclock --systohc

15. 本地化

去除 /etc/locale.gen#en_SG.UTF-8 UTF-8 #zh_CN.UTF-8 UTF-8 两行的注释

你也可以使用 vim 可视化编辑

关于为什么使用 en_SG 而非 en_US 的原因见 安装指南 - Arch Linux 中文维基

sed -i '/^#en_SG\.UTF-8/s/^#//; /^#zh_CN\.UTF-8/s/^#//' /etc/locale.gen

随后使用 locale-gen 生成 locale 信息

locale-gen

如果出现 Generation complete. 之类的字眼即代表生成成功。

输出 zh_CN.UTF-8 并重定向到 /etc/locale.conf

如果你不使用 linux-lily 这样打了 GBK 补丁的内核,或不使用 ssh 客户端连接到 tty,推荐不要始终中文 locale,而是转而使用 en_SG.UTF-8 这样可以在 tty 中正常显示的 locale

echo 'LANG=zh_CN.UTF-8'  > /etc/locale.conf

16. 创建新用户并设置密码

设置 root 账户的密码

passwd root
New password: 
Retype new password: 
passwd: password updated successfully

输入两次相同的密码,注意过程中不会显示你输入的内容。

使用 useradd 添加一个使用 zsh 的用户并添加到 wheel

myusername 替换为您的用户名

useradd -m -G wheel -s /bin/zsh myusername

为新用户设置密码

passwd myusername # 同为 root 用户设置密码

使用 visudo 修改 sudo 配置

EDITOR=vim visudo

去除 # %wheel ALL=(ALL:ALL) ALL 一行的注释

17. 配置 Pacman 并启用 archlinuxcn 仓库

使用 vim 编辑 /etc/pacman.conf

vim /etc/pacman.conf

去除 #Color 行(34)的注释

去除 [multilib] 两行(93, 94)的注释,启用 32 位仓库

在末尾添加如下内容,启用 archlinuxcn 软件仓库(可选)

[archlinuxcn]
Server = https://mirrors.pku.edu.cn/archlinuxcn/$arch
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch
Server = https://mirror.sjtu.edu.cn/archlinuxcn/$arch
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinuxcn/$arch
Server = https://mirrors.cernet.edu.cn/archlinuxcn/$arch

使用 :wq 保存并推出

使用 pacman 更新软件包仓库并安装 archlinuxcn-keyring

pacman -Syyu archlinuxcn-keyring

18. 编辑 initramfs

使用 vim 编辑 /etc/mkinitcpio.conf

vim /etc/mkinitcpio.conf

如无特殊需求,修改 HOOKS (56)为

HOOKS=(base systemd autodetect modconf microcode kms keyboard sd-vconsole block filesystems resume)

配置 vconsole

echo -e 'KEYMAP=us\nFONT=ter-v18b' > /etc/vconsole.conf

使用 mkinitcpio 更新 initramfs

mkinitcpio -P

19. 安装 Grub 引导

使用 grub-installgrub 安装到 EFI 分区

此处 GRUB2 为引导项名称,可自定义

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB2

使用 vim 编辑 /etc/default/grub

vim /etc/default/grub

GRUB_DEFAULT(4)设为 saved ,默认使用上次引导的选项

去除 GRUB_CMDLINE_LINUX_DEFAULT(7)的 quiet 参数,显示启动日志。并添加 nowatchdog 参数,关闭部分看门狗

如果 nowatchdog 参数无法禁用您的看门狗参数,参见 性能优化 - Arch Linux 中文维基

去除 #GRUB_SAVEDEFAULT=true (55)一行的注释,开启默认保存

去除 #GRUB_DISABLE_SUBMENU=y(58)一行的注释,关闭二级菜单,确保默认启动上次保存

使用 :wq 保存并退出,完整的配置文件应该如下


# GRUB boot loader configuration

GRUB_DEFAULT=saved
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR="Arch"
GRUB_CMDLINE_LINUX_DEFAULT="loglevel=3 nowatchdog"
GRUB_CMDLINE_LINUX=""

# Preload both GPT and MBR modules so that they are not missed
GRUB_PRELOAD_MODULES="part_gpt part_msdos"

# Uncomment to enable booting from LUKS encrypted devices
#GRUB_ENABLE_CRYPTODISK=y

# Set to 'countdown' or 'hidden' to change timeout behavior,
# press ESC key to display menu.
GRUB_TIMEOUT_STYLE=menu

# Uncomment to use basic console
GRUB_TERMINAL_INPUT=console

# Uncomment to disable graphical terminal
#GRUB_TERMINAL_OUTPUT=console

# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `videoinfo'
GRUB_GFXMODE=auto

# Uncomment to allow the kernel use the same resolution used by grub
GRUB_GFXPAYLOAD_LINUX=keep

# Uncomment if you want GRUB to pass to the Linux kernel the old parameter
# format "root=/dev/xxx" instead of "root=/dev/disk/by-uuid/xxx"
#GRUB_DISABLE_LINUX_UUID=true

# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_RECOVERY=true

# Uncomment and set to the desired menu colors.  Used by normal and wallpaper
# modes only.  Entries specified as foreground/background.
#GRUB_COLOR_NORMAL="light-blue/black"
#GRUB_COLOR_HIGHLIGHT="light-cyan/blue"

# Uncomment one of them for the gfx desired, a image background or a gfxtheme
#GRUB_BACKGROUND="/path/to/wallpaper"
#GRUB_THEME="/path/to/gfxtheme"

# Uncomment to get a beep at GRUB start
#GRUB_INIT_TUNE="480 440 1"

# Uncomment to make GRUB remember the last selection. This requires
# setting 'GRUB_DEFAULT=saved' above.
GRUB_SAVEDEFAULT=true

# Uncomment to disable submenus in boot menu
GRUB_DISABLE_SUBMENU=y

# Probing for other operating systems is disabled for security reasons. Read
# documentation on GRUB_DISABLE_OS_PROBER, if still want to enable this
# functionality install os-prober and uncomment to detect and include other
# operating systems.
#GRUB_DISABLE_OS_PROBER=false

使用 grub-mkconfig生成 grub 配置文件

grub-mkconfig -o /boot/grub/grub.cfg

20. 结束安装

输入如下命令

exit           # 退回安装环境
umount -R /mnt # 卸载分区
reboot         # 重启

输入 reboot 重启后,务必取出安装媒介

你将进入 grub 引导界面,等待倒计时或按下回车键即可引导进入系统。

使用您新建的账户登录系统

在此处按下 0 创建一个新的 zsh 配置文件

使用如下命令启用网络

systemctl enable --now NetworkManager.service
systemctl disable NetworkManager-wait-online.service