主目录:返回主目录
上一节:安装 Arch Linux 前的准备工作
我这里使用的文件系统是 Btrfs,ESP 挂载到 /efi,方便滚挂时快速回档。
当然也可以使用 Ext4,参考 Arch Linux 的官方文档即可:
从U盘启动进入 Arch Linux Live 环境后,如果觉得字体太小可以使用以下命令调整
setfont ter-v32n确认固件类型
cat /sys/firmware/efi/fw_platform_size如果输出64,说明主板是64位x64 UEFI固件,可以直接推进下面的步骤。
如果输出32,说明是32位UEFI;如果提示No such file or directory没有文件或目录,说明是BIOS。
这两种情况可以查阅
虚拟机建议调整为UEFI。
网络配置
连接网络
有线网自动连接,还可以用数据线分享手机的网络。
确认网络连接使用:
ip a #查看网络连接信息,如果出现了紫色的ip地址说明成功连接ping -c 3 www.bilibili.com #确认网络正常-
使用iwctl命令行工具连接wifi(此工具由
iwd提供)-
启动
iwctl此时会进入iwctl,提示符会产生变化。
-
连接
device list #列出设备station wlan0 scan #扫描网络station wlan0 get-networks #列出所有扫描的的wifistation wlan0 connect [wifi名(不能有中文,有空格的话把wifi名用引号包起来)] -
退出iwctl
exit
-
确认开启了NTP(网络时间协议)
运行timedatectl,应该会在输出看到NTP已经开启,否则在安装时可能会出现验证方面的报错:
NTP service: active手动开启使用:
timedatectl set-ntp truereflector自动设置镜像源
用reflector配置镜像源加速。
reflector -p https -a 12 -c cn --v --sort rate --save /etc/pacman.d/mirrorlist同步软件列表数据
pacman -Sy硬盘分区
lsblk -pf #查看当前分区情况fdisk -l /dev/想要查询详细情况的硬盘cfdisk /dev/nvme0n1 #选择自己要使用的硬盘进行分区-
如果是新硬盘的话会弹出选项,选GPT。
-
efi分区
上下方向键选中空闲空间,左右方向键选择NEW创建512MB的分区,类型(type)选择efi system。
PS:如果你的类型里没有efi system说明你的硬盘不是gpt分区表,可以使用
cfdisk -z 设备名以空分区表打开硬盘,选择gpt分区表即可。⚠️警告⚠️ 这个操作会清空硬盘上的分区。 -
根分区
其余空间全部分到一个分区里,类型linux filesystem不需要更改。
-
保存
选择
write,输入yes保存。quit退出。
格式化分区
-
再次查看分区情况
Terminal window lsblk -pf #查看分区情况fdisk -l /dev/想要查询详细情况的硬盘 -
格式化efi分区
Terminal window mkfs.fat -F 32 /dev/nvme0n1p1(EFI分区名) -
格式化btrfs根分区
Terminal window mkfs.btrfs /dev/nvme0n1p2(根分区名)#加上-f参数可以强制格式化
创建btrfs子卷
子卷是btrfs的一个特性,跟快照有关。通常至少要创建root子卷(存放系统文件)和home子卷(存放用户文件),根据命名规范取名为@和@home。
同理,你可可以创建其他子卷自由管理。
顺便一提,btrfs有写入放大的问题,建议关闭需要频繁修改的文件所在目录的 CoW 属性。
# 为目录禁用 CoW (注意:目录本身必须为空)mkdir /var/lib/mysqlchattr +C /var/lib/mysql-
挂载
Terminal window mount -t btrfs /dev/nvme0n1p2(根分区名) /mnt -
创建子卷
Terminal window btrfs subvolume create /mnt/@btrfs subvolume create /mnt/@homebtrfs subvolume create /mnt/@swap #不需要休眠到硬盘功能的话跳过这个,现代设备一般不需要 -
可选:确认
Terminal window btrfs subvolume list /mnt -
取消挂载
Terminal window umount /mnt
以后系统出问题进入live环境解决后,一定记得取消挂载。
正式挂载
-
挂载root子卷
mount -t btrfs -o subvol=/@,compress=zstd /dev/nvme0n1p2 /mntcompress是btrfs的另一个特性,透明压缩。在数据写入磁盘前先进行压缩,提升读写性能,节省空间,延长寿命。可以像这样zstd:3指定压缩等级,最高15。默认为3,在意cpu性能可以设置成1。这个一定要开,对btrfs很重要。
-
挂载home子卷
mount --mkdir -t btrfs -o subvol=/@home,compress=zstd /dev/nvme0n1p2 /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
安装基本系统
pacstrap -K /mnt base base-devel linux linux-firmware btrfs-progs networkmanager vim sudo intel-ucode
# -K 初始化密钥# base-devel是编译其他软件的时候用的# linux是内核,可以更换# linux-firmware是固件# btrfs-progs是btrfs文件系统的管理工具# networkmanager 是联网用的,是各个桌面环境标配的联网工具# vim 是文本编辑器,也可以换成别的,比如nano、neovim# sudo 和权限管理有关# intel-ucode 是微码,用来修复和优化cpu。amd用户安装amd-ucodepacstrap命令是把软件安装到指定的根目录下。
注意:如果你使用的是marvell的无线网卡,这里要额外安装linux-firmware-marvell,否则进系统找不到网卡。
可选: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 |
-
创建swap文件
此处的
64g应该是你实际需求的swap大小btrfs filesystem mkswapfile --size 64g --uuid clear /mnt/swap/swapfile -
启动swap
swapon /mnt/swap/swapfile
生成fstab文件
系统会根据fstab中的内容自动进行挂载。
genfstab -U /mnt > /mnt/etc/fstab
# genfstab(生成文件系统表)# -U 用uuid指定分区# > 大于号代表输出结果覆盖写入到有右边的文件里# 如果是>>两个大于号则代表追加写入系统初始化配置
更换根目录(change root)
进入刚刚安装的系统
arch-chroot /mnt设置时间和时区
timedatectl set-timezone Asia/Shanghaihwclock --systohchwclock --systohc生成调节时间误差的文件。
除了timedatectl命令,还可以手动创建链接。
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime本地化设置
-
编辑配置文件
vim /etc/locale.gen取消
en_US.UTF-8 UTF-8和zh_CN.UTF-8 UTF-8的注释。 -
生成本地化配置
locale-gen -
设置系统语言
vim /etc/locale.conf写入
LANG=en_US.UTF-8保存并退出。
/etc/locale.conf这个文件是系统级的语言设置,zh_CN.UTF-8是中文,但是会导致tty的中文字符全部变成豆腐块,所以不建议这么做。后续安装完桌面环境后在用户空间修改系统语言。
设置主机名
vim /etc/hostname写入主机名即可。
设置root密码
passwd输入过程不显示,直接输入回车即可。
安装引导程序
这是uefi引导的安装方式,如果你是bios设备请看archwiki的grub页面。
-
安装必要的软件包
Terminal window pacman -S grub efibootmgr os-prober exfat-utilsos-prober和exfat-utils用来搜索windows(不配置双系统的话可以不装)。 -
安装grub
grub-install --target=x86_64-efi --efi-directory=/efi --boot-directory=/efi --bootloader-id=ARCH--bootloader-id任意取一个启动项名字;如果引导出问题可以重新进live环境重新挂载,这一步加上
--removable选项。 -
编辑grub的源文件
vim /etc/default/grub-
启动项记忆功能
GRUB_DEFAULT=0改成=saved,再取消GRUB_SAVEDEFAULT=true的注释。 -
显示开机日志
GRUB_CMDLINE_LINUX_DEFAULT里面去掉quiet以显示开机日志。再设置loglevel=5把日志等级为5。loglevel共7级,5级是一个信息量的平衡点。 -
禁用watchdog
GRUB_CMDLINE_LINUX_DEFAULT里添加nowatchdog以及modprobe.blacklist=sp5100_tco。intelcpu用户把sp5100_tco换成iTCO_wdt这个功能对个人用户基本没啥用,服务器也不会装 arch。
-
允许使用os-prober搜索其他系统
取消最后一行
GRUB_DISABLE_OS_PROBER=false的注释。
-
-
在grub的默认安装位置创建链接
ln -sf /efi/grub /boot/grub大多数程序会默认检测
/boot/grub作为grub的安装位置,所以创建一个链接方便使用。 -
生成grub的配置文件
grub-mkconfig -o /boot/grub/grub.cfg
以上的grub配置方法已经足够使用,但存储在FAT文件系统上的grub.cfg无法被btrfs快照回档,极端情况下仍会出现问题,例如在快照启动项里生成了grub.cfg导致永远启动进快照启动项。
如果你想要绝对稳定的回档,可以继续操作:
-
删除链接
如果你的
/boot/grub是指向esp里的grub的链接,请删除后创建真实的目录。sudo rm -rf /boot/grubsudo mkdir -p /boot/grub -
查找根分区的UUID
findmnt / -n -o UUIDfindmnt /列出跟根目录挂载信息-n隐藏标题-o UUID只输出UUID -
编辑存根
sudo vim /efi/grub/grub.cfg此处的
/efi应为你实际的esp位置。写入以下内容:
# 设置root环境变量为实际的根分区设备search --fs-uuid --no-floppy --set=root 你的Btrfs分区UUID# 读取根分区中的grub.cfg文件configfile /@/boot/grub/grub.cfgsearch --fs-uuid <你的Btrfs分区UUID>通过uuid搜索分区。--no-floppy跳过软盘设备。--set=root将搜索到的第一个设备设置为root。root是grub的环境变量之一,默认值是grub所在的设备。我的grub安装在了esp,那root的值就是esp的设备名。我们为了btrfs回档要把grub.cfg存在btrfs文件系统里,所以要手动指定root的值为btrfs文件系统所在的设备。
configfile读取配置文件。/@/boot/grub/grub.cfg是配置文件目录,不指定设备的话默认在root环境变量指定的设备上查找此目录。 -
配置快照启动项grub-btrfs
grub-btrfs.cfg是快照启动项的配置文件。grub寻找此文件时查的目录由prifix变量指定,这个变量代表的是grub的安装位置。我的grub安装在esp,所以prefix的值是/efi/grub,也就是说grub查找快照启动项的配置文件时的完整路径是/efi/grub/grub-btrfs.cfg。但是快照启动项的配置文件默认被生成到
/boot/grub/grub-btrfs.cfg而不是/efi/grub/grub-btrfs.cfg,所以我们要修改grub-btrfs的配置文件指定grub在/boot/grub里寻找快照启动项的配置文件。sudo vim /etc/default/grub-btrfs/config找到下面这段内容:
# GRUB_BTRFS_GBTRFS_SEARCH_DIRNAME="\${prefix}"改成:
GRUB_BTRFS_GBTRFS_SEARCH_DIRNAME="/@/boot/grub"注意,
/@必须是你实际的根子卷。 -
生成
grub.cfgsudo grub-mkconfig -o /boot/grub/grub.cfg
配置zram
zram将内存的一部分空间用作交换空间,如果你没有配置swap,请一定配置zram。
-
安装zram-generator
pacman -S zram-generator -
编辑配置文件
vim /etc/systemd/zram-generator.conf写入
[zram0]zram-size = min(ram / 2, 16384)compression-algorithm = zstdzram-size设置最多存储多少数据,注意这里设置的是压缩之前的大小。 -
禁用zswap
zswap是swap的缓存。需要交换的数据在存入交换空间之前会先被zswap压缩后暂时放进内存里。和zram功能重复且引入了复杂性,故禁用。
vim /etc/default/grub在GRUB_CMDLINE_LINUX_DEFAULT=""里写入
zswap.enabled=0GRUB_CMDLINE_LINUX_DEFAULT="... zswap.enabled=0 ... " -
重新生成grub的配置文件
grub-mkconfig -o /efi/grub/grub.cfg
启用网络服务
开启新系统的NetworkManager服务
systemctl enable NetworkManager-
可选:替换网络后端为
iwdNetworkManager的无线网默认后端是
wpa_supplicant,可以更换为更现代的iwd。注意:部分设备更换iwd后端可能无法正常联网。-
安装
iwdpacman -S iwd impalaimpala是iwd的tui -
编辑配置文件
# 创建配置文件目录,-p代表如果已经存在就跳过mkdir -p /etc/NetworkManager/conf.d# 新建配置文件并用vim进行编辑vim /etc/NetworkManager/conf.d/iwd.conf写入:
[device]wifi.backend=iwd
-
退出chroot
exit重启电脑
reboot此时会自动取消所有的挂载。
拔掉系统u盘
如果u盘没拔掉的话记得拔掉
选择BIOS启动项
如果没有出现archlinux的启动项,看这个页面:https://wiki.archlinux.org/title/GRUB
登录root账户
用户名为root,密码刚刚设置过了。
连接网络
-
验证是否有网
-
连接wifi
nmtuinmtui是networkmanager提供的TUI(终端用户交互程序)。如果你使用的是iwd后端还可以用impala连接wifi。
放松一下吧
pacman -S fastfetch lolcat cmatrix fzf yazi btop less不 fastfetch 装什么 Arch Linux [doge]。
顺便调一下vim的配置
sudo vim /etc/vimrc或者等创建完用户
vim ~/.vimrc
写入set number # 开启行号显示
set relativenumber # 开启相对行号
syntax on # 语法高亮
set mouse=a # 启用鼠标支持
imap jk jk 绑定为 Esc 键,这个主要是为了方便退出插入模式
## 下一节:[安装桌面环境前的准备](../before-desktop/)