基础安装详解
🔭 知其然,知其所以然
Section titled “🔭 知其然,知其所以然”这一节对上一节 archlinux 基础安装 中关键的几步做出了更进一步的解释,知其然知其所以然。此节没有特定顺序,可根据需要选择性阅读
需要说明的是,本指南假定你有一定的 Linux 基础知识,基础知识相关的话题不会被讨论
💾 分区和格式化
Section titled “💾 分区和格式化”
- 因本指南介绍使用的文件系统是
Btrfs
,很多萌新可能有些不理解。这里有必要说明一下- 若执意要用传统的
ext4
文件系统,本指南也给出了示例- 对于全盘格式化后全新安装的(单 archlinux 系统)同学,这里也给出了需要做的额外步骤的说明
- 对于 Swap 分区还是 Swap 文件 的话题,也会在此讨论
💾 为什么要用 Btrfs 文件系统
Section titled “💾 为什么要用 Btrfs 文件系统”纵观 Btrfs 的历史,可以说 Btrfs 未来的发展是道阻且长的。也让我们感受到开源社区也并不是一根绳上的蚂蚱 —— 开源社区之间也有着各种各样的分歧。
但不管怎么说,Btrfs 的未来现在来看是光明的;我们也可以在 archlinux 上享受到 Btrfs 文件系统的特性带来的好处:
- 快照 —— archlinux 作为滚动发行版,若滚挂了可以使用 Btrfs 的快照特性快速回滚
- 若使用传统的
ext4
文件系统,我们可以使用timeshift
的RSYNC
模式进行增量备份。但是,一般来说 RSYNC 方式的快照大小略大于当前实际使用大小,也就是说实际上开启了timeshift
的RSYNC
模式快照相当于磁盘可用空间直接少了一半多。因为虽然 RSYNC 方式的快照是增量的,但历史最久远的快照依然是完整备份,随后才是增量的
- 若使用传统的
- 透明压缩 —— 可以大大减少磁盘的使用空间(压缩率大概在 10% 左右)
💾 传统 ext4 文件系统说明
Section titled “💾 传统 ext4 文件系统说明”若执意使用传统的 ext4
文件系统,那么分区的建议为:
-
若 archlinux 安装分区小于
256GB
:/
根目录:全部空间
(用户主目录不单独分区)/boot
EFI 分区:256MB
- Swap 分区:
>= 电脑实际运行内存的 60%
-
若 archlinux 安装分区大于
256GB
:/
根目录:128GB
/home
用户主目录:剩余的全部空间
/boot
EFI 分区:256MB
- Swap 分区:
>= 电脑实际运行内存的 60%
分区同样使用 cfdisk
工具,具体操作类似上一节 7-1. 分区 所述,这里不再赘述。
- 使用以下命令格式化
ext4
分区:
mkfs.ext4 /dev/sdax
mkfs.ext4 /dev/nvmexn1pn
- 使用以下命令挂载
ext4
分区:
mount /dev/sdxn /mntmkdir /mnt/home # 若 /home 目录单独分区mount /dev/sdxn /mnt/home # 若 /home 目录单独分区mkdir -p /mnt/bootmount /dev/sdxn /mnt/boot
mount /dev/nvmexn1pn /mntmkdir /mnt/home # 若 /home 目录单独分区mount /dev/nvmexn1pn /mnt/home # 若 /home 目录单独分区mkdir -p /mnt/bootmount /dev/nvmexn1pn /mnt/boot
🆕 全新安装
Section titled “🆕 全新安装”若为全新安装(单 archlinux 系统),首先要对磁盘建立新的 GPT 分区表;同时,由于没有现存的 EFI 分区,所以我们还需要手动创建它(这一步在 7. 分区和格式化(使用 Btrfs 文件系统) 步骤之前):
1. 建立新的 GPT 分区表
Section titled “1. 建立新的 GPT 分区表”- 同样的,先通过
lsblk
命令,区分要全新安装 archlinux 的磁盘(通过观察磁盘的大小等判断):
lsblk # 显示当前分区情况
- 通过以下命令将磁盘转换为
gpt
类型:
parted /dev/sdx # 执行 parted,进行磁盘类型变更(parted) mktable # 输入 mktableNew disk label type? gpt # 输入 gpt,将磁盘类型转换为 GPT 类型。如磁盘有数据会警告,输入 Yes 即可(parted) quit # 退出 parted 命令行交互
parted /dev/nvmexn1 # 执行 parted,进行磁盘类型变更(parted) mktable # 输入 mktableNew disk label type? gpt # 输入 gpt,将磁盘类型转换为 GPT 类型。如磁盘有数据会警告,输入 Yes 即可(parted) quit # 退出 parted 命令行交互
2. 建立 EFI 分区
Section titled “2. 建立 EFI 分区”进入 cfdisk
分区工具之后,类似上一节步骤 7-1. 分区 的分区说明,建立 EFI 分区:
-
选中
Free space
> 再选中操作[New]
> 然后按下回车Enter
以新建EFI
分区 -
输入
分区大小
(建议 >=256MB
、<=1024MB
;推荐512MB
),然后按下回车Enter
-
选中操作
[Type]
,然后按下回车Enter
,通过方向键↑
和↓
选中EFI System
,最后按下回车Enter
-
接下来可以按照上一节 7-1. 分区 的步骤创建其它分区
3. 格式化 EFI 分区
Section titled “3. 格式化 EFI 分区”mkfs.vfat /dev/sdxn
mkfs.vfat /dev/nvmexn1pn
💾 Swap 分区和 Swap 文件
Section titled “💾 Swap 分区和 Swap 文件”如果希望使用 Swap 文件替换 Swap 分区,那么在分区和挂载中不必创建和开启 Swap 分区。
通过以下步骤创建和挂载 Swap 文件(这一步在 18. 完成安装 步骤之后):
- 通过以下命令创建 Swap File:
sudo dd if=/dev/zero of=/swapfile bs=1M count=16384 status=progress # 创建 16G 的交换空间(大小 >= 电脑实际运行内存的 60%)sudo chmod 600 /swapfile # 设置正确的权限sudo mkswap /swapfile # 格式化 Swap 文件sudo swapon /swapfile # 挂载 Swap 文件
- 通过以下命令挂载 Swap 文件:
swapon /swapfile
- 使用
free
命令复查 Swap 文件挂载情况:
free -h # -h 选项会使输出以人类可读的单位显示
- 最后,向
/etc/fstab
中追加如下内容:
/swapfile none swap defaults 0 0
💽 安装环境和新系统的关系
Section titled “💽 安装环境和新系统的关系”理解安装环境和新系统的关系,对于理解 archlinux 安装时所做的步骤具有重大意义。可以说,理解了它们的关系基本上就理解了 archlinux 的安装
为了生动形象的理解安装环境和新系统的关系,我们可以将安装系统的过程想象成搬家 🏠。
1. 🏠 建房子
Section titled “1. 🏠 建房子”我们可以将安装环境比喻成一个临时的家。为了住进新家,我们需要先把新家的房子建起来。这个过程就是 7. 分区和格式化。在磁盘上建立新的分区并格式化,就好比在空余的土地上建立起新的房子。
2. 🛣️ 建立通道
Section titled “2. 🛣️ 建立通道”新房建好了,我们首先还要建立一条联通旧家和新家之间的通道 —— 不然我们怎么走到新家去呢!更不要提将家具什么的安置到新家去了。这个步骤就是 8. 挂载。通过将新的分区挂载到 /mnt
下,我们才能对新的分区进行操作。
3. 🛋️ 添置家具
Section titled “3. 🛋️ 添置家具”光有一个空荡荡的房子是没有用的。为了变成一个能够生活的温馨小窝,我们还需要添置家具。这个步骤就是 9. 安装系统。在执行 pacstrap
脚本的过程中,其实就是将系统运行需要的一些基础的东西安装到新的系统中 —— 类似把家具放到新的家里。
4. 🚚 搬进新家
Section titled “4. 🚚 搬进新家”最后,新家建好了,装修啊、家具啊也弄好了,我们可以搬进新家了!这一步骤就是 11. change root。arch-chroot
脚本是软件包 arch-install-scripts
的一部分,但本质上只是在 chroot
命令的基础上添加了一些功能,简化了“搬家”的流程。其类似(注意,只是类似,arch-chroot
还会做一些其它的工作,安装时请使用 arch-chroot
)以下命令:
mount -t proc none /mnt/procmount -t sysfs none /mnt/sysmount -o bind /dev /mnt/devchroot /mnt bash
chroot
顾名思义,就是 change root 的意思。chroot
命令把根目录换成指定的目录。通常,切换根目录一般的目的是为了系统维护,例如重装引导程序或者重置遗忘的密码;而在安装时则是为了安装(大雾 🌫️。在安装过程中,新的根目录就是 /mnt
。这个过程就好比从原来的家搬到了新的家一样,是不是这样理解起来就简单一点了呢?
🥙 杂七杂八
Section titled “🥙 杂七杂八”其它琐碎的问题不在一一展开叙述,这里通过列表统一说明:
- EFI 分区(又称 esp 分区)不一定要挂载在
/boot
目录下;也可以是/efi
或者其他非常见路径(当然一般推荐挂载在/boot
下,方便引导程序读取同样在这个目录下的内核、微码等启动系统的必要文件) - 若为联想小新 Pro14 / YOGA 14s 2021 机型,发现安装前后键盘都无法正常工作。此时安装时请使用外接键盘。为了解决该问题,在 17. 安装引导程序 步骤中编辑
/etc/default/grub
文件时添加额外的 GRUB 参数 —— 在GRUB_CMDLINE_LINUX_DEFAULT
这一行中添加参数i8042.dumbkbd
修改后复查:
head /etc/default/grub
输出如下:
# GRUB boot loader configuration
GRUB_DEFAULT_SUBMENU=yGRUB_DEFAULT=savedGRUB_SAVEDEFAULT=trueGRUB_TIMEOUT=2GRUB_DISTRIBUTOR="Arch"GRUB_CMDLINE_LINUX_DEFAULT="loglevel=5 nowatchdog i8042.dumbkbd"GRUB_CMDLINE_LINUX=""
- 若为机械革命机型,则建议通过 CPIO archive 修复
本部分来源于:机械革命 蛟龙 15K Linux 内置键盘失灵解决 (ACPI)_linux 笔记本键盘失灵
工具:acpica和cpio
sudo pacman -S acpica cpio
获得原来的 DSDT
cat /sys/firmware/acpi/tables/DSDT > dsdt.dat # 获取dsdtiasl -d dsdt.dat # 反编译DSDT成AML文件(.dsl)
修改 dsdt.dsl : 找到 Device(PS2K) ,向下找第一个 ActiveLow 改成 ActiveHigh ,样例如下:
Device (PS2K){ Name (_HID, "MSFT0001") // _HID: Hardware ID Name (_CID, EisaId ("PNP0303") /* IBM Enhanced Keyboard (101/102-key, PS/2 Mouse) */) // _CID: Compatible ID Method (_STA, 0, NotSerialized) // _STA: Status { Return (0x0F) }
Name (_CRS, ResourceTemplate () // _CRS: Current Resource Settings { IO (Decode16, 0x0060, // Range Minimum 0x0060, // Range Maximum 0x00, // Alignment 0x01, // Length ) IO (Decode16, 0x0064, // Range Minimum 0x0064, // Range Maximum 0x00, // Alignment 0x01, // Length ) IRQ (Edge, ActiveLow, Shared, ) // <<=== 目标 {1} })//... 省略无关内容}
最后,给DefinitionBlock 升一个版本 (最后一个十六进制数加一): DefinitionBlock ("", "DSDT", 2, "ALASKA", "A M I ", 0x01072009)
改为 DefinitionBlock ("", "DSDT", 2, "ALASKA", "A M I ", 0x0107200A)
编译新的 AML 文件
iasl dsdt.dsl
加入 initrd
mkdir -p kernel/firmware/acpicp dsdt.aml kernel/firmware/acpifind kernel | cpio -H newc --create > acpi_overridesudo cp acpi_override /bootecho "GRUB_EARLY_INITRD_LINUX_CUSTOM=\"acpi_override\"" >> /etc/default/grubsudo grub-mkconfig -o /boot/grub/grub.cfg