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 | # timedatectl set-ntp true # 将系统时间与网络时间进行同步 |
输出中显示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 | Server = https://mirrors.bfsu.edu.cn/archlinux/$repo/os/$arch |
将以上内容放入文件中即可。
11.分区和格式化(使用 Btrfs 文件系统)
警告: 接下来的每一个命令要慎重输入,确保每一条命令是正确的,否则最坏的情况会把windows格式化。
11.1 查看当前磁盘的分区情况
通过 lsblk 命令,区分要安装 archlinux 的磁盘(通过观察磁盘的大小、已存在的分区情况等判断)并显示当前磁盘的分区情况:
1 | # lsblk # 显示当前分区情况 |
以下是我的输出(已经成功安装archlinux):
1 | mars ~/ $ lsblk |
我们主要需要三个分区:
- EFI分区
- / 分区
- 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 | # btrfs subvolume create /mnt/@ # 创建 / 目录子卷 |
通过以下命令复查子卷情况:
1 | btrfs subvolume list -p /mnt |
子卷创建好后,我们需要将 /mnt 卸载掉,以挂载子卷:
1 | umount /mnt |
11.5 挂载
警告:注意应该挂载的nvmexn1pn, 下面的命令每个该挂载的nvmexn1pn各不相同。
在挂载时,挂载是有顺序的,需要从根目录开始挂载。使用如下命令挂载子卷:
1 | # mount -t btrfs -o subvol=/@,compress=zstd /dev/nvmexn1pn /mnt # 挂载 / 目录 |
使用 df 命令复查挂载情况:
1 | # df -h |
使用 free 命令复查 Swap 分区挂载情况:
1 | # free -h |
输出符合预期即可。
12.安装系统
到这里就可以轻松一些了, 这里会下载一段时间。
通过如下命令使用 pacstrap 脚本安装基础包:
1 | pacstrap /mnt base base-devel linux linux-firmware 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 | # /dev/nvme0n1p6 / btrfs rw,relatime,compress=zstd:3,ssd,space_cache,subvolid=256,subvol=/@,subvol=@ 0 0 |
14.change root
使用以下命令把系统环境切换到新系统下:
1 | # arch-chroot /mnt |
此时,原来安装盘下的 /mnt 目录就变成了新系统的 / 目录。同时,可以发现命令行的提示符颜色和样式也发生了改变。
15.设置主机名与时区
首先在 /etc/hostname 设置主机名:
1 | # vim /etc/hostname |
加入你想为主机取的主机名。
接下来在 /etc/hosts 设置与其匹配的条目:
1 | # vim /etc/hosts |
加入如下内容:
1 | 127.0.0.1 localhost |
随后设置时区,在 /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 | # pacman -S intel-ucode # Intel |
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 | # exit # 退回安装环境 |
注意,重启前要先拔掉优盘,否则你重启后还是进安装程序而不是安装好的系统。
重启后使用 root 账户登录系统。
设置开机自启并立即启动 networkmanager 服务,即可连接网络:
1 | # systemctl enable --now NetworkManager # 设置开机自启并立即启动 NetworkManager 服务 |
若为无线连接,则需要在启动 networkmanager 后使用 nmcli 连接网络:
1 | # nmcli dev wifi list # 显示附近的 Wi-Fi 网络 |
到此,基本安装完毕。
Oct 2024