ArchLinux的安装
两种安装方式,按需选择。
也可以选择CachyOS(开箱即用的Arch)
1.下载系统镜像
- 可以前往官网下载
https://archlinux.org/download/
- 也可以去国内镜像站下载。例如:阿里镜像站
https://mirrors.aliyun.com/archlinux/iso/
然后创建ventoy,将镜像放进ventoy
创建空硬盘,或者在已有的硬盘扩展一个启动分区
2. 手动安装
2.1 连接网络
有线网自动连接,wifi要用命令行工具连接。
ip a #查看网络连接信息
ping bilibili.com #确认网络正常
Ctrl+C可以中止正在运行的命令。
使用iwctl命令行工具连接wifi(此工具由iwd提供)
-
启动
iwctl此时会进入iwctl,提示符会产生变化。
-
连接
station wlan0 connect 【此处是你的wifi名字(不能是中文) -
退出iwctl
exit -
其他命令
device list #列出设备 station wlan0 scan #扫描网络 station wlan0 get-networks #列出所有扫描的的wifi station wlan0 show #查看连接状态 station wlan0 disconnect #断开连接
2.2 同步网络时间
运行timedatectl,应该会在输出看到NTP已经开启:
NTP service: active
手动开启使用:
timedatectl set-ntp true
2.3 reflector自动设置镜像源
用reflector配置最快最新的国内镜像源,大幅提高下载速度。
reflector -a 12 -c cn -f 10 --sort score --save /etc/pacman.d/mirrorlist --v
-a(age) 12 指定最近24小时更新过的源
-c(country) cn 指定国家为中国(可以增加邻国)
-f(fastest) 10 筛选出下载速度最快的10个
--sort score 按照下载速度和同步时间综合评分并排序,比单纯按照下载速度排序更可靠
--save /etc/pacman.d/mirrorlist 将结果保存到/etc/pacman.d/mirrorlist
--v(verbose) 过程可视化
2.4 更新密钥
pacman -Sy archlinux-keyring
pacman是包管理器,管理软件的安装、卸载之类的
-S代表安装
-Sy代表同步数据库然后安装
2.5 硬盘分区
lsblk -pf #查看当前分区情况
fdisk -l /dev/想要查询详细情况的硬盘 #小写字母l,查看详细分区信息
cfdisk /dev/nvme0n1 #选择自己要使用的硬盘进行分区
如果是新硬盘的话会弹出选项,选GPT。
2.5.1 创建分区
- efi分区
创建512MB的分区,类型(type)选择efi system。
如果你的类型里没有efi system说明你的硬盘不是gpt分区表,可以使用fdisk 设备名后,(⚠️会删除所有已经存在的分区⚠️)输入g回车创建gpt,输入w回车保存更改。
PS:也可以直接使用windows的efi,如果使用win的efi分区的话跳过下面格式化efi分区的步骤(windows更新会搞坏linux的引导,建议给linux单独创建efi分区)。
- 根分区
其余空间全部分到一个分区里,类型linux filesystem。
2.5.2 格式化分区
通过格式化创建需要的文件系统
再次查看分区情况
lsblk -pf #查看分区情况
fdisk -l /dev/想要查询详细情况的硬盘 #小写字母l,查看详细分区信息
格式化efi分区
mkfs.fat -F 32 /dev/nvme0n1p1(EFI分区名)
格式化btrfs根分区
mkfs.btrfs /dev/nvme0n1p2(根分区名)
#加上-f参数可以强制格式化
2.5.3 创建btrfs子卷
子卷是btrfs的一个特性,跟快照有关。通常至少要创建root子卷(存放系统文件)和home子卷(存放用户文件),根据命名规范取名为@和@home。由于这两者是平级关系,所以创建@快照时不会包含@home。这样就可以只恢复系统文件,不影响用户数据。
-
挂载
mount -t btrfs /dev/nvme0n1p2(根分区名) /mnt
mount 挂载命令;-t 指定文件系统
这条命令把/dev/nvme0n1p2分区挂载到了/mnt目录,而/dev/nvme0n1p2是我们将要安装的系统的根分区,这意味着/mnt成为了我们将要安装的系统的根目录。
创建子卷
btrfs subvolume create /mnt/@
btrfs subvolume create /mnt/@home
btrfs subvolume create /mnt/@swap #不需要休眠到硬盘功能的话跳过这个
可选:确认
btrfs subvolume list -p /mnt
取消挂载
umount /mnt
2.6 正式挂载
挂载root子卷
mount -t btrfs -o subvol=/@,compress=zstd /dev/nvme0n1p2 /mnt
-o 指定额外的挂载参数
compress=zstd 指定透明压缩,zstd是压缩算法
和刚刚的挂载是一样的操作,不过这次是把/dev/nvme0n1p2上的@子卷挂载到了/mnt,而不是把/dev/nvme0n1p2挂载到/mnt。
compress是btrfs的另一个特性,透明压缩。可以通过算法在数据写入磁盘前先对数据进行压缩,用以节省磁盘空间,延长磁盘寿命,代价是一点点cpu占用,但极小,对现代硬件来说几乎可以忽略不计。zstd是最平衡的压缩算法,可以像这样zstd:3指定压缩等级,最高15,通常3就可以了。
挂载home子卷
mount --mkdir -t btrfs -o subvol=/@home,compress=zstd /dev/nvme0n1p2 /mnt/home
由于/mnt下没有/mnt/home这个目录,所以要加上--mkdir命令创建/mnt/home用来挂载。把@home子卷挂载到了/mnt/home。
可选:挂载swap子卷(不需要休眠功能的话跳过这一步)
mount --mkdir -t btrfs -o subvol=/@swap,compress=zstd /dev/nvme0n1p2 /mnt/swap
挂载efi分区(esp)
mount --mkdir /dev/nvme0n1p1 /mnt/efi
记得把/dev/nvme0n1p1替换为自己对应的efi分区设备名。
复查挂载情况
df -h
2.7 安装系统
pacstrap -K /mnt base base-devel linux linux-firmware btrfs-progs
-K 复制密钥
base-devel是编译其他软件的时候用的
linux是内核,可以更换
linux-firmware是固件
btrfs-progs是btrfs文件系统的管理工具
pacstrap命令是把软件安装到指定的根目录下。
注意:如果你使用的是marvell的无线网卡,这里要额外安装linux-firmware-marvell,否则进系统找不到网卡。
2.8 安装必要的功能性软件
pacstrap /mnt networkmanager vim sudo amd-ucode
networkmanager 是联网用的,和kde和gnome深度集成,有特殊需求的话可以换成别的
vim 是文本编辑器,也可以换成别的,比如nano、neovim。
sudo 和权限管理有关
amd-ucode 是微码,用来修复和优化cpu,intel用户安装intel-ucode
2.8.1 vim文本编辑器基础操作
vim是以键盘操作为核心理念的文本编辑器,很陌生,但是绝对值得一学。
i 键进入编辑模式;
esc 回到普通模式;
/左斜杠进入搜索模式,回车跳转到搜索到的第一个,nn键跳转到搜索到的下一个,Shift+n跳转到搜索到的上一个;
:w 冒号小写w写入;
:q 冒号小写q退出;
:wq 冒号小写wq保存并退出;
! 命令后加上感叹号代表强制执行。
知道这些就可以开始使用了。不习惯的话可以安装nano。nano的基础操作只需要记住Ctrl+F搜索、Ctrl+S保存和Ctrl+X退出即可。你也可以选择安装neovim,vim的加强版,更现代更好用。如果安装neovim的话后面所有vim命令都改成nvim
⚠️没有联网软件的话一会安装完系统连不了网⚠️
2.9 可选:swap交换空间
参考链接:
swap用来存放内存中的冷数据,提高电脑的运行速度。还能把硬盘当作虚拟内存使用。设置了硬盘swap还可以使用休眠功能。休眠指的是把系统当前状态写入硬盘,然后电脑完全断电,下一次开机恢复到休眠前的状态。硬盘swap有swap分区或者swap文件两种方式,前者配置更简单,后者配置稍复杂,但是更加灵活。这里采用交换文件的方式。
内存swap比硬盘swap更合适现代设备,如果你不需要休眠功能的话跳过这一步,后续会有将内存用作swap的设置(zram)。
swap大小参考:
| 内存(GB) | 不需要休眠(GB) | 需要休眠(GB) | 不建议超过(GB) |
|---|---|---|---|
| 1 | 1 | 2 | 2 |
| 2 | 2 | 3 | 4 |
| 3 | 3 | 5 | 6 |
| 4 | 4 | 6 | 8 |
| 5 | 2 | 7 | 10 |
| 6 | 2 | 8 | 12 |
| 8 | 3 | 11 | 16 |
| 12 | 3 | 15 | 24 |
| 16 | 4 | 20 | 32 |
| 24 | 5 | 29 | 48 |
| 32 | 6 | 38 | 64 |
| 64 | 8 | 72 | 128 |
| 128 | 11 | 139 | 256 |
| 256 | 16 | 272 | 512 |
2.9.1 创建swap文件
btrfs filesystem mkswapfile --size 64g --uuid clear /mnt/swap/swapfile
2.9.2 启动swap
swapon /mnt/swap/swapfile
2.10 生成fstab文件
系统会根据fstab中的内容自动进行挂载。
genfstab -U /mnt > /mnt/etc/fstab
# genfstab(生成文件系统表)
# -U 用uuid指定分区
# > 大于号代表输出结果覆盖写入到有右边的文件里
# 如果是>>两个大于号则代表追加写入
3. 进入系统
arch-chroot /mnt
此时根目录从live环境变成了/mnt,可以注意到提示符的变化。
3.1 设置时间和时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
hwclock --systohc
ln 是link的缩写,-s代表跨文件系统的软链接,-f代表强制执行,所以这条命令的意思是在/etc/目录下创建/usr/.../Shanghai这个文件的链接,取名为localtime。zoneinfo里面包含了所有可用时区的文件,localtime是系统确认时间的依据。(顺便一提,timedatectl set-timezone "Aisa/Shanghai"是一样的效果,不知道为什么archwiki没有用)
hwclock --systohc 生成调节时间误差的文件。
3.2 本地化设置
3.2.1 编辑配置文件
vim /etc/locale.gen
左斜杠键进行搜索;i键进入编辑模式;取消en_US.UTF-8 UTF-8和zh_CN.UTF-8的注释;esc退出编辑模式;:wq保存并退出。
3.2.2 生成本地化配置
locale-gen
3.2.3 设置系统语言
vim /etc/locale.conf
i键进入编辑模式;写入LANG=en_US.UTF-8设置系统语言为英文;
LANG=en_US.UTF-8
esc退出编辑模式;:wq保存并退出。
/etc/locale.conf这个文件是系统级的语言设置,zh_CN.UTF-8是中文,但是会导致tty的文件变成豆腐块,所以不建议这么做。后续安装完桌面环境后通过桌面环境提供的选项在用户空间修改系统语言即可。例如通过AccountService的偏好储存功能,你上次登录的会话、系统语言等内容都会存在/var/lib/AccountService/users/你的用户名这个文件里面。没有显示管理器的话可以在~/.config/locale.conf写入中文设置,覆盖掉/etc/locale.conf的设置。
3.2.4 设置主机名
vim /etc/hostname
i键进入编辑模式;取一个自己喜欢的主机名;esc退出编辑模式;:wq保存并退出。
PS:此时你应该已经相当熟悉vim编辑器最基本的操作了,所以后面我会省略vim的操作讲解。
3.2.5 设置root密码
passwd
3.3 安装引导程序
这是uefi引导的安装方式,如果你是bios设备请看archwiki的grub页面。
根据esp挂载点和个人需求的不同,bootloader的选择也会不同。这里安装最常用的grub,采用的是esp挂载点为/efi且grub装进esp的方案。
3.3.1安装必要的软件包
pacman -S grub efibootmgr os-prober exfat-utils
efibootmgr 管理uefi启动项;
os-prober和exfat-utils 用来搜索win11(不配置双系统的话可以不装)。
3.3.2 安装grub
grub-install --target=x86_64-efi --efi-directory=/efi --boot-directory=/efi --bootloader-id=ARCH
grub-install安装grub;
--target 指定架构;
--efi-directory 指定efi文件的目录(esp);
--boot-directory 指定grub文件的目录;
--bootloader-id 任意取一个启动项名字;
PS:如果是移动设备或者主板只支持默认的efi路径要加上--removable选项。
3.3.3 编辑grub的源文件
vim /etc/default/grub
这是生成grub的配置文件时需要用到的东西。
-
启动项记忆功能
GRUB_DEFAULT=0改成=saved,再取消GRUB_SAVEDEFAULT=true的注释。 -
显示开机日志
GRUB_CMDLINE_LINUX_DEFAULT里面去掉quiet以显示开机日志。有些发行版还会出现slash之类的字样,代表的是开机动画。再设置loglevel=5把日志等级为5。loglevel共7级,5级是一个信息量的平衡点。 -
禁用watchdog
GRUB_CMDLINE_LINUX_DEFAULT里添加nowatchdog以及modprobe.blacklist=sp5100_tco。intelcpu用户把sp5100_tco换成iTCO_wdtwatchdog的目的简单来说是在系统死机的时候自动重启系统。对个人用户来说没有意义,禁用以节省系统资源、提高开机和关机速度。
-
允许使用os-prober搜索其他系统
取消最后一行
GRUB_DISABLE_OS_PROBER=false的注释。
3.3.4 生成grub的配置文件
grub-mkconfig -o /efi/grub/grub.cfg
3.3.5 在grub的默认安装位置创建链接
ln -sf /efi/grub /boot/grub
大多数程序会默认检测/boot/grub作为grub的安装位置,所以创建一个链接方便使用。
3.4 zram
zram将内存的一部分空间用作交换空间,如果你没有配置swap,请一定配置zram。如果配置了swap的话可以不配置zram。
3.4.1 安装zram-generator
sudo pacman -S zram-generator
3.4.2 编辑配置文件
sudo vim /etc/systemd/zram-generator.conf
[zram0]
zram-size = ram
compression-algorithm = zstd
zram-size设置最多存储多少数据,注意这里设置的是压缩之前的大小。
compression-algorithm这一行设置使用zstd算法。
3.4.3 禁用zswap
zswap是swap的缓存。需要交换的数据在存入交换空间之前会先被zswap压缩后暂时放进内存里。和zram功能重复且引入了复杂性,故禁用。
sudo vim /etc/default/grub
在GRUB_CMDLINE_LINUX_DEFAULT=""里写入zswap.enabled=0
GRUB_CMDLINE_LINUX_DEFAULT="... zswap.enabled=0 ... "
3.4.5 重新生成grub的配置文件
sudo grub-mkconfig -o /efi/grub/grub.cfg
3.4.6 退出chroot
exit
此时就回到了live环境,可以注意到提示符的变化
3.5 重启电脑
reboot
此时会自动取消所有的挂载。
3.6 拔掉系统u盘
如果u盘没拔掉的话记得拔掉
3.7 选择BIOS启动项
通常默认就是刚刚安装的arch,如果不是的话选择一下启动项。
如果没有出现archlinux的启动项,看这个页面:https://wiki.archlinux.org/title/GRUB
3.8 登录root账户
用户名为root,密码刚刚设置过了。
3.9 连接网络
开启networkmanager服务,注意大小写
systemctl enable --now NetworkManager
systemctl调用systemd进行操作
enbale代表开机自启 --now代表现在启动
连接wifi
nmtui
nmtui是networkmanager提供的TUI(终端用户交互程序)
- 选择activate a connection
- 选择自己的wifi进行连接
- esc退出
- Ctrl+L或者
clear清屏
验证是否有网
ip a
ping bilibili.com