我有两个硬盘,一个安装了 Windows,另一个是空硬盘,但里面有 efi 分区。没写到的基本都是照抄教程的和一些安装后的配置,就懒得写了。
Linux 启动流程
- 主板固件(UEFI)启动,并读取其内部存储(NVRAM)中的启动顺序列表。
- 如果
ARCH
启动项位于第一位,UEFI 会根据该条目记录的物理地址,找到并执行 GRUB 的 EFI 文件。 - GRUB 启动后,读取其配置文件
/boot/grub/grub.cfg
。 - 配置文件告诉 GRUB 内核位于
/boot
目录,随后 GRUB 将内核加载到内存中。 - 内核启动,系统开始运行。
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 环境准备
下载镜像:从官网下载最新的 Arch Linux 镜像。
制作启动盘:
- 推荐:使用 Ventoy 制作,一个 U 盘可以放入多个启动镜像,非常方便。
- 备选:使用 balenaEtcher 将镜像烧录到 U 盘。
- 准备硬盘:在 Windows 的磁盘管理中,删除目标硬盘上的所有分区,仅保留 EFI 系统分区(这个分区将与 Arch Linux 共享)。
2. BIOS 设置
- 设置启动项:重启电脑进入 BIOS,在
Boot
页面将 U 盘(如USB_EFI
)设置为第一启动项。 - 关闭安全启动:务必关闭
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. 硬盘分区
首先,使用
lsblk
确认目标硬盘的名称(例如/dev/nvme0n1
)。lsblk
使用
cfdisk
工具进行分区,请务必选择正确的硬盘!cfdisk /dev/nvme0n1
在
cfdisk
界面中操作:- 删除旧分区:使用方向键
↑
↓
选中目标硬盘上已有的分区(除了 EFI 分区),然后在下方菜单选择Delete
并回车,直到它们合并成一块Free space
。 创建 Swap 分区:
- 选中
Free space
,在菜单中选择New
回车。 - 输入分区大小,建议不小于内存的 60%(例如
8G
)。 - 创建后,默认类型为
Linux filesystem
。在菜单中选择Type
,然后找到并选择Linux swap
。
- 选中
创建根 (/) 分区:
- 选中剩下的
Free space
,选择New
回车。 - 直接回车,使用所有剩余空间。
- 分区类型保持默认的
Linux filesystem
即可。
- 选中剩下的
写入分区表:
- 检查分区表,确认有一个
Linux swap
分区和一个大的Linux filesystem
分区。 - 确认无误后,在菜单中选择
Write
,输入yes
并回车。 - 选择
Quit
退出。
- 检查分区表,确认有一个
- 删除旧分区:使用方向键
5. 格式化并挂载分区
- 再次使用
lsblk
确认各个分区的确切名称(例如 swap 是p4
,根是p5
)。 格式化分区:
格式化 Swap 分区:
mkswap /dev/nvme0n1p4
格式化根分区为 ext 4:
mkfs.ext4 /dev/nvme0n1p5
激活并挂载分区:
激活 Swap:
swapon /dev/nvme0n1p4
挂载根 (/) 分区到
/mnt
:mount /dev/nvme0n1p5 /mnt
挂载 EFI 分区到
/mnt/boot
(假设你的 EFI 分区是/dev/nvme0n1p2
):mkdir /mnt/boot mount /dev/nvme0n1p2 /mnt/boot
- 检查挂载结果:运行
lsblk
,应看到nvme0n1p5
挂载在/mnt
,nvme0n1p2
挂载在/mnt/boot
。
6. 安装 Arch 核心系统
更换镜像源:为了提高下载速度,编辑镜像源列表,将国内镜像源置顶。
nano /etc/pacman.d/mirrorlist
在文件最上方添加中科大的镜像源:
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch
安装基础包:使用
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
设置语言:
编辑
locale.gen
文件:nano /etc/locale.gen
找到并取消以下两行的注释(删除前面的
#
):en_US.UTF-8 UTF-8 zh_CN.UTF-8 UTF-8
生成 locale 信息:
locale-gen
设置默认语言为英文(避免 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 配置文件
启用 Windows 识别:编辑 GRUB 默认配置文件。
nano /etc/default/grub
找到
#GRUB_DISABLE_OS_PROBER=false
这一行,删除前面的#
。生成最终配置:
grub-mkconfig -o /boot/grub/grub.cfg
如果一切顺利,你应该能看到类似
Found Windows Boot Manager on ...
的输出信息。
第五部分:安装后配置
字体配置
安装中文字体(思源黑体):
sudo pacman -S noto-fonts-cjk
更新字体缓存:
fc-cache -fv
创建字体配置文件:
在~/.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 无法写入自己的文件。 解决方案:
- (失败的尝试)尝试删除 Linux 内核文件,但没有成功。
- 意识到 EFI 分区可能被 Windows 文件占满,于是删除了 Windows 的字体文件,腾出了约 4 MB 空间。
- 正确做法:将 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 系统,无法为其创建菜单项。 解决方案:
- 使用 Arch 安装 U 盘启动,挂载好分区后
arch-chroot
进入已安装的系统。 重新安装 Linux 内核,以在正确的位置生成内核文件。
pacman -S linux
最后重新生成 GRUB 配置文件。
grub-mkconfig -o /boot/grub/grub.cfg
这次成功找到了内核并生成了完整的启动菜单。
- 使用 Arch 安装 U 盘启动,挂载好分区后