ArchLinux安装小结

1. 说在前面

参考ArchWiki的Installation guide,花了1天多的时间安装好了Arch Linux。对装系统也有了全新的认识。安装系统就是把可执行文件和配置文件存到外部存储设备,和配置引导方式使得固件可以正确调用引导程序启动操作系统。

因此,操作系统能否正常运行的核心就两点:

  1. 是否把可执行文件和配置文件正确的放到硬盘上
  2. 是否正确的引导

现在的计算机都是遵守存储程序原理,操作系统的运行也就是从硬盘中拿存储的程序,按照既定的程序和配置文件运行。因此,如果想影响一个操作系统,改变硬盘中的文件内容即可。

另外辨析几个概念:

BISO和UEFI都是固件的规范(接口),MBR和GPT都是分区表和分区方案。但是UEFI和GPT更新一些,用来继承前者。

2. 把系统存到外部存储设备

为了能通过Live Environment来安装相应的内容到硬盘,首先要对硬盘进行分区、格式化、挂载,写入系统软件。

2.1. Partition the disks

分区部分主要参考ArchWiki的Partitioning。关于分区表的选取,分区方案的选取和分区软件的使用,wiki里已经很详细了。下面写些自己认为重要的点。

首先,什么是分区?

Partitioning a block device (e.g. a hard disk) divides the available storage space into sections that can be managed independently.

按我的理解,每一个分区都是一个独立的文件系统(File System 缩 fs),且对应于分区表中的一条记录。这也是为什么当其中一个分区损坏不会对其他分区造成影响。因为他们属于不同的文件系统。文件系统的具体内容在格式化部分讲。

其次,分区表是什么,选哪种?

分区表是用来存储分区方案的,即你对你的硬盘是怎么分区的,分成了几个区,每个区多大,是什么格式等等。主要的分区表有两种,一种是MBR(Master Boot Record),另一种是GPT(GUID Partition Table)。这两种分区表都是出自Intel之手,且GPT是用来继承MBR的。因此只要电脑条件允许,建议选择GPT类型。另外多啰嗦一句,GPT方案是Unified Extensible Firmware Interface 规范的一部分。

然后,分区方案选哪种?

有个概念要分清,分区(比如/dev/sda1)和目录(比如/home)不是一回事,分区是对硬盘的逻辑划分,分区与目录建立联系的地方在挂载部分。本次安装系统时划分了3个分区,其中一个作为EFI system partition(ESP 大小为512M),另外两个用来挂载根目录和home目录。记得指定分区格式分别为EFI System partition,Root partition (x86-64)和/home partition。在GPT方案中,对每个分区指定分区类型后使得他们在分区表中都有一个唯一的GUID

最后,用哪个分区工具?

本次使用的是fdisk,其他工具也可参考ArchWiki中的Partitioning tools

2.2. Format the partitions

Once the partitions have been created, each must be formatted with an appropriate file system.

在2.1中解释什么是分区的时候说到,每一个分区都是一个独立的文件系统。同时,每个分区只有经过格式化(指定该分区的文件系统类型,即make file system mkfs)之后才真正成为一个可以存数据的文件系统。

简单说一下什么是文件系统:不同的文件系统的区别大概就像不同管理方式的仓库。虽然存的都是数据,但是组织文件的形式和结构是不一样的。因此,对于一块硬盘,如果无法知道文件系统的类型,是无法解读其中的数据的。

另外,ESP文件系统一般需要FAT32格式,其他根目录和home目录一般需要EXT4格式。

1
2
3
# mkfs = make file system
$ mkfs.vfat -F32 /dev/sda1
$ mkfs.ext4 /dev/sda2

2.3. Mount the file systems

挂载比较简单,也是参考2.2中的那篇文章。本次安装采用的是符合UEFI规范的固件(firmware),打算ESP挂载到了/mnt/boot上。挂载部分的具体操作查看ArchWiki的Mount a file system

2.4. 写入系统文件

可以CD系统中通过

1
$ pacstrap /mnt base linux linux-firmware

向/mnt写入所需的系统文件,建议是base,linux和linux-firmware都要安装。

当然你也可以通过arch-chroot /mnt到/mnt目录下使用pacman -S分别安装刚刚提到的3个包。

3. 部署系统

部署系统的目的为:设置正确的引导方式,使系统能正常启动和做一些必要的基础配置,比如网络。

额外插一步,通过genfstab(generate file system table)将分区表写入到硬盘当中,以便于程序启动的时候systemd会从fstab中读取分区信息自动挂载。

One can use genfstab to generate fstab entries for mounted partitions given a filesystem root.

3.1. Boot process

这里只说从启动固件到发射内核部分,更详细的内容看Arch boot process

机器通电后,固件就会启动,这里的固件是UEFI类型的。做完一系列的自检后就会通过NVRAM中存的boot entries(或许是.efi文件地址?)来找到ESP分区下的.efi文件,启动bootloader(本文为GRUB)。如果启动项(boot entry)是一块硬盘,那么固件会直接到fallback boot path esp\EFI\BOOT\BOOTX64.EFI中去找。如果只有1个启动项,建议就放在esp\EFI\BOOT\BOOTX64.EFI路径下。如果找不到就启动UEFI shell等待用户指定再启动。

lanch firmware(UEFI) —> lanch bootloader(GRUB) —> lanuch kernal & initial RAM disk

3.2. 安装GRUB

具体过程补赘述,可以看GRUB

要补充的就以下几点:

  1. GRUB安装时会往NVRAM中写记录(entry)。
  2. /boot/grub目录是GRUB自己的主要目录,一些配置文件什么的都在这里面。生成的esp/EFI路径下的各个的.efi文件是为了给UEFI启动GRUB用的。
  3. 别忘了配置文件&_&

3.3. Initramfs

这部分不懂,比着葫芦画瓢。

3.4. Network configuration

只需安装1个Network managers即可,本次选择的是带GUI的NetworkManage,安装完成后记得用systemctl设置开机自启。详细的步骤可以看这里

4. 说在后面

本次安装在VirtualBox中,VirtualBox自身有些问题,我猜测是无法将boot entry写入NVRAM中,还没来得及验证。需要做些设置,具体看这里,此外也可以设置fallback boot path,上文已经提到了。另外一个参考资料:How To: VirtualBox EFI Arch Linux