3107 字
16 分钟
安装 Arch Linux

主目录:返回主目录#

上一节:安装 Arch Linux 前的准备工作#

我这里使用的文件系统是 Btrfs,ESP 挂载到 /efi,方便滚挂时快速回档。

当然也可以使用 Ext4,参考 Arch Linux 的官方文档即可:

Arch Linux 教程 - 安装指南

从U盘启动进入 Arch Linux Live 环境后,如果觉得字体太小可以使用以下命令调整

setfont ter-v32n

确认固件类型#

cat /sys/firmware/efi/fw_platform_size

如果输出64,说明主板是64位x64 UEFI固件,可以直接推进下面的步骤。

如果输出32,说明是32位UEFI;如果提示No such file or directory没有文件或目录,说明是BIOS。

这两种情况可以查阅

ArchWiki_Grub

虚拟机建议调整为UEFI。

网络配置#

连接网络#

有线网自动连接,还可以用数据线分享手机的网络。

确认网络连接使用:

ip a #查看网络连接信息,如果出现了紫色的ip地址说明成功连接
ping -c 3 www.bilibili.com #确认网络正常
  • 使用iwctl命令行工具连接wifi(此工具由iwd提供)

    1. 启动

      iwctl

      此时会进入iwctl,提示符会产生变化。

    2. 连接

      device list #列出设备
      station wlan0 scan #扫描网络
      station wlan0 get-networks #列出所有扫描的的wifi
      station wlan0 connect [wifi名(不能有中文,有空格的话把wifi名用引号包起来)]
    3. 退出iwctl

      exit

确认开启了NTP(网络时间协议)#

运行timedatectl,应该会在输出看到NTP已经开启,否则在安装时可能会出现验证方面的报错:

NTP service: active

手动开启使用:

Terminal window
timedatectl set-ntp true

reflector自动设置镜像源#

reflector配置镜像源加速。

reflector -p https -a 12 -c cn --v --sort rate --save /etc/pacman.d/mirrorlist

同步软件列表数据

pacman -Sy

硬盘分区#

Terminal window
lsblk -pf #查看当前分区情况
fdisk -l /dev/想要查询详细情况的硬盘
Terminal window
cfdisk /dev/nvme0n1 #选择自己要使用的硬盘进行分区
  1. 如果是新硬盘的话会弹出选项,选GPT。

  2. efi分区

    上下方向键选中空闲空间,左右方向键选择NEW创建512MB的分区,类型(type)选择efi system。

    PS:如果你的类型里没有efi system说明你的硬盘不是gpt分区表,可以使用cfdisk -z 设备名以空分区表打开硬盘,选择gpt分区表即可。⚠️警告⚠️ 这个操作会清空硬盘上的分区。

  3. 根分区

    其余空间全部分到一个分区里,类型linux filesystem不需要更改。

  4. 保存

    选择write,输入yes保存。quit退出。

格式化分区#

  1. 再次查看分区情况

    Terminal window
    lsblk -pf #查看分区情况
    fdisk -l /dev/想要查询详细情况的硬盘
  2. 格式化efi分区

    Terminal window
    mkfs.fat -F 32 /dev/nvme0n1p1(EFI分区名)
  3. 格式化btrfs根分区

    Terminal window
    mkfs.btrfs /dev/nvme0n1p2(根分区名)
    #加上-f参数可以强制格式化

创建btrfs子卷#

子卷是btrfs的一个特性,跟快照有关。通常至少要创建root子卷(存放系统文件)和home子卷(存放用户文件),根据命名规范取名为@@home

同理,你可可以创建其他子卷自由管理。

顺便一提,btrfs有写入放大的问题,建议关闭需要频繁修改的文件所在目录的 CoW 属性。

# 为目录禁用 CoW (注意:目录本身必须为空)
mkdir /var/lib/mysql
chattr +C /var/lib/mysql
  • 挂载

    Terminal window
    mount -t btrfs /dev/nvme0n1p2(根分区名) /mnt
  • 创建子卷

    Terminal window
    btrfs subvolume create /mnt/@
    btrfs subvolume create /mnt/@home
    btrfs subvolume create /mnt/@swap #不需要休眠到硬盘功能的话跳过这个,现代设备一般不需要
  • 可选:确认

    Terminal window
    btrfs subvolume list /mnt
  • 取消挂载

    Terminal window
    umount /mnt

以后系统出问题进入live环境解决后,一定记得取消挂载。

正式挂载#

  1. 挂载root子卷

    mount -t btrfs -o subvol=/@,compress=zstd /dev/nvme0n1p2 /mnt

    compress是btrfs的另一个特性,透明压缩。在数据写入磁盘前先进行压缩,提升读写性能,节省空间,延长寿命。可以像这样zstd:3指定压缩等级,最高15。默认为3,在意cpu性能可以设置成1。

    这个一定要开,对btrfs很重要。

  2. 挂载home子卷

    mount --mkdir -t btrfs -o subvol=/@home,compress=zstd /dev/nvme0n1p2 /mnt/home
  3. 可选:挂载swap子卷(不需要休眠功能的话跳过这一步)

    mount --mkdir -t btrfs -o subvol=/@swap,compress=zstd /dev/nvme0n1p2 /mnt/swap
  4. 挂载efi分区(ESP)

    mount --mkdir /dev/nvme0n1p1 /mnt/efi

    记得把/dev/nvme0n1p1替换为自己对应的efi分区设备名。

  5. 可选:复查挂载情况

    df -h

安装基本系统#

pacstrap -K /mnt base base-devel linux linux-firmware btrfs-progs networkmanager vim sudo intel-ucode
# -K 初始化密钥
# base-devel是编译其他软件的时候用的
# linux是内核,可以更换
# linux-firmware是固件
# btrfs-progs是btrfs文件系统的管理工具
# networkmanager 是联网用的,是各个桌面环境标配的联网工具
# vim 是文本编辑器,也可以换成别的,比如nano、neovim
# sudo 和权限管理有关
# intel-ucode 是微码,用来修复和优化cpu。amd用户安装amd-ucode

pacstrap命令是把软件安装到指定的根目录下。

注意:如果你使用的是marvell的无线网卡,这里要额外安装linux-firmware-marvell,否则进系统找不到网卡。

可选:swap交换空间#

电源管理/挂起与睡眠 - Arch Linux 中文维基

Swap - ArchWiki

Swap - Manjaro

内存swap比硬盘swap更合适现代设备,如果你不需要休眠功能的话跳过这一步,后续会有将内存用作swap的设置(zram)。

swap大小参考:

内存(GB)不需要休眠(GB)需要休眠(GB)不建议超过(GB)
1122
2234
3356
4468
52710
62812
831116
1231524
1642032
2452948
3263864
64872128
12811139256
25616272512
  1. 创建swap文件

    此处的64g应该是你实际需求的swap大小

    btrfs filesystem mkswapfile --size 64g --uuid clear /mnt/swap/swapfile
  2. 启动swap

    swapon /mnt/swap/swapfile

生成fstab文件#

系统会根据fstab中的内容自动进行挂载。

Terminal window
genfstab -U /mnt > /mnt/etc/fstab
# genfstab(生成文件系统表)
# -U 用uuid指定分区
# > 大于号代表输出结果覆盖写入到有右边的文件里
# 如果是>>两个大于号则代表追加写入

系统初始化配置#

更换根目录(change root)#

进入刚刚安装的系统

Terminal window
arch-chroot /mnt

设置时间和时区#

Terminal window
timedatectl set-timezone Asia/Shanghai
hwclock --systohc

hwclock --systohc生成调节时间误差的文件。

除了timedatectl命令,还可以手动创建链接。

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

本地化设置#

  1. 编辑配置文件

    vim /etc/locale.gen

    取消en_US.UTF-8 UTF-8zh_CN.UTF-8 UTF-8的注释。

  2. 生成本地化配置

    locale-gen
  3. 设置系统语言

    vim /etc/locale.conf

    写入

    LANG=en_US.UTF-8

    保存并退出。

    /etc/locale.conf这个文件是系统级的语言设置,zh_CN.UTF-8是中文,但是会导致tty的中文字符全部变成豆腐块,所以不建议这么做。后续安装完桌面环境后在用户空间修改系统语言。

设置主机名#

vim /etc/hostname

写入主机名即可。

设置root密码#

passwd

输入过程不显示,直接输入回车即可。

安装引导程序#

这是uefi引导的安装方式,如果你是bios设备请看archwiki的grub页面。

  1. 安装必要的软件包

    Terminal window
    pacman -S grub efibootmgr os-prober exfat-utils

    os-proberexfat-utils 用来搜索windows(不配置双系统的话可以不装)。

  2. 安装grub

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

    --bootloader-id 任意取一个启动项名字;

    如果引导出问题可以重新进live环境重新挂载,这一步加上--removable选项。

  3. 编辑grub的源文件

    vim /etc/default/grub
    • 启动项记忆功能

      GRUB_DEFAULT=0改成=saved,再取消GRUB_SAVEDEFAULT=true的注释。

    • 显示开机日志

      GRUB_CMDLINE_LINUX_DEFAULT里面去掉quiet以显示开机日志。再设置loglevel=5把日志等级为5。loglevel共7级,5级是一个信息量的平衡点。

    • 禁用watchdog

      GRUB_CMDLINE_LINUX_DEFAULT里添加nowatchdog以及modprobe.blacklist=sp5100_tco。intelcpu用户把sp5100_tco换成iTCO_wdt

      这个功能对个人用户基本没啥用,服务器也不会装 arch。

    • 允许使用os-prober搜索其他系统

      取消最后一行GRUB_DISABLE_OS_PROBER=false的注释。

  4. 在grub的默认安装位置创建链接

    ln -sf /efi/grub /boot/grub

    大多数程序会默认检测/boot/grub作为grub的安装位置,所以创建一个链接方便使用。

  5. 生成grub的配置文件

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

以上的grub配置方法已经足够使用,但存储在FAT文件系统上的grub.cfg无法被btrfs快照回档,极端情况下仍会出现问题,例如在快照启动项里生成了grub.cfg导致永远启动进快照启动项。

如果你想要绝对稳定的回档,可以继续操作:

  1. 删除链接

    如果你的/boot/grub是指向esp里的grub的链接,请删除后创建真实的目录。

    sudo rm -rf /boot/grub
    sudo mkdir -p /boot/grub
  2. 查找根分区的UUID

    findmnt / -n -o UUID

    findmnt /列出跟根目录挂载信息

    -n隐藏标题

    -o UUID只输出UUID

  3. 编辑存根

    sudo vim /efi/grub/grub.cfg

    此处的/efi应为你实际的esp位置。

    写入以下内容:

    # 设置root环境变量为实际的根分区设备
    search --fs-uuid --no-floppy --set=root 你的Btrfs分区UUID
    # 读取根分区中的grub.cfg文件
    configfile /@/boot/grub/grub.cfg

    search --fs-uuid <你的Btrfs分区UUID>通过uuid搜索分区。

    --no-floppy跳过软盘设备。

    --set=root将搜索到的第一个设备设置为root

    root是grub的环境变量之一,默认值是grub所在的设备。我的grub安装在了esp,那root的值就是esp的设备名。

    我们为了btrfs回档要把grub.cfg存在btrfs文件系统里,所以要手动指定root的值为btrfs文件系统所在的设备。

    configfile读取配置文件。/@/boot/grub/grub.cfg是配置文件目录,不指定设备的话默认在root环境变量指定的设备上查找此目录。

  4. 配置快照启动项grub-btrfs

    grub-btrfs.cfg是快照启动项的配置文件。grub寻找此文件时查的目录由prifix变量指定,这个变量代表的是grub的安装位置。我的grub安装在esp,所以prefix的值是/efi/grub,也就是说grub查找快照启动项的配置文件时的完整路径是/efi/grub/grub-btrfs.cfg

    但是快照启动项的配置文件默认被生成到/boot/grub/grub-btrfs.cfg而不是/efi/grub/grub-btrfs.cfg,所以我们要修改grub-btrfs的配置文件指定grub在/boot/grub里寻找快照启动项的配置文件。

    sudo vim /etc/default/grub-btrfs/config

    找到下面这段内容:

    # GRUB_BTRFS_GBTRFS_SEARCH_DIRNAME="\${prefix}"

    改成:

    GRUB_BTRFS_GBTRFS_SEARCH_DIRNAME="/@/boot/grub"

    注意,/@必须是你实际的根子卷。

  5. 生成grub.cfg

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

配置zram#

zswap - ArchWiki

zram - ArchWiki

zram将内存的一部分空间用作交换空间,如果你没有配置swap,请一定配置zram

  1. 安装zram-generator

    pacman -S zram-generator
  2. 编辑配置文件

    vim /etc/systemd/zram-generator.conf

    写入

    [zram0]
    zram-size = min(ram / 2, 16384)
    compression-algorithm = zstd

    zram-size设置最多存储多少数据,注意这里设置的是压缩之前的大小。

  3. 禁用zswap

    zswap是swap的缓存。需要交换的数据在存入交换空间之前会先被zswap压缩后暂时放进内存里。和zram功能重复且引入了复杂性,故禁用。

    vim /etc/default/grub

    在GRUB_CMDLINE_LINUX_DEFAULT=""里写入zswap.enabled=0

    GRUB_CMDLINE_LINUX_DEFAULT="... zswap.enabled=0 ... "
  4. 重新生成grub的配置文件

    grub-mkconfig -o /efi/grub/grub.cfg

启用网络服务#

开启新系统的NetworkManager服务

systemctl enable NetworkManager
  • 可选:替换网络后端为iwd

    NetworkManager的无线网默认后端是wpa_supplicant,可以更换为更现代的iwd。注意:部分设备更换iwd后端可能无法正常联网。

    1. 安装iwd

      pacman -S iwd impala

      impalaiwd的tui

    2. 编辑配置文件

      # 创建配置文件目录,-p代表如果已经存在就跳过
      mkdir -p /etc/NetworkManager/conf.d
      # 新建配置文件并用vim进行编辑
      vim /etc/NetworkManager/conf.d/iwd.conf

      写入:

      [device]
      wifi.backend=iwd

退出chroot#

exit

重启电脑#

reboot

此时会自动取消所有的挂载。

拔掉系统u盘#

如果u盘没拔掉的话记得拔掉

选择BIOS启动项#

如果没有出现archlinux的启动项,看这个页面:https://wiki.archlinux.org/title/GRUB

登录root账户#

用户名为root,密码刚刚设置过了。

连接网络#

  1. 验证是否有网

  2. 连接wifi

    nmtui

    nmtui是networkmanager提供的TUI(终端用户交互程序)。如果你使用的是iwd后端还可以用impala连接wifi。

放松一下吧#

pacman -S fastfetch lolcat cmatrix fzf yazi btop less

fastfetch 装什么 Arch Linux [doge]。

顺便调一下vim的配置

sudo vim /etc/vimrc

或者等创建完用户

vim ~/.vimrc
写入

set number # 开启行号显示 set relativenumber # 开启相对行号 syntax on # 语法高亮 set mouse=a # 启用鼠标支持 imap jk # 将 jk 绑定为 Esc 键,这个主要是为了方便退出插入模式

## 下一节:[安装桌面环境前的准备](../before-desktop/)
安装 Arch Linux
https://laplacan.icu/posts/archlinux-guide/install-arch/
作者
LapLacan
发布于
2026-05-27
许可协议
CC BY-NC-SA 4.0