参考: https://github.com/shorinkiwata/archlinux-gnome-btrfs-full-installation-guide
Arch Linux 双系统安装指南 (Btrfs 文件系统 & UEFI 模式)
本指南旨在为希望在现有 Windows 系统上安装 Arch Linux 的用户,提供一个清晰、详尽的命令行安装流程。本教程将采用 Btrfs 作为主文件系统,以利用其快照等现代化功能,并基于 UEFI 启动模式。
准备工作:制作启动盘与 BIOS 设置
1. 禁用 Windows 快速启动
重要步骤:为了防止 Windows 锁定磁盘导致 Linux 无法挂载或数据损坏,必须先禁用“快速启动”。
- 进入 Windows,打开控制面板 -> 硬件和声音 -> 电源选项。
- 点击“选择电源按钮的功能”。
- 点击“更改当前不可用的设置”(需要管理员权限)。
- 取消勾选“启用快速启动 (推荐)”。
- 点击“保存修改”。
2. 制作启动盘 (推荐 Ventoy)
推荐使用 Ventoy 制作启动盘,它的优势在于无需反复格式化 U 盘,只需将 ISO 镜像文件复制到 U 盘即可。
- 下载 Ventoy: 访问 Ventoy 官网 下载对应系统的安装包(Windows 下载 .zip,Linux 下载 .tar.gz)。
- 安装 Ventoy 到 U 盘:
- 插入 U 盘(注意:U 盘会被格式化,请备份数据)。
- 解压并运行
Ventoy2Disk.exe。 - 选择你的 U 盘设备,点击“安装”。
- 放入镜像:
- 安装完成后,U 盘会变成一个名为
Ventoy的磁盘。 - 将下载好的 Arch Linux ISO 镜像文件直接复制到这个磁盘中。
- 安装完成后,U 盘会变成一个名为
3. BIOS/UEFI 设置
进入 BIOS 是安装 Linux 的第一道门槛。不同品牌的电脑进入 BIOS 的热键不同。
常见品牌 BIOS 启动热键:
| 品牌 | 启动菜单 (Boot Menu) | 进入 BIOS 设置 |
|---|---|---|
| 联想 (Lenovo) | F12 或 Fn+F12 (部分需捅 Nova 孔) | F2 或 Fn+F2 |
| 戴尔 (Dell) | F12 | F2 |
| 惠普 (HP) | F9 | F10 |
| 华硕 (ASUS) | Esc 或 F8 | F2 或 Del |
| 宏碁 (Acer) | F12 | F2 |
| 微星 (MSI) | F11 | Del |
| 技嘉 (Gigabyte) | F12 | Del |
| ThinkPad | F12 | F1 |
| 微软 Surface | 按住音量+键再按电源键 | - |
BIOS 设置关键点:
- Secure Boot (安全启动): 必须设置为 Disabled (关闭)。Arch Linux 的安装介质默认不支持安全启动。
- SATA Mode: 建议设置为 AHCI (如果是 RAID/RST 模式,Linux 可能无法识别硬盘)。注意:修改此项可能导致现有的 Windows 蓝屏,需先在 Windows 中配置进入安全模式后再改。
- Boot Order (启动顺序): 将 USB 设备调整到第一位,或直接使用启动菜单选择 U 盘启动。
一、 准备阶段:Live 环境配置
成功从 U 盘启动后,你将看到 Arch Linux 的安装菜单,选择第一项进入 Live 环境。
1. 调整终端字体 (可选)
如果默认的终端字体过小,可以使用以下命令放大字体,以获得更好的视觉体验。
setfont ter-132b
2. 连接到无线网络
Arch Linux 的安装过程需要全程联网。
# 启动 iwctl 交互式网络配置工具
iwctl
# 列出所有网络设备,通常无线网卡名为 wlan0
device list
# 扫描周边的 Wi-Fi 网络
station wlan0 scan
# 列出扫描到的 Wi-Fi 网络
station wlan0 get-networks
# 连接到你的 Wi-Fi (将 “你的wifi名字” 替换为实际名称)
# 系统会提示你输入密码
station wlan0 connect "你的wifi名字"
# 连接成功后,输入 exit 退出 iwctl
3. 验证网络连接
使用 ping 命令测试网络是否通畅。
ping baidu.com
# 看到有数据返回后,按 Ctrl + C 停止
4. 远程 SSH 连接 (可选,强烈推荐)
为了方便地复制粘贴命令,你可以在 Live 环境中启动 SSH 服务,然后通过局域网内的另一台电脑连接进来进行操作。
# 1. 为 root 用户创建临时密码
passwd
# 2. 启动 SSH 服务
/usr/bin/sshd
# 或者使用
systemctl start sshd
# 3. 获取 Live 环境的 IP 地址
ip a
# 4. 在局域网内另一台设备上通过 SSH 连接 (将 ip 替换为上一步获取到的地址)
ssh root@ip
5. 验证 UEFI 启动模式
确认系统是否以 UEFI 模式启动。如果此命令返回 64,则表示为 UEFI 启动。如果文件不存在,则可能是传统的 Legacy BIOS 启动。
cat /sys/firmware/efi/fw_platform_size
6. 配置 Pacman 镜像源
官方的 reflector 服务自动配置镜像可能耗时且不稳定。我们推荐手动配置,优先使用速度更快的国内镜像源。
# 停止 reflector 自动配置服务
systemctl stop reflector.service
# 【推荐】自动获取中国区的镜像并覆盖现有列表
# 这条命令会自动拉取最新的中国区 HTTPS 镜像列表,并取消服务器行的注释
curl -L 'https://archlinux.org/mirrorlist/?country=CN&protocol=https' | sed 's/^#Server/Server/' > /etc/pacman.d/mirrorlist
# 或者,你也可以手动编辑镜像文件,将中国的镜像服务器地址 (Server = ...) 移动到文件顶部
# nano /etc/pacman.d/mirrorlist
# 验证镜像是否已成功替换
cat /etc/pacman.d/mirrorlist
二、 磁盘分区 (高危操作)
⚠️ 警告:磁盘分区是高风险操作,请务必在操作前备份所有重要数据,并仔细确认目标磁盘和分区!本操作将删除目标分区上的所有数据。
1. 识别目标磁盘
使用 lsblk 命令查看当前系统的磁盘和分区情况,准确识别出你为 Arch Linux 预留的空闲分区。
lsblk
示例输出分析:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
loop0 7:0 0 942.7M 1 loop /run/archiso/airootfs
sda 8:0 0 117.2G 0 disk ----------------> Ventoy 启动 U 盘
├─sda1 8:1 0 117.2G 0 part
│ ├─ventoy 253:0 0 1.3G 1 dm
│ └─sda1 253:1 0 117.2G 0 dm
└─sda2 8:2 0 32M 0 part
nvme0n1 259:0 0 953.9G 0 disk -----------------> 本例中要安装系统的固态硬盘
├─nvme0n1p1 259:1 0 300M 0 part -----------------> Windows EFI 分区
├─nvme0n1p2 259:2 0 16M 0 part
├─nvme0n1p3 259:3 0 200G 0 part -----------------> Windows C盘
├─nvme0n1p4 259:4 0 393.7G 0 part -----------------> Windows D盘
└─nvme0n1p5 259:5 0 359.9G 0 part -----------------> 为 Arch Linux 预留的分区 (原E盘)
⚠️ 请根据你自己的实际情况调整,你的磁盘代号可能不是 nvme0n1。
2. 使用 cfdisk 进行分区
我们将使用 cfdisk 这个相对友好的分区工具,删除预留分区,并重新创建 Linux 所需的新分区。
# 启动 cfdisk,目标是我们的主硬盘
cfdisk /dev/nvme0n1
进入 cfdisk 界面后,通过键盘方向键进行操作:
-
删除旧分区: 选中你预留的那个分区 (本例中为
/dev/nvme0n1p5),选择[Delete]并回车。此时该空间会变为Free space。 -
创建新分区: 我们将在这块
Free space上创建三个新分区。-
EFI 分区:
- 选中
Free space,选择[New]。 - 输入分区大小
1G,回车。 - 选择
[Type],找到并设置为EFI System。
- 选中
-
Swap 分区:
- 再次选中剩余的
Free space,选择[New]。 - 输入分区大小
8G(可根据你的内存大小调整),回车。 - 选择
[Type],找到并设置为Linux swap。
- 再次选中剩余的
-
根 (/) 分区:
- 最后一次选中剩余的
Free space,选择[New]。 - 直接回车,使用所有剩余空间。
[Type]保持默认为Linux filesystem即可。
- 最后一次选中剩余的
-
-
写入更改: 确认分区表无误后,选择
[Write],输入yes并回车。如果操作有误,选择[Quit]退出重来。
分区完成后的最终布局示例:
Device Start End Sectors Size Type
/dev/nvme0n1p1 40 614439 614400 300M EFI System
/dev/nvme0n1p2 614440 647207 32768 16M Microsoft reserved
/dev/nvme0n1p3 649216 420081663 419432448 200G Microsoft basic data
/dev/nvme0n1p4 420081664 1245677567 825595904 393.7G Microsoft basic data
/dev/nvme0n1p5 1245677568 1247774719 2097152 1G EFI System
/dev/nvme0n1p6 1247774720 1264551935 16777216 8G Linux swap
>> /dev/nvme0n1p7 1264551936 2000408575 735856640 350.9G Linux filesystem
三、 格式化与挂载 (Btrfs 子卷)
1. 格式化新分区
分区完成后,需要对它们进行格式化,写入相应的文件系统。
# 将 EFI 分区 (p5) 格式化为 FAT32
mkfs.fat -F 32 /dev/nvme0n1p5
# 初始化 Swap 分区 (p6)
mkswap /dev/nvme0n1p6
# 将根分区 (p7) 格式化为 Btrfs
mkfs.btrfs -f /dev/nvme0n1p7
2. 创建并挂载 Btrfs 子卷
使用子卷可以更灵活地管理系统快照。 下面举例创建了多个子卷, 最简实际只可以只创建两个子卷即可 @ 和 @home
# 1. 挂载顶层 Btrfs 分区
mount /dev/nvme0n1p7 /mnt
# 2. 在顶层创建子卷
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@root
btrfs subvolume create /mnt/@log
btrfs subvolume create /mnt/@pkg
btrfs subvolume create /mnt/@tmp
btrfs subvolume create /mnt/@cache
btrfs subvolume create /mnt/@srv
# 查看子卷创建信息
btrfs subvolume list /mnt
# 3. 卸载顶层分区
umount -R /mnt
# 4. 以正确的挂载选项重新挂载所有子卷
# noatime, discard=async, compress=zstd 是针对 SSD 和 Btrfs 的常用优化选项
mount -o subvol=@,noatime,discard=async,compress=zstd /dev/nvme0n1p7 /mnt
# 5. 创建挂载点目录
mkdir -p /mnt/{home,root,srv,boot,var/tmp,var/log}
mkdir -p /mnt/var/cache/pacman/pkg
# 6. 逐个挂载其他子卷
mount -o subvol=@home,noatime,discard=async,compress=zstd /dev/nvme0n1p7 /mnt/home
mount -o subvol=@root,noatime,discard=async,compress=zstd /dev/nvme0n1p7 /mnt/root
mount -o subvol=@log,noatime,discard=async,compress=zstd /dev/nvme0n1p7 /mnt/var/log
mount -o subvol=@pkg,noatime,discard=async,compress=zstd /dev/nvme0n1p7 /mnt/var/cache/pacman/pkg
mount -o subvol=@cache,noatime,discard=async,compress=zstd /dev/nvme0n1p7 /mnt/var/cache
mount -o subvol=@srv,noatime,discard=async,compress=zstd /dev/nvme0n1p7 /mnt/srv
mount -o subvol=@tmp,noatime,discard=async,compress=zstd /dev/nvme0n1p7 /mnt/var/tmp
# 7. (可选) 对日志、包缓存等目录禁用写时复制(CoW)以提升性能
chattr +C /mnt/var/log
chattr +C /mnt/var/cache/pacman/pkg
# 8. 挂载 EFI 分区并启用 Swap
mount /dev/nvme0n1p5 /mnt/boot --mkdir
swapon /dev/nvme0n1p6
完成后,再次使用 lsblk 检查所有分区和挂载点是否正确。
四、 安装核心系统
1. 安装基础包
使用 pacstrap 脚本将系统基础包、内核、固件和一些常用工具安装到 /mnt。
# 同步包数据库
pacman -Syy
# 执行安装 (请根据你的 CPU 厂商选择 amd-ucode 或 intel-ucode)
pacstrap -K /mnt base base-devel linux linux-headers linux-firmware neovim vim btrfs-progs amd-ucode
linux-lts 和 linux-lts-headers 一一对应
可以选择合适的内核
linux linux-headers
linux-zen linux-zen-headers
2. 生成 fstab 文件
fstab 文件定义了系统启动时如何挂载分区。
genfstab -U /mnt > /mnt/etc/fstab
建议: cat /mnt/etc/fstab 检查一下生成的文件,确保所有分区和挂载选项都正确无误。
五、 配置新系统 (Chroot 环境)
1. Chroot 到新系统
arch-chroot 命令可以将我们的操作环境从 Live USB 切换到刚刚安装好的新系统中。
arch-chroot /mnt
2. 配置 Btrfs 启动模块
此步至关重要! 为了让系统启动时能识别 Btrfs 文件系统,我们需要将 btrfs 模块添加到 initramfs (初始 RAM 文件系统) 中。
# 编辑 mkinitcpio 配置文件
TERM=xterm-256color # 可能会有使用vim 小问题
# nano /etc/mkinitcpio.conf
# 找到 MODULES=() 这一行,在括号中添加 btrfs
# 修改后应为: MODULES=(btrfs)
# 保存文件后,重新生成 initramfs
mkinitcpio -P
3. 时区与语言
# 设置时区为上海
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 将硬件时钟与系统时钟同步
hwclock --systohc
# 配置语言环境
# 使用 sed 命令自动取消 en\_US.UTF-8 和 zh\_CN.UTF-8 的注释
sed -i.bak -E '/^#\s*(en_US.UTF-8|zh_CN.UTF-8)/s/^#\s*//' /etc/locale.gen
# 生成 locale
locale-gen
# 1. 创建 locale 配置文件,将英语设置为默认语言以避免 TTY 乱码
echo 'LANG=en_US.UTF-8' > /etc/locale.conf
# 2.(可选) 或者向我一样处理
echo 'LANG=zh_CN.UTF-8' > /etc/locale.conf
vim /etc/profile.d/tty-lang.sh
# 写入以下内容
cat > /etc/profile.d/tty-lang.sh << EOF
> #!/bin/sh
# 仅在 TTY 中强制使用英文环境
if [ "$TERM" = "linux" ]; then
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
fi
> EOF
4. 主机名与 Root 密码
# 设置你的主机名
echo 'archlinux-pc' > /etc/hostname
# 设置 Root 用户密码
passwd
5. 安装和配置引导加载程序 (GRUB)
# 安装 GRUB, efibootmgr 和 os-prober (用于检测 Windows)
pacman -S grub efibootmgr os-prober sudo
# 安装 GRUB 到 EFI 分区
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=Arch
# 配置 GRUB
# 编辑 /etc/default/grub 文件
# vim /etc/default/grub
#
# 1. 重要: 找到 `#GRUB_DISABLE_OS_PROBER=false` 这一行,去掉前面的 `#` 号,以允许 GRUB 检测并添加 Windows 启动项。
# 2. (可选) 找到 `GRUB_CMDLINE_LINUX_DEFAULT` 行,可以去掉 "quiet" 参数,并在需要时添加 `nowatchdog modprobe.blacklist=sp5100_tco` (AMD) 或 `modprobe.blacklist=iTCO_wdt` (Intel) 来解决某些硬件的死锁问题。
# 生成最终的 GRUB 配置文件
grub-mkconfig -o /boot/grub/grub.cfg
6. 创建普通用户
不建议长期使用 root 用户。我们来创建一个日常使用的管理员账户。
# 创建一个名为 snemc 的用户,并将其加入 wheel 管理员组 (-G wheel)
# 将 snemc 替换为你自己的用户名
useradd -m -G wheel -s /bin/bash snemc
# 为新用户设置密码
passwd snemc
# 授权 wheel 组用户使用 sudo
visudo
# visudo 会打开 /etc/sudoers 文件,找到下面这一行:
# # %wheel ALL=(ALL:ALL) ALL
# 去掉行首的 # 号,保存退出即可。
7. 安装并启用必要服务
# 安装网络管理器和 fish (一个用户友好的 shell)
pacman -S networkmanager fish
# 设置开机自启网络管理器服务
systemctl enable NetworkManager.service
# 如果在虚拟机安装,建议安装并启用ssh服务
pacman -S openssh
systemctl enable sshd
8. 启用常用home目录
# 切换 常规用户
su snemc
# 安装 xdg-user-dirs 包
sudo pacman -S xdg-user-dirs
# 创建 常用目录
LC_ALL=C.UTF-8 xdg-user-dirs-update --force
六、 重启与首次登录
1. 退出并重启
所有配置已完成,现在可以退出 chroot 环境,卸载所有分区,并重启电脑。
# 退出 chroot
exit
# 卸载所有分区
umount -R /mnt
# 重启系统,并及时拔掉 U 盘
reboot
2. 进入新系统
重启后,进入 BIOS/UEFI 启动菜单,选择 Arch 作为启动项。你应该能看到 GRUB 菜单,其中包含了 Arch Linux 和 Windows 的选项。使用你创建的普通用户名和密码登录。
3. 在 TTY 环境中连接网络
登录新系统后,你将进入 TTY 终端环境。使用 nmcli 工具连接网络:
# 查看网络设备状态
nmcli dev status
# 开启 Wi-Fi
nmcli radio wifi on
# 扫描并连接到你的 Wi-Fi (将 <network-ssid> 替换为你的 Wi-Fi 名称)
sudo nmcli --ask dev wifi connect <network-ssid>
4. 添加 Arch Linux CN 源
Arch Linux CN 社区源提供了许多官方仓库没有的常用软件,如中文输入法、WPS Office 等。
# 编辑 pacman.conf 文件
sudo vim /etc/pacman.conf
# 在文件末尾添加以下两行:
[archlinuxcn]
Server = https://mirrors.bfsu.edu.cn/archlinuxcn/$arch
# 保存文件后,同步数据库并安装 archlinuxcn-keyring 以导入 GPG 密钥
sudo pacman -Syyu
sudo pacman -S archlinuxcn-keyring
# 安装 paru (一个好用的 AUR 助手)
sudo pacman -S paru
恭喜! 至此,你已经完成了一个纯净、配置好 Btrfs 的 Arch Linux 系统的安装。接下来,你可以根据自己的需求安装桌面环境、显卡驱动以及各类应用软件了。
评论区