MENU

arch linux 安装

August 21, 2025 • Read: 47 • 学习,折腾

我有两个硬盘,一个安装了 Windows,另一个是空硬盘,但里面有 efi 分区。没写到的基本都是照抄教程的和一些安装后的配置,就懒得写了。

Linux 启动流程

  1. 主板固件(UEFI)启动,并读取其内部存储(NVRAM)中的启动顺序列表。
  2. 如果 ARCH 启动项位于第一位,UEFI 会根据该条目记录的物理地址,找到并执行 GRUB 的 EFI 文件。
  3. GRUB 启动后,读取其配置文件 /boot/grub/grub.cfg
  4. 配置文件告诉 GRUB 内核位于 /boot 目录,随后 GRUB 将内核加载到内存中。
  5. 内核启动,系统开始运行。

Arch Linux 目录结构概览

/
├── boot/   (启动目录)
│   ├── efi/     <-- EFI 分区挂载点,存放 GRUB 和 Windows 的引导文件
│   ├── grub/    <-- GRUB 的配置文件 (grub.cfg)
│   ├── initramfs-linux.img  <-- 内核的内存镜像文件
│   └── vmlinuz-linux        <-- Linux 内核本身
│
├── etc/    (配置目录) -> 存放所有系统级软件的配置文件,如 pacman.conf, environment 等
│
├── home/   (用户家目录)
│   └── kkk/  <-- 普通用户 kkk 的家目录,所有个人文件和桌面设置都在这里
│
├── root/   (root 用户的家目录) -> 与普通用户完全分开的专属目录
│
├── usr/    (用户程序目录) -> 安装的绝大部分软件、库、文档都在这里,是系统最庞大的部分
│   ├── bin/     -> 用户可执行程序
│   └── lib/     -> 程序的库文件
│
├── var/    (可变文件目录) -> 存放经常变化的文件,比如日志(log)、缓存(cache)等
│
├── bin/    (二进制文件) -> 存放最基础的、系统启动时就需要用到的命令 (如 ls, cp)
├── sbin/   (系统二进制) -> 存放只有 root 才能使用的基础管理命令
├── dev/    (设备文件) -> 将硬件设备(硬盘、鼠标、键盘)抽象成文件,供系统读写
├── lib/    (库文件) -> 存放最基础的、系统启动就需要用到的库
├── mnt/    (挂载点) -> 临时挂载其他设备的目录
└── tmp/    (临时目录) -> 存放临时文件,重启后通常会清空

第一部分:安装前准备

1. Windows 环境准备

  1. 下载镜像:从官网下载最新的 Arch Linux 镜像。

  2. 制作启动盘

    • 推荐:使用 Ventoy 制作,一个 U 盘可以放入多个启动镜像,非常方便。
    • 备选:使用 balenaEtcher 将镜像烧录到 U 盘。
  3. 准备硬盘:在 Windows 的磁盘管理中,删除目标硬盘上的所有分区,仅保留 EFI 系统分区(这个分区将与 Arch Linux 共享)。

2. BIOS 设置

  1. 设置启动项:重启电脑进入 BIOS,在 Boot 页面将 U 盘(如 USB_EFI)设置为第一启动项。
  2. 关闭安全启动:务必关闭 Secure Boot 选项。

第二部分:在 Arch Live 环境中进行安装

这一步是将 Arch Linux 临时加载到内存中,以便我们对硬盘进行分区、格式化和安装核心系统。

1. 检查启动模式

确认系统是以 UEFI 模式启动的。如果以下命令成功执行且没有报错,则说明是 UEFI 模式。

ls /sys/firmware/efi/efivars

2. 连接网络

使用 iwd 工具连接到 Wi-Fi:

# 1. 进入 iwd 交互工具
iwctl

# 2. 查看网卡设备名 (通常是 wlan0)
[iwd]# device list

# 3. 扫描 Wi-Fi 网络
[iwd]# station wlan0 scan

# 4. 列出扫描到的网络
[iwd]# station wlan0 get-networks

# 5. 连接到你的 Wi-Fi (将 SSID 替换为你的 Wi-Fi 名称)
[iwd]# station wlan0 connect "SSID"

# 6. 退出 iwd
[iwd]# exit

# 7. 测试网络连通性
ping www.baidu.com

3. 更新系统时钟

timedatectl set-ntp true

4. 硬盘分区

  1. 首先,使用 lsblk 确认目标硬盘的名称(例如 /dev/nvme0n1)。

    lsblk
  2. 使用 cfdisk 工具进行分区,请务必选择正确的硬盘

    cfdisk /dev/nvme0n1
  3. cfdisk 界面中操作:

    • 删除旧分区:使用方向键 选中目标硬盘上已有的分区(除了 EFI 分区),然后在下方菜单选择 Delete 并回车,直到它们合并成一块 Free space
    • 创建 Swap 分区

      1. 选中 Free space,在菜单中选择 New 回车。
      2. 输入分区大小,建议不小于内存的 60%(例如 8G)。
      3. 创建后,默认类型为 Linux filesystem。在菜单中选择 Type,然后找到并选择 Linux swap
    • 创建根 (/) 分区

      1. 选中剩下的 Free space,选择 New 回车。
      2. 直接回车,使用所有剩余空间。
      3. 分区类型保持默认的 Linux filesystem 即可。
    • 写入分区表

      1. 检查分区表,确认有一个 Linux swap 分区和一个大的 Linux filesystem 分区。
      2. 确认无误后,在菜单中选择 Write,输入 yes 并回车。
      3. 选择 Quit 退出。

5. 格式化并挂载分区

  1. 再次使用 lsblk 确认各个分区的确切名称(例如 swap 是 p4,根是 p5)。
  2. 格式化分区

    • 格式化 Swap 分区:

      mkswap /dev/nvme0n1p4
    • 格式化根分区为 ext 4:

      mkfs.ext4 /dev/nvme0n1p5
  3. 激活并挂载分区

    • 激活 Swap:

      swapon /dev/nvme0n1p4
    • 挂载根 (/) 分区到 /mnt

      mount /dev/nvme0n1p5 /mnt
    • 挂载 EFI 分区到 /mnt/boot(假设你的 EFI 分区是 /dev/nvme0n1p2):

      mkdir /mnt/boot
      mount /dev/nvme0n1p2 /mnt/boot
  4. 检查挂载结果:运行 lsblk,应看到 nvme0n1p5 挂载在 /mntnvme0n1p2 挂载在 /mnt/boot

6. 安装 Arch 核心系统

  1. 更换镜像源:为了提高下载速度,编辑镜像源列表,将国内镜像源置顶。

    nano /etc/pacman.d/mirrorlist

    在文件最上方添加中科大的镜像源:
    Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch

  2. 安装基础包:使用 pacstrap 将核心系统安装到 /mnt

    pacstrap /mnt base linux linux-firmware vim nano

第三部分:配置新系统

1. 进入新系统 (chroot)

arch-chroot /mnt

2. 配置时区和语言

  • 设置时区 (上海):

    ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
  • 同步硬件时钟

    hwclock --systohc
  • 设置语言

    1. 编辑 locale.gen 文件:

      nano /etc/locale.gen

      找到并取消以下两行的注释(删除前面的 #):

      en_US.UTF-8 UTF-8
      zh_CN.UTF-8 UTF-8
    2. 生成 locale 信息:

      locale-gen
    3. 设置默认语言为英文(避免 TTY 乱码):

      echo "LANG=en_US.UTF-8" > /etc/locale.conf

3. 配置网络和主机

  • 设置主机名 (将 your-hostname 替换为你想要的名字):

    echo "your-hostname" > /etc/hostname
  • 配置 hosts 文件

    nano /etc/hosts

    在文件末尾添加以下内容(同样,替换 your-hostname):

    127.0.0.1   localhost
    ::1         localhost
    127.0.1.1   your-hostname.localdomain your-hostname

4. 设置 Root 密码

passwd

第四部分:安装和配置 GRUB 引导

1. 安装必要软件包

os-prober 用于扫描并识别硬盘上已有的其他操作系统(如 Windows)。

pacman -S grub efibootmgr os-prober

2. 部署 GRUB

将 GRUB 引导程序安装到 EFI 分区。

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH
  • --target=x86_64-efi: 指定为 64 位 UEFI 系统。
  • --efi-directory=/boot: 告诉 GRUB,EFI 分区被挂载在了 /boot 目录。
  • --bootloader-id=ARCH: 在 UEFI 启动菜单里创建一个名为 "ARCH" 的启动项。

3. 生成 GRUB 配置文件

  1. 启用 Windows 识别:编辑 GRUB 默认配置文件。

    nano /etc/default/grub

    找到 #GRUB_DISABLE_OS_PROBER=false 这一行,删除前面的 #

  2. 生成最终配置

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

    如果一切顺利,你应该能看到类似 Found Windows Boot Manager on ... 的输出信息。


第五部分:安装后配置

字体配置

  1. 安装中文字体(思源黑体):

    sudo pacman -S noto-fonts-cjk
  2. 更新字体缓存

    fc-cache -fv
  3. 创建字体配置文件
    ~/.config/fontconfig/ 目录下创建一个 fonts.conf 文件,优化字体渲染顺序,解决浏览器等应用字体显示问题。

    <?xml version="1.0"?>
    <!DOCTYPE fontconfig SYSTEM "urn:fontconfig:fonts.dtd">
    <fontconfig>
        <alias>
            <family>sans-serif</family>
            <prefer>
                <family>Noto Sans</family>
                <family>Noto Sans CJK SC</family>
                <family>Noto Sans CJK TC</family>
                <family>Noto Color Emoji</family>
            </prefer>
        </alias>
    
        <alias>
            <family>monospace</family>
            <prefer>
                <family>Fira Code</family>
                <family>JetBrains Mono</family>
                <family>Noto Sans Mono CJK SC</family>
                <family>Noto Color Emoji</family>
            </prefer>
        </alias>
    
        <match target="font">
            <edit name="antialias" mode="assign">
                <bool>true</bool>
            </edit>
            <edit name="hinting" mode="assign">
                <bool>true</bool>
            </edit>
            <edit name="hintstyle" mode="assign">
                <const>hintslight</const>
            </edit>
            <edit name="rgba" mode="assign">
                <const>rgb</const>
            </edit>
        </match>
    
    </fontconfig>

终端配置

由于 Oh My Zsh 太过“大”,目前并未使用到其中过多的插件,就没有选择使用了。完全照着这个文档配置了:ShorinArchExperience Guide

使用体验

  • NVIDIA 独显:有一些问题,混合模式下桌面锁死 60 Hz 刷新率。
  • 浏览器google-chrome 使用极其糟糕,无法调用独显,无法硬解视频。转到 firefox 后问题迎刃而解,发现 Firefox 除了插件生态稍弱一点,其他方面都很好用。
  • 窗口管理:自动平铺(Tiling)体验很好,比 Windows 自带的分屏功能强大。多个工作区也避免了桌面混乱。
  • 效率:配合快捷键,工作效率提高了很多。

桌面截图

遇到的问题与解决方案

问题 1:grub-install 报错 failed to make directory /boot/grub/locale

  • 原因分析
    EFI 分区过小(仅 100 MB),而我错误地将整个 /boot 目录(包含内核文件)都放在了 EFI 分区中,导致空间被占满,GRUB 无法写入自己的文件。
  • 解决方案

    1. (失败的尝试)尝试删除 Linux 内核文件,但没有成功。
    2. 意识到 EFI 分区可能被 Windows 文件占满,于是删除了 Windows 的字体文件,腾出了约 4 MB 空间。
    3. 正确做法:将 Linux 的 /boot 目录从 EFI 分区移回根分区下,然后仅将 EFI 分区挂载到 /boot/efi(或 /boot)。这样,只有 EFI 引导文件(如 GRUB 的 efi 文件)会存放在 EFI 分区,而内核等大文件则存放在根分区下的 /boot 目录里,解决了空间不足的问题。

问题 2:重启后直接进入 Windows,没有 GRUB 菜单

  • 原因分析
    主板固件 (UEFI) 的 NVRAM 启动顺序中,Windows Boot Manager 的优先级高于新安装的 ARCH
  • 解决方案
    进入 BIOS/UEFI 设置界面,在 Boot Priorities 菜单中,将 ARCH 的启动顺序手动提升至第一位,保存并退出。

问题 3:GRUB 界面有 Windows,但没有 Arch Linux 选项

  • 原因分析
    由于之前对 /boot 目录的错误操作,导致根分区下缺少了 Linux 内核文件 (vmlinuz-linux)。因此在 chroot 环境里运行 grub-mkconfig 时,它找不到可引导的 Linux 系统,无法为其创建菜单项。
  • 解决方案

    1. 使用 Arch 安装 U 盘启动,挂载好分区后 arch-chroot 进入已安装的系统。
    2. 重新安装 Linux 内核,以在正确的位置生成内核文件。

      pacman -S linux
    3. 最后重新生成 GRUB 配置文件。

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

      这次成功找到了内核并生成了完整的启动菜单。

参考

  1. Arch Linux Wiki (中文)
  2. Archlinux-Gnome-FullGuide-ShorinArchExperience
  3. archlinux 简明指南

ARCH LINUX

Last Modified: September 10, 2025