跳到主要内容

Arch Linux 安装教程:UEFI + Btrfs + GRUB

面向个人电脑的 Arch Linux 安装教程,覆盖联网、分区、Btrfs、GRUB / systemd-boot、网络、显卡与 GNOME 收尾配置。

如果你想通过命令行把 Arch Linux 从头装起来,这篇文章可以当作一份从安装介质一路走到可进入桌面的完整实操稿。

本文默认的主线是:

  • 单系统
  • UEFI 启动
  • Btrfs 文件系统
  • GRUB 引导
  • 网络默认使用 NetworkManager

在这条主线基础上,我也把你后面大概率会接着做的几项补进来了:

  • systemd-boot 作为引导备选方案
  • 蓝牙和 PipeWire 音频
  • 常见显卡驱动
  • GNOME 桌面与 gdm
  • 常用软件收尾

这样做的好处是你可以先按主线把系统装起来,然后继续沿着同一篇文章把桌面环境一起补完,不用装完基础系统后再去翻第二篇。

Arch Linux 官方 Logo

适用场景

这篇教程更适合下面这些情况:

  • 你准备在一块磁盘上安装单系统 Arch Linux
  • 机器使用 UEFI 启动,而不是 Legacy BIOS
  • 你希望根分区使用 Btrfs,并启用 zstd 压缩
  • 你接受安装阶段全程使用命令行
  • 你想装完基础系统后继续把桌面也顺手配起来

如果你是双系统、LUKS 全盘加密、多子卷方案、RAID、LVM,或者要做更复杂的多引导布局,这篇先不展开,不然主线会被拉得太散。

安装前说明

开始前先确认几件事:

  • 本文默认你会清空目标磁盘上的原有数据
  • 引导方案默认写 GRUBsystemd-boot 放在后面作为可选分支
  • 时区默认写 Asia/Shanghai
  • locale 默认启用 en_US.UTF-8zh_CN.UTF-8
  • Btrfs 这里只保留一个最基础的 @ 子卷
  • 桌面环境示例使用 GNOME

另外,文中的磁盘名和分区名都只是示例。你一定要按自己机器上 lsblk 实际显示的设备名替换,不要机械照抄。

如果你想先确认安装介质是不是以 UEFI 模式启动的,可以看一下:

ls /sys/firmware/efi/efivars

如果这里能正常列出内容,通常就说明当前安装环境已经是 UEFI 模式。

第一步:配置网络

有线网络

如果你是有线网络,通常插上网线后等一会儿就行。

无线网络

无线网络可以直接用 iwctl

iwctl
device list
station wlan0 scan
station wlan0 get-networks
station wlan0 connect "你的 Wi-Fi 名称"
exit

如果网络名称里有空格,连接时记得加双引号。

配好之后先测试一下连通性:

ping archlinux.org -c 3

如果这里还 ping 不通,就不要急着往下走,先把网络问题解决掉。

联网与无线配置示意

第二步:配置 SSH(可选)

如果你觉得安装时直接在本机终端敲命令不方便,可以先临时开 SSH,改成远程操作。

先给 root 设置一个密码:

passwd

然后编辑 SSH 配置:

nano /etc/ssh/sshd_config

确认或加入这一行:

PermitRootLogin yes

再启动 SSH 服务:

systemctl start sshd

查看当前 IP:

ip a

然后你就可以在另一台电脑上测试:

ssh root@你的IP地址

提醒一句:这是安装阶段的临时做法。系统正式装好之后,还是建议改回更安全的登录方式。

第三步:同步日期时间

执行下面命令启用 NTP:

timedatectl set-ntp true

如果你想确认状态,可以再看一眼:

timedatectl status

第四步:查看磁盘并建立分区

先查看当前磁盘情况:

lsblk

常见磁盘命名规则如下:

磁盘类型常见设备名
SATA / U 盘 / SCSI/dev/sdX
NVMe/dev/nvme0n1
虚拟硬盘/dev/vdX

对本文这条主线来说,至少需要两个分区:

  • EFI 系统分区:建议 512MB
  • 根分区:剩余空间全部给 /

如果你的磁盘原来已经有旧系统,而且你准备装单系统,那就先把旧分区删掉,再重新创建。

确认目标磁盘后,进入分区工具:

cfdisk /dev/你的磁盘

cfdisk 里一般按下面思路做:

  1. 如果是新盘,先选择 gpt
  2. 创建一个约 512M 的 EFI 分区
  3. 其余空间全部给根分区
  4. 写入分区表后退出

如果你是第一次装 Arch,建议先不要在这一步同时拆很多额外分区。主线先让系统能稳定启动,后面再考虑单独的 /home、swap 或更多 Btrfs 子卷,会更稳。

磁盘、分区与 EFI 布局示意

第五步:格式化分区

先格式化 EFI 分区:

mkfs.fat -F 32 /dev/你的EFI分区

再格式化根分区为 Btrfs:

mkfs.btrfs -f /dev/你的根分区

这里的设备名一定要和你前面 lsblk 看到的实际结果对应起来。
比如 NVMe 常见是 /dev/nvme0n1p1/dev/nvme0n1p2,SATA 则可能是 /dev/sda1/dev/sda2

第六步:创建 Btrfs 子卷并挂载

本文只保留一个最基础的根子卷 @

先临时挂载根分区:

mount -t btrfs -o compress=zstd /dev/你的根分区 /mnt

创建子卷:

btrfs subvolume create /mnt/@

看一眼子卷列表:

btrfs subvolume list -p /mnt

然后卸载:

umount /mnt

重新按子卷方式挂载:

mount -t btrfs -o subvol=/@,compress=zstd /dev/你的根分区 /mnt
mkdir -p /mnt/boot/efi
mount /dev/你的EFI分区 /mnt/boot/efi

上面这套挂载方式是为了配合本文默认的 GRUB 主线。
如果你后面明确打算改走 systemd-boot,更省事的做法通常是把 EFI 分区直接挂到 /mnt/boot,而不是 /mnt/boot/efi。下面正文先按 GRUB 继续,systemd-boot 的调整方式我会在对应章节单独写清楚。

最后检查挂载情况:

df -h

正常的话,应该能看到:

  • 根分区挂到了 /mnt
  • EFI 分区挂到了 /mnt/boot/efi

Btrfs 子卷、挂载与 df 检查示意

第七步:修改镜像源

如果你在中国大陆网络环境下安装,先把镜像源顺一下通常会省很多时间。

编辑镜像列表:

nano /etc/pacman.d/mirrorlist

可以把中科大源放到前面:

Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch

这一步的核心目的不是“只保留一个镜像”,而是让你安装阶段优先走更顺手的源。

第八步:安装基础系统

开始安装系统本体:

pacstrap /mnt base base-devel linux linux-firmware linux-headers nano intel-ucode

如果你是 AMD CPU,把 intel-ucode 替换成 amd-ucode

这里这些包里比较关键的是:

  • base:基础系统
  • base-devel:常见开发工具
  • linux / linux-firmware / linux-headers:内核和固件
  • nano:编辑器
  • intel-ucodeamd-ucode:CPU 微码

如果你更偏向长期支持内核,也可以把内核相关包换成:

pacstrap /mnt base base-devel linux-lts linux-firmware linux-lts-headers nano intel-ucode

但如果你后面还要配显卡驱动,记得内核和对应驱动包也要一起跟着换。

第九步:生成 fstab 并进入新系统

生成 fstab

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

建议立刻看一眼:

cat /mnt/etc/fstab

确认没有写错挂载项之后,再进入新系统:

arch-chroot /mnt

第十步:配置软件仓库

先编辑 pacman.conf

nano /etc/pacman.conf

在文件末尾加入 archlinuxcn

[archlinuxcn]
Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch

再导入 keyring:

pacman -Syu archlinuxcn-keyring

如果你后面想装 paru 之类的工具,这一步提前配好会方便很多。

第十一步:设置时区、本地化和主机名

时区先按本文默认值写成上海:

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

然后编辑 locale:

nano /etc/locale.gen

把下面两行前面的注释去掉:

en_US.UTF-8 UTF-8
zh_CN.UTF-8 UTF-8

然后生成 locale:

locale-gen

再写入默认语言环境:

cat >/etc/locale.conf <<'EOF'
LANG=en_US.UTF-8
EOF

安装阶段不要只保留中文 locale,不然 tty 更容易出现乱码。

这里顺手把主机名也一起写掉:

echo archlinux > /etc/hostname

再补一个最基础的 /etc/hosts

cat >/etc/hosts <<'EOF'
127.0.0.1   localhost
::1         localhost
127.0.1.1   archlinux.localdomain archlinux
EOF

如果你不想机器名叫 archlinux,把上面这几个位置统一替换成你自己的主机名就行。

第十二步:设置 root 密码并创建普通用户

先给 root 设置密码:

passwd

再创建普通用户:

useradd -m -g users -G wheel,storage,power archuser
passwd archuser

接着打开 sudo 权限:

EDITOR=nano visudo

找到这段提示:

Uncomment to allow members of group wheel to execute any command

%wheel ALL=(ALL:ALL) ALL 前面的注释去掉。

如果你后面要长期把这台机器当日常主力系统用,尽量从这里开始就习惯用普通用户 + sudo,不要什么都一直用 root。

第十三步:安装并配置 GRUB

这篇文章默认走 GRUB 主线,所以如果你想要最稳妥的安装流程,直接按这一节做就可以。

先安装引导需要的包:

pacman -S grub efibootmgr

安装前可以先再确认一次 /boot/efi 挂载是否正常:

lsblk

如果你是双系统,或者希望 GRUB 自动探测其他系统,可以额外安装 os-prober

pacman -S os-prober

然后编辑:

nano /etc/default/grub

如果需要开启系统探测,可以把这一行取消注释或改成:

GRUB_DISABLE_OS_PROBER=false

接着执行:

grub-install --efi-directory=/boot/efi --bootloader-id=Arch
grub-mkconfig -o /boot/grub/grub.cfg

如果前面分区和挂载都没问题,这里通常就能顺利生成引导文件。

第十四步:安装并配置 systemd-boot(可选,和 GRUB 二选一)

如果你不想用 GRUB,也可以在这里改为 systemd-boot
这一节和上一步是二选一,不需要两套都长期一起维护。

这里有个很关键的前提:
systemd-boot 最省事的用法,通常是把 EFI 分区直接挂到 /boot。如果你前面是照本文默认的 GRUB 路线把它挂到了 /boot/efi,那在继续之前先调整挂载点。

arch-chroot 里先执行:

umount /boot/efi
mount /dev/你的EFI分区 /boot

再确认一次:

findmnt /boot

确认 /boot 现在就是 EFI 分区之后,再执行:

bootctl install

编辑引导器配置:

nano /boot/loader/loader.conf

写成这样:

default arch.conf
timeout 1
editor no

先查根分区 UUID:

blkid /dev/你的根分区

然后创建 Arch 启动项:

nano /boot/loader/entries/arch.conf

示例内容如下:

title   Arch Linux
linux   /vmlinuz-linux
initrd  /intel-ucode.img
initrd  /initramfs-linux.img
options root=UUID=替换成你的根分区UUID rw rootflags=subvol=@,compress=zstd

如果你是 AMD CPU,把 intel-ucode.img 改成 /amd-ucode.img
如果你用的是 linux-lts,内核和 initramfs 文件名也要一起换成对应版本。

这里之所以要求把 EFI 分区挂到 /boot,就是因为上面这些内核和 initramfs 文件默认就在 /boot 下面。
如果你仍然把 EFI 分区挂在 /boot/efi,那启动项里看到的 /vmlinuz-linux 往往并不在同一个分区上,最容易出现“配置看着没错,但实际启动不了”的情况。

如果你后面还要手动给 Windows 加一个条目,也可以补一个:

nano /boot/loader/entries/windows.conf

内容类似这样:

title Windows
efi /EFI/Microsoft/Boot/bootmgfw.efi

第十五步:配置网络、蓝牙与音频

先安装网络相关工具:

pacman -S networkmanager dhcpcd

然后启用 NetworkManager

systemctl enable NetworkManager

对大多数桌面场景来说,NetworkManager 已经够用了。
除非你很明确知道自己在做什么,不然一般不建议再同时给同一块网卡手动启 dhcpcd@网卡名,免得两套网络管理互相打架。

如果你需要蓝牙和 PipeWire 音频,再装:

pacman -S bluez bluez-utils pipewire wireplumber pipewire-pulse pipewire-alsa pipewire-jack

有蓝牙需求的话,再启用蓝牙服务:

systemctl enable bluetooth

如果你还准备装 AUR helper,也可以在这一步顺手装上:

pacman -S paru

pacstrap、chroot、GRUB 与 NetworkManager 收尾示意

第十六步:安装显卡驱动(按硬件选择)

这一节按你的显卡类型来,不是三种都装。

Intel 核显

如果你主要使用 Intel 核显,通常装下面这些就够了:

pacman -S mesa vulkan-intel

AMD 显卡

如果你是 AMD 独显或核显,常见组合是:

pacman -S mesa vulkan-radeon xf86-video-amdgpu

NVIDIA 显卡

如果你是 NVIDIA 显卡,可以先装这一组:

pacman -S nvidia nvidia-utils nvidia-settings libva-nvidia-driver

如果你用的是 linux-lts、多内核,或者后面经常切换内核,通常更建议改用:

pacman -S nvidia-dkms nvidia-utils nvidia-settings linux-headers libva-nvidia-driver

对于双显卡笔记本,后面也可能还会用到 nvidia-prime

第十七步:安装 GNOME 桌面(可选)

如果你只想装一个纯基础系统,到上一步其实就可以先停住。
如果你打算继续装桌面,这里给一套偏实用的 GNOME 组合。

pacman -S gnome-shell gdm gnome-control-center gnome-settings-daemon gnome-console nautilus gnome-keyring gnome-system-monitor gvfs gvfs-dnssd gvfs-mtp gnome-backgrounds loupe decibels gst-libav gnome-text-editor gnome-tweaks ibus ibus-libpinyin

如果你更喜欢一次把整组 GNOME 组件直接装全,也可以改用:

pacman -S gnome gdm

但第一次装机时,装一套自己真正用得上的最小桌面,后面会更省心。

第十八步:启用 GDM 并安装常用软件

如果你用了 GNOME,就把 gdm 设为开机启动:

systemctl enable gdm

再补几样常用软件:

pacman -S firefox mpv noto-fonts-emoji noto-fonts-cjk

上面这组比较适合作为刚装完系统时的第一批基础软件:

  • firefox:浏览器
  • mpv:播放器
  • noto-fonts-emoji:Emoji 字体
  • noto-fonts-cjk:中文字体

如果你有中文输入需求,前面装的 ibusibus-libpinyin 也能在 GNOME 里继续配起来。

第十九步:重启前检查

在退出前,建议至少检查这几项:

lsblk
cat /etc/fstab
locale
systemctl is-enabled NetworkManager

如果你走的是 GRUB,再检查:

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

如果你走的是 systemd-boot,可以看一下:

bootctl status

如果你已经装了桌面,也可以顺手确认:

systemctl is-enabled gdm

检查重点是:

  • GRUB 路线下的 /boot/efi,或 systemd-boot 路线下的 /boot,是否真的挂载过
  • fstab 里 UUID 是否正确
  • 网络服务是否已经 enable
  • 你选择的引导器是否已经写好配置
  • 如果装了桌面,显示管理器有没有设成自启

第二十步:退出并重启

退出 chroot:

exit

卸载所有挂载:

umount -R /mnt

然后重启:

reboot

如果你更喜欢先彻底关机,也可以执行:

poweroff

如果你是从安装 U 盘启动的,记得在重启或关机后拔掉安装介质,避免又回到 Live 环境。

常见坑

1. 磁盘名抄错

这是最容易出事的地方。
/dev/sda2/dev/vda2/dev/nvme0n1p2 完全不是一回事,照抄别人的设备名很容易把盘搞错。

2. 实际不是 UEFI 模式启动

如果安装介质本身就不是以 UEFI 模式启动,后面的 EFI 分区和引导安装步骤再怎么做也会别扭。
开工前先确认 /sys/firmware/efi/efivars 是否存在,会省掉很多排查时间。

3. EFI 分区没挂载好

如果你走 GRUB 却没挂载 /boot/efi,或者走 systemd-boot 却没把 EFI 分区挂到 /boot,那 grub-installbootctl install 都可能失败,或者装完根本起不来。

4. locale 只开中文

安装阶段只保留中文 locale,tty 更容易出现显示问题。
保留 en_US.UTF-8 会更稳。

5. 同时让 NetworkManagerdhcpcd 抢同一块网卡

桌面机器上这类问题很常见。
如果你已经启用了 NetworkManager,通常就不要再给同一接口额外启一个 dhcpcd@...

6. systemd-boot 的 UUID 或 rootflags 写错

如果你走 systemd-bootarch.conf 里最容易写错的就是根分区 UUID 和 subvol=@
这里一旦写错,启动时就会直接找不到根文件系统。

7. 装了桌面却忘了启用 gdm

这也是很常见的收尾问题。
桌面包装了,但没有 systemctl enable gdm,重启后还是只会进 TTY。

小结

如果你是第一次手装 Arch,与其一开始把所有可选项都塞进去,不如先让一条主线稳定跑通:

  • 联网
  • 分区
  • Btrfs
  • pacstrap
  • chroot
  • locale / 主机名 / 用户
  • 引导器
  • NetworkManager

等基础系统能稳定启动后,再继续补:

  • 蓝牙和 PipeWire
  • 显卡驱动
  • GNOME
  • 常用软件

这样走下来,基本就不是“装上一个能进 shell 的 Arch”,而是一套可以继续日常使用的桌面系统了。