跳到主要内容
2026-06-28
11 分钟
...
教程

文章摘要

这篇博文记录了博主为一台2017年HP Envy 13-ad1xx老笔记本(i7-8550U/8GB DDR3/NVIDIA MX150)安装Arch Linux的完整过程,重点涵盖网络共享方案、LUKS加密+Btrfs子卷分区、systemd-boot+UKI引导配置及NVIDIA驱动兼容性规避等实操细节。

最近内存涨价涨的疯狂,连带着笔记本价格也水涨船高。再买新的肯定不值得,但我目前正在使用的电脑又太沉不方便携带,于是把目光投眼于我爸的老电脑上。

跑 Windows11 肯定是算了,虽然电脑还算是现代,但我没必要忍受卡顿,于是 Linux 自然成了首选。

至于为什么是 Arch,因为我离不开 Aur.

电脑配置

电脑是 HP Envy 13-ad1xx,是 2017 年的电脑(哇距离 2017 年都快 10 年了),配置如下:

  • CPU: Intel I7-8550U
  • GPU: Intel Graphic 620 / Nvidia MX150
  • RAM: 8GB DDR3
  • SSD: KingSton SA2000M8500G

看到 Nvidia 就感觉麻烦了,哎。FUCK YOU, NVIDIA!

关于网络问题

可以使一台 Windows 系统的,连接网线的,拥有无线网卡的,运行着 TUN 模式代理的设备充当软路由。

首先,以管理员模式启动代理软件,开启 TUN 模式。

之后,在设置中开启电脑热点。

接着,使用快捷键Win+R,输入ncpa.cpl打开网卡列表:

双击打开 TUN 模式的网卡属性,按如下流程操作:

其它设备在连接网络时选择热点即可。

可在其它设备上使用:

SHELL
curl -I www.google.com

检验是否成功,若返回 200 即为成功。

安装 Arch Linux

进入 Live CD 环境

先下载镜像。镜像可以在镜像源下载,这里查看。

如选择阿里云1该链接为本文撰写日期(2026.06.28)的最新镜像,时效性强,切忌盲目使用,如下图所示,选择archlinux-2026.06.01-x86_64.iso下载:

接着烧录启动盘,我习惯用Rufus,不过也有人用Ventory,这个随意。

进入需要安装的电脑的 BIOS,关闭安全启动,同时清除安全启动金钥

上电启动(记得进 BIOS 关掉安全启动)。

启动完成后大致如图所示:

连接网络

接了网线应该直接就能用。连接到无线局域网参考以下步骤。

使用iwctl工具,在 shell 中输入以下内容:

SHELL
iwctl                                       # 进入 iwctl 命令行
[iwd]# device list                          # 显示所有 Wifi 设备
[iwd]# station <适配器名称> scan             # 扫描网络(不会有输出)
[iwd]# station <适配器名称> get-networks     # 显示所有扫描到的网络
[iwd]# station <适配器名称> connect <SSID>   # 连接网络
[iwd]# exit                                 # 退出

可尝试ping baidu.com查看是否连接到互联网。

ssh 连接

安装过程中会有很多地方需要输入命令,手输肯定不方便,能用 ssh 的话就能复制粘贴了

在已经启动 Live CD 的电脑上,使用ip addr查看 ip 地址。

如下图,注意选择正确的无线网络适配器下的内网 ip(这里是wlan0下的192.168.1.243):

然后,使用passwd设置 root 密码。

在连接到同一局域网的电脑中,使用ssh root@<获取到的ip地址>进行 ssh 连接。

如图为连接成功:

切换镜像

编辑/etc/pacman.d/mirrorlist

SHELL
mv /etc/pacman.d/mirrorlist /etc/pacman.d/mirrorlist.bak
nano /etc/pacman.d/mirrorlist

注意这里的 mirrorlist 会被复制到安装好的系统里面,需要仔细斟酌。

官方镜像列表在这里

最后我配出来是这样:

TEXT
# HTTPS

# University of Science and Technology of China
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch

# Tsinghua University
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch

# Aliyun
Server = https://mirrors.aliyun.com/archlinux/$repo/os/$arch

# HTTP

# University of Science and Technology of China
Server = http://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch

# Tsinghua University
Server = http://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch

# Aliyun
Server = http://mirrors.aliyun.com/archlinux/$repo/os/$arch

接着pacman -Syy更新。

磁盘分区

我习惯 cfdisk,别的也行,但这个我顺手。

因为有 UKI 的需求,把 boot 分区分得大一些。

最后分区表如下:

SHELL
lsblk /dev/nvme0n1

NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINTS
nvme0n1     259:0    0 465.8G  0 disk
├─nvme0n1p1 259:3    0     1G  0 part
└─nvme0n1p2 259:4    0 464.8G  0 part

接着创建 LUKS 加密卷与 BtrFS 子卷。

对刚分出的大分区加密:

SHELL
cryptsetup luksFormat /dev/nvme0n1p2

记住硬盘密码就好。

注意Are you sure? (Type 'yes' in capital letters):,输入YES,全大写(capital letters)。

接下来将加密分区解密,并映射为一个名为 cryptroot 的虚拟设备:

SHELL
cryptsetup open /dev/nvme0n1p2 cryptroot

解密后的设备路径是/dev/mapper/cryptroot,向这个加密通道内部写入BtrFS文件系统:

SHELL
mkfs.btrfs /dev/mapper/cryptroot

接下来挂载它,并创建需要的子卷就好,我这里是这样:

SHELL
# 压缩算法随意选择
mount --mkdir /dev/mapper/cryptroot -o compress=zstd /tmp/btrfs-full

# 暂时挂载到 /mnt
mount /dev/mapper/cryptroot /mnt

# 创建标准子卷
btrfs subvolume create /tmp/btrfs-full/@
btrfs subvolume create /tmp/btrfs-full/@home
btrfs subvolume create /tmp/btrfs-full/@var-log
btrfs subvolume create /tmp/btrfs-full/@var-cache
btrfs subvolume create /tmp/btrfs-full/@var-tmp
btrfs subvolume create /tmp/btrfs-full/@swap

# 为部分不需要写时复制的子卷设置相关属性
chattr +C /tmp/btrfs-full/@swap
chattr +C /tmp/btrfs-full/@var-cache
chattr +C /tmp/btrfs-full/@var-log

# 卸载,为了之后按照最终布局重新挂载
umount /tmp/btrfs-full

然后挂载子卷:

SHELL
# 注意这里的 compress 和上面选择的压缩算法一致
mount --mkdir /dev/mapper/cryptroot -o compress=zstd,space_cache=v2,noatime,subvol=@ /mnt
mount --mkdir /dev/mapper/cryptroot -o compress=zstd,space_cache=v2,noatime,subvol=@home /mnt/home
mount --mkdir /dev/mapper/cryptroot -o compress=zstd,space_cache=v2,noatime,subvol=@var-log /mnt/var/log
mount --mkdir /dev/mapper/cryptroot -o compress=zstd,space_cache=v2,noatime,subvol=@var-cache /mnt/var/cache
mount --mkdir /dev/mapper/cryptroot -o compress=zstd,space_cache=v2,noatime,subvol=@var-tmp /mnt/var/tmp
mount --mkdir /dev/mapper/cryptroot -o noatime,subvol=@swap /mnt/swap

# 创建 swapfile 并启用
btrfs fi mkswapfile /mnt/swap/swapfile --uuid clear --size 16G
swapon /mnt/swap/swapfile

# 格式化并挂载 EFI 分区
mkfs.vfat -F 32 /dev/nvme0n1p1
mount --mkdir /dev/nvme0n1p1 /mnt/boot

安装软件包

使用pacstrap安装必须的软件包,我这里是这些:

SHELL
pacstrap -K /mnt base base-devel linux linux-firmware btrfs-progs intel-ucode networkmanager nano neovim man-pages man-db texinfo sbctl openssh

写入磁盘分区配置

使用genfstab进行生成即可:

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

进入 chroot 环境

如下:

SHELL
arch-chroot /mnt

时间同步

设置时间和时区:

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

启用 ntp(这里用systemd-timesyncd

先进行配置,编辑/etc/systemd/timesyncd.conf

取消NTPFallbackNTP的注释,并配置NTP为喜欢的 ntp 服务,用空格区分(我这里是0.cn.pool.ntp.org 1.cn.pool.ntp.org 2.cn.pool.ntp.org 3.cn.pool.ntp.org

接着:

SHELL
systemctl enable --now systemd-timesyncd.service
timedatectl set-ntp true

验证:

SHELL
date

应当输出本地时间。

最后生成/etc/adjtime

SHELL
hwclock --systohc

区域和本地化设置

编辑/etc/locale.gen,取消需要地区的注释。于我而言,取消en_US.UTF-8 UTF-8en_SG.UTF-8 UTF-8zh_CN.UTF-8 UTF-8三行。

然后执行locale-gen以生成 locale 信息。

创建/etc/locale.conf文件,并编辑设定LANG变量:

TEXT
LANG=en_SG.UTF-8

使用en_SG以避免英式单位。

创建/etc/vconsole.conf确定键盘布局:

TEXT
KEYMAP=us

网络配置

设置主机名即可。

编辑/etc/hostname

TEXT
<主机名>

创建 initramfs

编辑/etc/mkinitcpio.conf,在HOOKS=(...)这一行的括号里的filesystem前添加sd-encrypt

重新生成内核镜像:

SHELL
mkinitcpio -P

配置启动引导程序与 UKI

这里用systemd-boot,使用以下命令来安装:

SHELL
bootctl install

忽略警告,这个没有影响。

获取加密主分区的 UUID:

SHELL
blkid -s UUID -o value /dev/nvme0n1p2

创建并编辑/etc/kernel/cmdline

TEXT
rd.luks.name=<你的LUKS分区UUID>=cryptroot root=/dev/mapper/cryptroot rootflags=subvol=@ rw quiet

编辑/etc/mkinitcpio.d/linux.preset,改成这样:

TEXT
ALL_config="/etc/mkinitcpio.conf"
ALL_kver="/boot/vmlinuz-linux"
#ALL_kerneldest="/boot/vmlinuz-linux"

#PRESETS=('default')
PRESETS=('default' 'fallback')

default_config="/etc/mkinitcpio.conf"
#default_image="/boot/initramfs-linux.img"
default_uki="/boot/EFI/Linux/arch-linux.efi"
#default_options="--splash /usr/share/systemd/bootctl/splash-arch.bmp"

fallback_config="/etc/mkinitcpio.conf"
#fallback_image="/boot/initramfs-linux-fallback.img"
fallback_uki="/boot/EFI/Linux/arch-linux-fallback.efi"
#fallback_options="-S autodetect"

创建对应的存放目录:

SHELL
mkdir -p /boot/EFI/Linux

检查当前安全启动状态:

SHELL
sbctl status

Installed: sbctl is not installed
Setup Mode: Enabled
Secure Boot: Disabled
Vendor Keys:    none

若在开始安装前清除了安全启动金钥,则Setup Mode应为Enabled。若不为,则重启至 BIOS 清除金钥后再返回 Live CD 环境中,重新解密、挂载磁盘后进入 chroot 环境。

接着生成自定义加密密钥、将密钥注册到主板 BIOS 中:

SHELL
sbctl create-keys
sbctl enroll-keys -m

再次查看 status,发现应如下:

SHELL
Installed: sbctl is installed
Owner GUID:     d6f24875-6a21-4500-aed4-9c7b211fe340
Setup Mode: Disabled
Secure Boot: Disabled
Vendor Keys:    microsoft

接着生成 UKI 文件:

SHELL
mkinitcpio -P

签名systemd-boot自身的引导程序与vmlinuz-linux

SHELL
sbctl sign -s /boot/EFI/systemd/systemd-bootx64.efi
sbctl sign -s /boot/EFI/BOOT/BOOTX64.EFI

检查是否全部被签名:

SHELL
sbctl verify

Verifying file database and EFI images in /boot...
 /boot/vmlinuz-linux is signed
 /boot/EFI/BOOT/BOOTX64.EFI is signed
 /boot/EFI/systemd/systemd-bootx64.efi is signed
 /boot/EFI/Linux/arch-linux-fallback.efi is signed
 /boot/EFI/Linux/arch-linux.efi is signed

全部被签名即为成功。

设置 root 密码、创建新用户

设置 root 密码:

SHELL
passwd

创建新用户:

SHELL
useradd -G wheel -m <用户>
passwd <用户>

设置wheel用户组权限:

SHELL
export EDITOR=nano
visudo

删除%wheel ALL=(ALL:ALL) ALL前的注释符号。

进入真机环境

先退出 chroot 环境:

SHELL
exit

然后卸载磁盘:

SHELL
swapoff /mnt/swap/swapfile
umount -R /mnt

重启计算机至 BIOS,打开安全启动。

重新启动后,设备应当会要求输入磁盘密码,输入后即可进入正常的 tty 界面。

配置 TPM2

SHELL
systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7 /dev/nvme0n1p2

会要求输入磁盘密码,输入后TPM2即配置完成。

此后开机时应不再要求输入磁盘密码。

安装 Nvidia 驱动

连接网络

打开 Network Manager:

SHELL
systemctl enable --now NetworkManager

连接网络:

SHELL
nmcli device wifi connect "<SSID>" password "<WIFI密码>"

还想使用 ssh 连接的话,打开 sshd:

SHELL
systemctl enable --now sshd

注意 ssh 默认不允许登入 root 账号,请登入刚刚设置的其他账号。

如果真机环境的局域网 ip 与 Live CD 下相同,可能由于known_hosts中保存的ssh_key与实际不一致而产生错误无法登入 ssh,这时修改~/.ssh/known_hosts删掉即可。

添加 32 位库、ArchLinuxCN

编辑/etc/pacman.conf

删除multilib配置前的注释符号,并在最底部添加:

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

更新数据库并安装archlinuxcn-keyring

SHELL
pacman -Sy archlinuxcn-keyring

更新系统并安装镜像仓库列表;

SHELL
pacman -Su archlinuxcn-mirrorlist-git

编辑/etc/pacman.conf,将刚刚添加的Server = https://mirrors.ustc.edu.cn/archlinuxcn/$arch替换为Include = /etc/pacman.d/archlinuxcn-mirrorlist

编辑/etc/pacman.d/archlinuxcn-mirrorlist,去除任意数量的想要使用的站点前面的注释即可。

安装 AUR 助手

ArchLinuxCN 源里面有paru,直接安装即可:

SHELL
pacman -S paru

安装驱动

Intel 这边相对省心一些:

SHELL
sudo pacman -S mesa lib32-mesa vulkan-intel lib32-vulkan-intel

不要安装xf86-video-intel

对于 Nvidia 显卡,先检查自己电脑显卡对应的驱动版本。对我而言,MX150 是Pascal架构的显卡,已经被 Nvidia 停止支持,因此需要安装旧版本驱动。

如下:

SHELL
paru -S nvidia-550xx-dkms nvidia-550xx-utils lib32-nvidia-550xx-utils

编辑/etc/mkinitcpio.conf,找到MODULES=(...)行,把 Intel 和 Nvidia 的模块按顺序填进去:

TEXT
MODULES=(i915 nvidia nvidia_modeset nvidia_uvm nvidia_drm)

找到BINARIES=(...)行,添加setfont

TEXT
BINARIES=(setfont)

然后重新生成内核镜像:

SHELL
mkinitcpio -P

重启电脑,使用nvidia-smi,应当得到类似输出:

TEXT
Sun Jun 28 16:53:24 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.163.01             Driver Version: 550.163.01     CUDA Version: 12.4     |
|-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce MX150           Off |   00000000:01:00.0 Off |                  N/A |
| N/A   48C    P0             N/A / ERR!  |       0MiB /   2048MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI        PID   Type   Process name                              GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

省电相关

MX150 是 Pascal 架构的显卡,不支持 RTD3,显卡待机时不能完全断电,不过仍然能通过 PRIME 减少耗电。

开启 Nvidia 电源管理服务:

SHELL
systemctl enable --now nvidia-suspend.service
systemctl enable --now nvidia-hibernate.service
systemctl enable --now nvidia-resume.service

编辑 Nvidia 模块配置文件/etc/modprobe.d/nvidia.conf

SHELL
options nvidia_drm modeset=1
options nvidia "NVreg_DynamicPowerManagement=0x01"

安装prime-run

SHELL
pacman -S prime-run

重新生成内核镜像:

SHELL
mkinitcpio -P

本地化

安装字体:

SHELL
pacman -S adobe-source-han-sans-cn-fonts adobe-source-han-serif-cn-fonts noto-fonts-cjk ttf-dejavu  wqy-microhei

更换一个可以显示中文的 VT(KMSCON):

SHELL
pacman -S kmscon

systemctl disable [email protected]
systemctl enable [email protected]

把全局 locale 换为简体中文(zh_CN)。编辑/etc/locale.conf

TEXT
LANG=zh_CN.UTF-8

重启电脑,搞定。

题外话

没有题外话。

我要累死了。

886

Footnotes

  1. 该链接为本文撰写日期(2026.06.28)的最新镜像,时效性强,切忌盲目使用

Arch Linux安装(LUKS+BtrFS+UKI+Nvidia驱动)
作者
序炁
发布于
2026-06-28
更新于
2026-06-28
许可协议
BY - 署名NC - 非商业性使用SA - 相同方式共享
QQ空间微博豆瓣XFacebookLinkedIn复制链接