marsevilspirit's blog

archlinux 的安装

开始之前先听首歌放松一下。

安装arch之前,我们需要明确一件事情,archlinux的安装不是一件折磨的事情,我们应该在安装的过程中,感受arch linux的美妙,体会CLI的乐趣,这样在能在arch的道路上走的越长远,成为一个合格的arch linux用户。

该安装教程会实时更新,本人会每个月至少一次在虚拟机中安装archlinux,使用最新的iso,以确保该安装教程的时效性。

关于 archinstall 的提示(arch wiki原话):

不建议初学者用 archinstall 走捷径,因为手动安装 archlinux 本身就是 archlinux 教学实操的一环,少了这个环节,会让初学者面对一些基础问题时束手无策,为自己和社区带来不必要的麻烦。

等熟练了,就可以用archinstall逃课了。

1.下载安装镜像

推荐在清华大学开源软件镜像站下载,体验很好。
一定要下载最新的安装镜像。

2.刻录安装 U 盘

准备一个 2G 以上的 U 盘,刻录一个安装盘。
这里我只推荐 Ventoy 进行 U 盘刻录,因为它实在是太强大了!!!
Ventoy 的使用这里不再赘述,网上教程很多。

3.为 archlinux 分出硬盘空间

我认为至少需要分128GB以上,个人看法。
分盘就用windows自带的磁盘管理就行,具体操作网上有教程。
DiskGenius也是一个很好的分盘工具,比较推荐用这个。

4. 进入主板 BIOS 进行设置

不同电脑进入方法不同,google一下。

进入之后:

  • 关闭 BIOS 设置中的 Secure Boot
  • 调整启动方式为 UEFI
  • 调整硬盘启动顺序,设置 U 盘为最上面

之后保存退出。

5.有线网络还是无线网络

如果是无线网络,事先把要连接的wifi名字改成英文,tty环境下无法显示中文,导致无法连上网络。

6.准备安装

不出意外的话,重启之后就会进入 U 盘的安装引导中。
选择第一个选项即可。
应该可以顺利进入 archlinux 的安装界面了。

7.验证是否以UEFI的方式启动

要验证系统目前的引导模式,请检查 UEFI 位数:

1
# cat /sys/firmware/efi/fw_platform_size

如果命令结果为 64,则系统是以 UEFI 模式引导且使用 64 位 x64 UEFI。
如果命令结果为 32,则系统是以 UEFI 模式引导且使用 32 位 IA32 UEFI,虽然其受支持,但引导加载程序只能使用 systemd-boot和GRUB。
如果文件不存在,说明不是以UEFI的方式启动,则不能在该教程继续安装。

验证成功后进行下一步。

8.连接网络

8.1 确保系统已经列出并启用了网络接口

1
# ip link

如何没有列出网卡,需要启用网卡。

8.2 有线网络或无线网络

  • 有线网络不用管,会自动连接
  • 无线网络需要通过iwctl连接网络,网上有教程。

8.3 验证网络是否连接

1
# ping www.bilibili.com

有数据包来往说明网络连接成功。

9.更新系统时钟

使用 timedatectl 更新系统时钟。

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

输出中显示NTP service: active就可以了。

10.换源加快下载速度

10.1 禁用 reflector 服务

reflector是archlinux安装镜像自带的换源工具,在特定情况下,它会误删某些有用的源信息,所以我们禁用它。

通过以下命令将该服务禁用:

1
# systemctl stop reflector.service

通过以下命令查看该服务是否被禁用,按下 q 退出结果输出:

1
# systemctl status reflector.service

Active: inactive (dead)就对了。

10.2 更换国内软件仓库镜像源

使用 vim 编辑器修改 /etc/pacman.d/mirrorlist 文件。将 pacman 软件仓库源更换为国内软件仓库镜像源:

1
# vim /etc/pacman.d/mirrorlist

放在最上面的是会使用的软件仓库镜像源,推荐的镜像源如下:

1
2
3
4
5
Server = https://mirrors.bfsu.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
Server = http://mirror.lzu.edu.cn/archlinux/$repo/os/$arch
Server = https://mirrors.ustc.edu.cn/archlinux/$repo/os/$arch

将以上内容放入文件中即可。

11.分区和格式化(使用 Btrfs 文件系统)

警告: 接下来的每一个命令要慎重输入,确保每一条命令是正确的,否则最坏的情况会把windows格式化。

11.1 查看当前磁盘的分区情况

通过 lsblk 命令,区分要安装 archlinux 的磁盘(通过观察磁盘的大小、已存在的分区情况等判断)并显示当前磁盘的分区情况:

1
# lsblk # 显示当前分区情况

以下是我的输出(已经成功安装archlinux):

1
2
3
4
5
6
7
8
9
mars ~/ $ lsblk                        
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
zram0 254:0 0 4G 0 disk [SWAP]
nvme0n1 259:0 0 953.9G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part /boot
├─nvme0n1p2 259:2 0 16M 0 part
├─nvme0n1p3 259:3 0 400G 0 part
├─nvme0n1p4 259:4 0 400G 0 part
└─nvme0n1p5 259:5 0 153.4G 0 part /

我们主要需要三个分区:

  1. EFI分区
  2. / 分区
  3. swap分区

11.2 对磁盘分区

接下来使用 cfdisk 命令对磁盘分区(对于 NVME 协议的硬盘,x 为数字 0、1 或 2 等等,请根据实际情况判断):

1
# cfdisk /dev/nvmexn1 # 对安装 archlinux 的磁盘分区

进入 cfdisk 分区工具之后,通过方向键 ↑ 和 ↓ 可以在要操作磁盘分区或空余空间中移动;通过方向键 ← 和 → 在对当前高亮的磁盘分区或空余空间要执行的操作中移动。

11.2.1 创建 Swap 分区

选中之前在windows分好的 Free space > 再选中操作 [New] > 然后按下回车 Enter 以新建 swap 分区。
按下回车后会提示输入 分区大小(别忘了单位: GB 或 MB),Swap 分区建议为电脑内存大小的 60%,或者和内存大小相等 > 然后按下回车 Enter。
默认新建的类型是 Linux filesystem,我们需要将类型更改为 Linux swap。选中操作 [Type] > 然后按下回车 Enter > 通过方向键 ↑ 和 ↓ 选中 Linux swap > 最后按下回车 Enter。

11.2.2 创建 Btrfs 文件系统的分区

我们再只需要一个分区即可(因为使用 Btrfs 文件系统,所以根目录和用户主目录在一个分区上),所以类似的:选中 Free space > 再选中操作 [New] > 然后按下回车 Enter 以新建分区。
输入 分区大小(默认是剩余的全部空间。请根据实际情况输入)> 然后按下回车 Enter。

11.2.3 将创建好的分区写入

分区类型默认即可,无需更改。接下来选中操作 [Write] 并回车 Enter > 输入 yes 并回车 Enter 确认分区操作。
选中操作 [Quit] 并回车 Enter 以退出 cfdisk 分区工具。

11.3 复查分区情况

分区完成后,使用 fdisk 或 lsblk 命令复查分区情况:

1
# fdisk -l # 复查磁盘情况

1
# lsblk # 复查磁盘情况

输出信息符合预期即可。

11.4 格式化并创建 Btrfs 子卷

11.4.1 格式化 EFI 分区

警告:如果目标是双系统(Win10/Win11 + Arch Linux),并且 Win10/Win11 和 Arch Linux 将要共存在一个硬盘上的话,不要重新格式化原有的 EFI 分区,因为它可能包含启动其他操作系统所需的文件。

警告:如果是双系统不要运行下面命令,跳过进行下一步。

1
# mkfs.fat -F32 /dev/nvmexn1pn # 按分区情况替换nvmexn1pn
11.4.2 格式化 Swap 分区
1
# mkswap /dev/nvmexn1pn # 按分区情况替换nvmexn1pn
11.4.3 格式化 Btrfs 分区
11.4.3.1 格式化
1
# mkfs.btrfs -L myArch /dev/nvmexn1pn # 按分区情况替换nvmexn1pn
11.4.3.2 挂载到 /mnt

为了创建子卷,我们需要先将 Btrfs 分区挂载到 /mnt 下:

1
# mount -t btrfs -o compress=zstd /dev/nvmexn1pn /mnt # 按分区情况替换nvmexn1pn
11.4.3.3 复查挂载情况
1
# df -h # -h 选项会使输出以人类可读的单位显示
11.4.4 创建 Btrfs 子卷

通过以下命令创建两个 Btrfs 子卷,之后将分别挂载到 / 根目录和 /home 用户主目录:

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

通过以下命令复查子卷情况:

1
btrfs subvolume list -p /mnt

子卷创建好后,我们需要将 /mnt 卸载掉,以挂载子卷:

1
umount /mnt

11.5 挂载

警告:注意应该挂载的nvmexn1pn, 下面的命令每个该挂载的nvmexn1pn各不相同。

在挂载时,挂载是有顺序的,需要从根目录开始挂载。使用如下命令挂载子卷:

1
2
3
4
5
6
# mount -t btrfs -o subvol=/@,compress=zstd /dev/nvmexn1pn /mnt # 挂载 / 目录
# mkdir /mnt/home # 创建 /home 目录
# mount -t btrfs -o subvol=/@home,compress=zstd /dev/nvmexn1pn /mnt/home # 挂载 /home 目录
# mkdir -p /mnt/boot # 创建 /boot 目录
# mount /dev/nvmexn1pn /mnt/boot # 挂载 /boot 目录
# swapon /dev/nvmexn1pn # 挂载交换分区

使用 df 命令复查挂载情况:

1
# df -h

使用 free 命令复查 Swap 分区挂载情况:

1
# free -h

输出符合预期即可。

12.安装系统

到这里就可以轻松一些了, 这里会下载一段时间。

通过如下命令使用 pacstrap 脚本安装基础包:

1
2
pacstrap /mnt base base-devel linux linux-firmware btrfs-progs
# 如果使用btrfs文件系统,额外安装一个btrfs-progs包

通过如下命令使用 pacstrap 脚本安装其它必要的功能性软件:

1
pacstrap /mnt networkmanager vim sudo zsh zsh-completions

13.生成 fstab 文件

fstab 用来定义磁盘分区。它是 Linux 系统中重要的文件之一。使用 genfstab 自动根据当前挂载情况生成并写入 fstab 文件:

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

复查一下 /mnt/etc/fstab 确保没有错误:

1
cat /mnt/etc/fstab

输出结果应该与此类似:

1
2
3
4
5
6
7
8
9
10
11
# /dev/nvme0n1p6  /  btrfs  rw,relatime,compress=zstd:3,ssd,space_cache,subvolid=256,subvol=/@,subvol=@ 0 0
UUID=d01a3ca5-0798-462e-9a30-97065e7e36e1 / btrfs rw,relatime,compress=zstd:3,ssd,space_cache,subvolid=256,subvol=/@,subvol=@ 0 0

# /dev/nvme0n1p1 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2
UUID=522C-80C6 /boot vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=ascii,shortname=mixed,utf8,errors=remount-ro 0 2

# /dev/nvme0n1p6 /home btrfs rw,relatime,compress=zstd:3,ssd,space_cache,subvolid=257,subvol=/@home,subvol=@home 0 0
UUID=d01a3ca5-0798-462e-9a30-97065e7e36e1 /home btrfs rw,relatime,compress=zstd:3,ssd,space_cache,subvolid=257,subvol=/@home,subvol=@home 0 0

# /dev/nvme0n1p5 none swap defaults 0 0
UUID=8e40dbed-590f-4cb8-80de-5cef8343a9fc none swap defaults 0 0

14.change root

使用以下命令把系统环境切换到新系统下:

1
# arch-chroot /mnt

此时,原来安装盘下的 /mnt 目录就变成了新系统的 / 目录。同时,可以发现命令行的提示符颜色和样式也发生了改变。

15.设置主机名与时区

首先在 /etc/hostname 设置主机名:

1
# vim /etc/hostname

加入你想为主机取的主机名。

接下来在 /etc/hosts 设置与其匹配的条目:

1
# vim /etc/hosts

加入如下内容:

1
2
3
127.0.0.1   localhost
::1 localhost
127.0.1.1 ROG.localdomain ROG

随后设置时区,在 /etc/localtime 下用 /usr 中合适的时区创建符号链接:

1
# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

16.硬件时间设置

使用如下命令将系统时间同步到硬件时间:

1
# hwclock --systohc

17.设置 Local

Locale 决定了软件使用的语言、书写习惯和字符集。

编辑 /etc/locale.gen,去掉 en_US.UTF-8 UTF-8 以及 zh_CN.UTF-8 UTF-8 行前的注释符号(#):

1
# vim /etc/locale.gen

然后使用如下命令生成 locale:

1
# locale-gen

向 /etc/locale.conf 输入内容:

1
# echo 'LANG=en_US.UTF-8'  > /etc/locale.conf

18.为 root 用户设置密码

1
# passwd root

19.安装微码

通过以下命令安装对应芯片制造商的微码(安装对应的微码):

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

20.安装引导程序

安装相应的包:

1
# pacman -S grub efibootmgr os-prober

安装 GRUB 到 EFI 分区:

1
# grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=ARCH

接下来使用 vim 编辑 /etc/default/grub 文件:

1
# vim /etc/default/grub

进行如下修改:

去掉 GRUB_CMDLINE_LINUX_DEFAULT 一行中最后的 quiet 参数
把 loglevel 的数值从 3 改成 5。这样是为了后续如果出现系统错误,方便排错
加入 nowatchdog 参数,这可以显著提高开关机速度

为了引导 win10,则还需要添加新的一行 GRUB_DISABLE_OS_PROBER=false

最后生成 GRUB 所需的配置文件:

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

21.完成安装

输入以下命令:

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

注意,重启前要先拔掉优盘,否则你重启后还是进安装程序而不是安装好的系统。

重启后使用 root 账户登录系统。

设置开机自启并立即启动 networkmanager 服务,即可连接网络:

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

若为无线连接,则需要在启动 networkmanager 后使用 nmcli 连接网络:

1
2
# nmcli dev wifi list # 显示附近的 Wi-Fi 网络
# nmcli dev wifi connect "Wi-Fi名(SSID)" password "网络密码" # 连接指定的无线网络

到此,基本安装完毕。

Oct 2024