从安装arch能学到什么?

以前写过一篇虚拟机安装arch的文章,本意是记录自己的安装操作,方便下次查询,然而回头看看,自己只是在照着别人的方法重复而已,这篇文章将会将安装过程中的每一步做出介绍,梳理下自己的理解,若有错误,望斧正

注意: 这篇文章不是教人如何安装archlinux的,而是帮助安装者简单理解每一步操作的作用


0. 在浏览文章过程中,请对照 arch的安装Wiki

1. 启动盘

arch启动盘的制作在相关的Wiki推荐很详细了

  • ISO镜像:ISO镜像是一种光盘的存档文件,它逐个复制一张光盘上的数据扇区,然后存储在一个二进制文件中。它几乎是一个光盘上所有数据的直接复制,并不做任何修改.
    若是熟悉linux,我们在进行mount命令挂载ISO镜像文件的时候,会为其添加-t ISO9660的参数(可选的),这个ISO9660其实是光盘的文件系统.这也就证明了刚才提到的ISO镜像光盘的关系

  • 启动盘:在archwiki中被叫做USB flash installation media(USB闪存安装媒介),我们通过刻盘工具,借助ISO镜像,将我们的U盘刻录成一个LiveUSE系统,我们可以用其来安装Arch,ArchWiki中指出一点,该启动盘是一个安装介质,并不可以当做一个完整的系统

2. 安装准备

  • 我们在哪?
    当我们打开电脑,从U盘启动,我们首先启动的是Arch的安装程序,此时我们还在启动盘中,此时的任务是做好安装前的各种准备:

键盘布局

默认的键盘布局为美式,虽然我们无需做修改,但可以了解如何修改
支持的键盘布局在/usr/share/keymaps/文件夹中

键盘布局后缀名为.map.gz,当我们去掉后缀名,就得到了键盘布局的名称,使用下面命令即可修改键盘布局:
# loadkeys 键盘布局名称

  • /usr路径: /usr路径也是我们比较常用的一个路径,这里的usr最早是user的缩写,但是目前我们认为它是User System Resources的缩写,因为其早期是作为unix系统中用户家目录存在的,相当于现在的/home目录,但如今这个路径的作用已经变更,其中通常是用户级的软件等,多是一些静态的,可多用户共享的文件

验证启动模式

我们使用/sys/firmware/efi/efivars文件是否存在的方式来判断系统是否以UEFI模式启动,不同的启动模式,在后面的分区以及grub安装过程中会有不同,仔细阅读Wiki,找出自己的解决方案

  • 我们常见的启动模式为UEFILegacy,他们都是BIOS(Basic Input Output System,是个人电脑启动时加载的第一个软件),只是新和旧的两种不同的BIOS而已,当新的BIOS架构UEFI出现时,旧的BIOS便被称为Legacy
    两个模式不止启动方式不同,对应的磁盘格式也不同:UEFI对应GPT格式,而Legacy对应MBR格式.混淆格式,系统将不能正常启动,我们在安装系统时,有时就需要使用分区工具转化磁盘格式为启动方式对应的格式

连接到因特网

wiki中提到: 在启动的时候,守护进程dhcpcd就已经启用,为我们连接有线网络,我们可以使用ping工具来检测互联网是否成功连接

  • 守护进程(daemon): 在一个多任务的计算机操作系统中,守护进程是一种在后台执行的计算机程序。此类程序会被以进程的形式初始化。守护进程程序的名称通常以字母“d”结尾,在我们系统启动时,很多守护进程便一起启动,为我们做好开机前的配置
  • PING: ping是一个计算机网络工具,用来检测能否通过ip协议发送数据到特定主机,我们可以使用它来检测我们是否连接上网络,该工具使用ICMP数据包来测试连接.ping发送ICMP ECHO_REQUEST数据包,当成功连接到指定ip时会接收到ICMP ECHO_REPLY确认.不成功时可能收到ICMP错误消息,或者收不到任何回复
  • dhcpcd: 全称为dhcp client daemon,用来配置dhcp(动态主机设置协议)服务,我们常见的dhcp的作用是内部网或网络服务供应商自动分配IP地址给用户,这就省略了我们手动去配置网络信息(ip,子网掩码,网关等)的步骤,而该进程会在系统启动时帮我们启动dhcp服务,我们在使用过程中,也可手动的调用dhcpcd命令来连接有线网络

更新系统时间

我们使用timedatectl set-ntp true命令来更新时间

  • timedatectl: 是一个用来控制系统时间及日期的工具,set-ntp选项后跟一个布尔值,来表示是否启用ntp(Network Time Protocol,网络时间协议)来同步网络时间,使用 status选项可以查看当前的时间设置

3. 磁盘分区

我们使用fdisk工具来进行磁盘的管理,我们的磁盘以块设备文件的形式被系统展示为/dev/设备名,如/dev/sda,/dev/nvme0n1,如果我们需要创建逻辑卷,就需要在这个阶段完成

  • 磁盘分区 : 磁盘分区的好处有很多,如:
    a. 我们在使用一块磁盘时,不一定只使用一种文件系统,不同分区可以格式化为不同的文件系统
    b. 分区有利于管理设备,系统一般单独放一个区,这样由于系统区只放系统,其他区不会受到系统盘出现磁盘碎片的性能影响
    c. 如果一个分区出现逻辑损坏,仅损坏的分区而不是整个硬盘受影响

  • 交换分区(swap) :swap分区是类似于虚拟内存的一个手段,用来解决设备内存不够用的情况,他将磁盘的一部分空间用做存储空间,当系统的内存不够时,将内存中一部分暂时不用的进程数据存档到磁盘中,将内存腾出给正在运行的进程使用
    在以前的系统分区方案中,交换空间是必须的两个分区之一(另一个是根分区,但假如我们如果使用uefi的启动方式,我们还需要一个efi分区),而现在我们可以根据自己的系统内存够不够用来决定是否添加交换分区

  • /dev目录: 该目录是linux的设备目录,包含了Linux系统中使用的所有外部设备,常见的有
    /dev/hd* : IDE设备
    /dev/sd* : SCSI设备
    /dev/null : 空设备,它丢弃一切写入其中的数据(但报告写入操作成功),我们通常会把不需要的数据写入其中以丢弃
    /dev/tty* : 虚拟终端

分区格式化

我们在建立分区时,需要考虑每个不同分区的作用,还要考虑每个分区的文件系统,这个阶段便是使用格式化工具来将每个分区格式化成需要的文件系统

  • 文件系统 : 文件系统是存储设备上的数据的组织方式,它定义了数据在该设备上的保存、读取和更新方法。不同的文件系统可以根据存储设备的不同进行优化,提高效率。

挂载分区

挂载分区是将刚才规划好的磁盘挂载到当前系统(启动盘中的安装程序)的/mnt目录中,借助当前系统中的各种工具来对磁盘做进一步的管理

  • 挂载 : 在linux上,要使用一个文件,必须对包含它的文件系统进行挂载的操作,在计算机启动时,系统已经自动的挂载了我们设定好的文件系统,但当我们接入新的文件设备,如插入一个U盘时,我们就得手动进行挂载操作(很多图形化界面都带有自动挂载的功能,不需要手动挂载)
  • /mnt : mount的简写,专门用来作为挂载点

4. 安装系统

选择镜像(源服务器)

由于arch的安装是在线的,我们需要选择从何处(镜像源服务器)获取我们需要的软件包

  • 镜像源服务器 : 我们在安装系统或安装软件时,需要从网络上获取大量的软件包,镜像源服务器就是为我们提供这些软件包下载的网站
    我们可以借助工具来选择当前我们网络对应的相对较为快速和及更新及时的软件源,在使用系统的过程中,我们同样可以编辑配置文件(/etc/pacman.d/mirrorlist)来修改当前使用的镜像源

安装基础包

使用脚本安装一些系统需要的基础软件包


未安装前
安装之后

5. 配置系统

Fstab

使用genfstab命令来自动将已挂载的分区生成为永久的挂载配置文件

  • UUID/卷标: UUID通用唯一识别码,当我们创建好一个磁盘分区时,它会得到一个唯一的UUID来作为标识,我们可以用其来指代该分区,相对于我们常用的卷标来说,UUID虽然很难去记忆,但其优点是固定,设备的卷标可能会改变,但UUID存储在文件系统超级块中,始终是不变的

  • /etc/fstab : 我们在之前的操作使用mount命令来挂载分区,两者的不同在于mount是暂时的,系统重启后就需要重新挂载,而写入配置文件中,系统启动时会自动读取该配置文件,并进行相应的挂载,我们通常将系统常用或必须的一些分区写入到该文件中

Chroot

我们使用arch-chroot命令来切换到我们安装系统的根目录/mnt中去

  • chroot(change root) : 我们使用该工具来创建一个虚拟的环境,它有着这样几个特点:
    -- 1. 当前运行进程的外显的根目录会变为我们指定的目录
    -- 2. 在这个环境中运行的程序,将不能对该根目录之外的文件进行任何操作
    这使得我们可以在系统还不能启动的情况下来进行对系统的配置,这对修复系统是非常重要的,同时也不用担心会受到我们启动盘中环境的影响

我们可以注意到在之前的安装过程中,我们编辑镜像源时,操作的是启动盘中的镜像文件/etc/pacman.d/mirrorlist,使用的各种命令也是启动盘中的命令,而在chroot之后,因为不能访问在/mnt之外的所有文件,所以也不能使用安装在启动盘中的命令,需要自己重新安装,这里简单验证一下:
目前我的启动盘和系统中都未安装neofetch,我们知道,执行安装时普通用户命令默认会安装在系统根目录中的usr/bin/目录下,先分别验证一下neofetch目录是否存在


在启动盘中安装neofetch(未chroot前执行pacman -S neofetch安装),再进行查询

我们在chroot后再执行同样的语句安装neofetch,并退出chroot,执行刚才的find语句

我们可以看到,neofetch这时才成功的被安装到了新系统中,也就是说,我们在chroot之后,将我们指定的目录作为了系统的根目录,因此我们安装neofetch时也会安装在我们指定系统根目录(/mnt)中的usr/bin/目录下
借助这个特性,我们便可以在不启动新系统的情况下,进行新系统的配置

设置时区

使用ln命令将系统中已经存在的时区配置文件软链接到/etc/localtime

  • linux链接 : linux中的链接,分为软链接(symbolic)和硬链接(hard),两者都可以当做一个和源文件同步的文件,只是在表现形式上,软链接像是一个链接文件,它的详细信息中会展示其指向的源文件,而且软链接的大小和源文件大小无任何关系,硬链接更像是源文件的一份拷贝,只是两者会同步改动

本地化

本地化是每个人根据自己的个人喜好选择自己适用的键盘布局,编码方式

配置网络

此处的配置网络指的是,设置本机的主机名(/etc/hostname)与设置本机的常用域名解析文件(/etc/hosts)

  • /etc/hosts : 该文件定义了一些主机名和ip的对应关系,在最初DNS技术还未出现时,该文件就相当于一个本地的DNS服务
    现在,我们在访问指定域名时,系统先会访问本机的hosts文件,如果未找到相应的匹配,再去访问DNS服务,我们通常用它来补充网络中的DNS,一个简单的例子:

    可以看到,在添加了我自己随便写的一条域名解析后,执行ping操作已经指向了我所指定的域名,哪怕我定义在hosts文件中的是一条错误的解析规则

Initramfs

linux启动中需要的一个文件系统,个人具体也不是很了解,感兴趣的可以看这 : Initramfs/Guide

设置root密码

简单的设置密码过程

安装引导程序

  • 引导程序 : 在系统启动时,最先启动的是BIOS,它寻找到我们的可启动设备之后,就将控制权交给引导程序,引导程序帮我们查找并打开设备中的操作系统,grub是我们linux中最常用的引导程序
    在最开始的时候,引导程序位于我们硬盘的主引导记录分区(MBR),随着后面引导程序的越来越复杂,MBP中已经存储不下,如今的系统将MBR中的引导程序作为第一段引导程序,该引导会去找到并启动第二段引导程序,也就是我们常见的grub等引导程序

结束,重启

至此,基本系统(无图形化环境)的安装已经结束,重启进入新系统后就可以开始使用了

你可能感兴趣的:(从安装arch能学到什么?)