如何获取属于你的操作系统

12 min

Arch奉行极简主义,用户可以自行构建任何想要的功能,接下来以实际本机部署为例简单介绍如何构建属于自己的archlinux

准备工作

电脑、U盘(任何移动存储介质)、网络、基本检索能力

  • 不论你采取何种镜像方案,即使是离线版镜像构建我也推荐你准备网络条件,这样可以确保内核和工具的更新,当然如果你足够熟练也可自行抉择
  • 如果是无线网络,请确保wifi名称是自己记得住的英文名,因为tty环境下是没有办法显示中文的,会变成一个个没办法识别的方块
  • 如果你希望在同一块硬盘上安装双系统,请为archlinux留下足够大小的硬盘空间,为了给自己留下安装其他软件的余地,请至少准备100GB;并且确保EFI分区容量不小于256MB,或者新增一个额外的挂载点
  • 检查Win10分区是否启用Bitlocker加密,请提前获取恢复密钥,并且关闭电源计划中的快速启动!

在操作前请确保仔细阅读并对不太理解的检索学习,谨慎操作,及时备份,数据无价。

安装介质的构建

  1. 仅推荐从archlinux官方的镜像源下载,请注意,arch是滚动发行版

  2. 如果你要自行编译,请参考“内核/传统编译”

  3. 如果使用官方提供的安装镜像,我推荐你使用ventory烧录

基础安装

1. 使用arch引导盘

关机,插入U盘后启动,进入bios选择从U盘启动,在第一个选项回车,以进入arch安装环境

2. UEFI检查

systemctl stop reflector.service
# 禁用自动更新软件源,因为地理上造成的特殊网络环境最好关掉
ls /sys/firmware/efi/efivars
# 若输出了一堆efi变量,则启动方式确实为UEFI模式,本帖发布的2025年绝大多数机器是UEFI引导的

3. 联网

archlinux的安装必须要求网络环境,离线安装步骤则更为繁琐,可参考社区的Offline installation

有线网络连接则按下不表,连上网线检查接口提示灯是否闪烁,等待几秒地址分配完成建立连接后即可联网

当然在校园网环境下则需要上级路由完成认证,可以参考nbtverify项目

无线网络则调用iwctl进行连接

lspci -k | grep Network
# 检查无线网卡有没有干活,若明确无问题可以跳过检查

检查内核是否加载了无线网卡驱动

一般会显示形如: 00:14.3 Network controller: Intel Corporation Wi-Fi 6 AX201 (rev 20)

若没有执行检查无线连接是否被禁用(blocked: yes)

rfkill list
# 无线网卡一般叫 wlan0
ip link set wlan0 up
# 若有类似报错:Operation not possible due to RF-kill,则执行
rfkill unblock wifi
# 使用iwctl联网
iwctl # 进入交互式命令行
device list # 列出无线网卡设备名,比如无线网卡看到叫 wlan0
station wlan0 scan # 扫描网络
station wlan0 get-networks # 列出所有 wifi 网络
station wlan0 connect wifi-name # 进行连接,注意这里无法输入中文。回车后输入密码即可
exit # 连接成功后退出

ping www.bilibili.com # 测试网络连通与否

若在网络配置上有一些意外情况,可以参见网络配置/无线网络配置

5. 同步系统时钟

timedatectl set-ntp true # 将系统时间与网络时间进行同步
timedatectl status # 检查服务状态

6. 换国内源(在国际互联网内可忽略)

vim /etc/pacman.d/mirrorlist # 准备换源,若上级路由完成代理即可忽略
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch # 中国科学技术大学开源镜像站
Server = https://mirrors.tuna.tsinghua.edu.cn/archlinux/$repo/os/$arch # 清华大学开源软件镜像站
Server = https://repo.huaweicloud.com/archlinux/$repo/os/$arch # 华为开源镜像站

7. 建立 Btrfs 分区

查看磁盘信息

lsblk

显示当前分区情况。请仔细检查你要安装 Arch 的目标硬盘名称

硬盘命名规则:

  • SATA 协议sda, sdb, sdc …… 分区为 sda1, sda2
  • NVMe 协议nvme0n1, nvme1n1 …… 分区为 nvme0n1p1, nvme0n1p2

示例以 SATA 硬盘为例,请根据实际情况替换 /dev/sdx

cfdisk /dev/sdx

是不是看到一个友好的 TUI 分区界面了?😄

分区操作步骤

1. 创建 Swap 分区
  • 用方向键选中 Free space
  • 按下 [New] 并回车,输入大小(建议为内存大小的 60%~100%)
  • [Type],选择 Linux swap
2. 创建根分区(用于 Btrfs)
  • 选中剩余的 Free space,按 [New] 回车
  • 输入大小(默认使用全部剩余空间)
  • 保持类型为默认的 Linux filesystem
3. 写入分区表
  • 选中 [Write],输入 yes 并回车

    ⚠️ 注意:如果没有写入,之前的操作都不会生效!

格式化分区

再次检查磁盘
fdisk -l
格式化 EFI 分区(如需新建)
mkfs.fat -F32 /dev/sdxn

💡 如果你是双系统用户,可以共享 Windows 的 EFI 分区,无需格式化。但要确保空间足够,详见 Dual boot with Windows

格式化 Swap 分区
mkswap /dev/sdxn
格式化 Btrfs 分区
mkfs.btrfs -L myArch /dev/sdxn

创建并挂载 Btrfs 子卷

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

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

umount /mnt

⚠️ 最后提醒

  • 请再次检查命令和操作的正确性!
  • 误操作可能导致数据丢失,特别是误删 Windows 分区 😥

8. 挂载,请依序从根目录开始挂载

mount -t btrfs -o subvol=/@,compress=zstd /dev/sdxn /mnt # 挂载 / 目录
mkdir /mnt/home # 创建 /home 目录
mount -t btrfs -o subvol=/@home,compress=zstd /dev/sdxn /mnt/home # 挂载 /home 目录
mkdir -p /mnt/boot # 创建 /boot 目录
mount /dev/sdxn /mnt/boot # 挂载 /boot 目录
swapon /dev/sdxn # 挂载交换分区
df -h # 检查挂载
free -h # 复查Swap分区挂载

9. 安装系统

pacstrap /mnt base base-devel linux linux-firmware btrfs-progs
# 如果使用btrfs文件系统,额外安装一个btrfs-progs包
pacman -S archlinux-keyring
# 如果提示 GPG 证书错误,可能是因为使用的不是最新的镜像文件,可以通过更新 archlinux-keyring 解决此问题
pacstrap /mnt networkmanager vim sudo zsh zsh-completions
# 使用pacstrap脚本安装必要功能性软件

10. 生成fstab文件

生成fstab以定义磁盘分区,受当前挂载情况影响

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

11. 进入写好的新系统

arch-chroot /mnt
# 代码高亮消失了?不要慌,说明你已经成功change root了

12. 设置主机名称与时区

vim /etc/hostname
# 给电脑起个名字吧XD(不要包含特殊字符和空格,不然有坑的,并且不起主机名会有时候出奇怪问题,一些GUI程序莫名其妙死了,不论怎样还是起一个名字)
vim /etc/hosts
# 编辑主机host

填入如下内容(其中myarch替换成你自己的主机名,中间间隙不是空格是tab对齐,强迫症狂喜XD)

127.0.0.1   localhost
::1         localhost
127.0.1.1   myarch.localdomain  myarch
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 在上海时区创建符号链接
# 别问为什么是上海,因为没有北京XD,当然你也可以使用其他时区
ls /usr/share/zoneinfo/
# 检查你要的时区,更换上条命令的地址

13. 硬件时间设置

hwclock --systohc
# 系统时间同步到硬件时间

14. 设置区域

vim /etc/locale.gen
# 编辑 /etc/locale.gen,去掉 en_US.UTF-8 UTF-8 以及 zh_CN.UTF-8 UTF-8 行前的注释符号(#)
# 这一步决定了软件使用的语言和字符集
locale-gen
# 生成locale
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
# 注入locale.conf,不推荐任何中文locale,tty会乱码

15. 设置root密码

passwd root
# 输入密码是隐式的,并不会显示,并非键盘坏了XD

16. 安装微码

pacman -S intel-ucode # Intel
pacman -S amd-ucode #AMD

17. 安装Grub引导

pacman -S grub efibootmgr os-prober
# grub是启动引导器,efibootmgr是被启动器用来向nvram写入启动项,os-prober用于引导win10
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH
# 安装grub到EFI分区
vim /etc/default/grub
# 编辑启动参数
# 修改"loglevel=3 quiet" 至 "loglevel=5 nowatchdog"
# 文件末尾新增一行:GRUB_DISABLE_OS_PROBER=false
  • 去掉 GRUB_CMDLINE_LINUX_DEFAULT 一行中最后的 quiet 参数
  • 把 loglevel 的数值从 3 改成 5。这样是为了后续如果出现系统错误,方便排错
  • 加入 nowatchdog 参数,这可以显著提高开关机速度
  • 加入os-prober参数,用于引导win10
grub-mkconfig -o /boot/grub/grub.cfg
# 生成grub所需配置文件
# 若检查到win10,则会多出一行“Found Windows Boot Manager on /dev/nvme0n1p1@/EFI/Microsoft/Boot/bootmgfw.efi done”的回显
# 若win10在另一块硬盘则不会输出,进系统后重新挂载再跑一遍即可

此处的全部参数可参见archwiki

18. 完成安装

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

重启后用root账户登录

systemctl enable --now NetworkManager # 设置开机自启并立即启动 NetworkManager 服务
ping www.bilibili.com # 测试网络连接

如果是无线网的话

nmcli dev wifi list # 显示附近的 Wi-Fi 网络
nmcli dev wifi connect "Wi-Fi名(SSID)" password "网络密码" # 连接指定的无线网络
nmtui
# 个人还是比较喜欢nmtui,比较友好XD
pacman -S fastfetch
fastfetch
# 安装fastfetch,检查系统信息
# 喜闻乐见的neofetch时间XD
shutdown 0
shutdown -h now
poweroff
# 上面三个命令都是关机,🤣记得关机,电源策略还没写呢

恭喜 🎉

至此,你已经完成一个基础无图形界面的archlinux安装了

图形化安装应该会在下一次更新发布,不过还是那句老话:多看手册

本文抛砖引玉,希望能吸引更多同好前来计协蕉流♂


友情链接:NBTCA