1. 安装程序:anaconda


anaconda是RedHat Enterprise Linux、CentOS、Fedora等系统的安装程序,它支持两种安装方式:图形界面(GUI)方式安装基于curses图形函数库的文本配置方式安装。这里以安装CentOS为例。


之前在"CentOS系统启动流程"博客中提到,CentOS系统的启动流程大致路线为:POST --> BIOS --> bootloader --> Kernel(有可能借助ramdisk加载驱动) --> 加载rootfs --> switchroot(这一步并非必须) --> /sbin/init。


一般使用U盘、光盘或网络引导等方式来安装CentOS系统。这里以光盘为例,如果使用光盘安装CentOS,那么首先需要有一个专门用于安装CentOS操作系统的操作系统,这个操作系统上包括了Linux内核及ramdisk等文件,通过这个操作系统可实现对CentOS系统的安装。而要使用这个用于安装系统的操作系统的启动也同样需要由bootloader引导,这个bootloader同Kernel及ramdisk等文件一样由光盘所提供(如果是其他引导设备也一样)。


因此,当安装CentOS系统时,用于安装系统的操作系统的启动流程是这样的:POST --> BIOS --> bootloader --> Kernel(ramdisk(rootfs)) --> anaconda。


那么光盘上的这些文件(bootloader、Kernel、ramdisk等)究竟存放在光盘上哪里呢?我们不妨在Linux上把光盘挂载了查看:

[root@localhost~]#mount/dev/sr0/media/cdrom/
mount:blockdevice/dev/sr0iswrite-protected,mountingread-only


查看光盘中的内容:

[root@localhost~]#cd/media/cdrom/
[root@localhostcdrom]#ls-1F
CentOS_BuildTag
EFI/
EULA
GPL
images/
isolinux///光盘的启动分区;
Packages///光盘上的程序包;
RELEASE-NOTES-en-US.html
repodata///程序包元数据所在目录;
RPM-GPG-KEY-CentOS-6
RPM-GPG-KEY-CentOS-Debug-6
RPM-GPG-KEY-CentOS-Security-6
RPM-GPG-KEY-CentOS-Testing-6
TRANS.TBL


光盘是把isolinux目录作为启动分区的,基本上bootloader、Kernel及ramdisk等文件也存在其中,我们来查看以下isolinux目录中的内容:

[root@localhostcdrom]#cdisolinux/
[root@localhostisolinux]#ls-1F
boot.cat//存放于MBR上的bootloader,负责去加载isolinux.bin;
boot.msg
grub.conf
initrd.img//ramdisk文件,即临时根文件系统;
isolinux.bin//由boot.cat加载,用于引导加载内核及ramdisk文件;
isolinux.cfg//引导程序isolinux.bin的配置文件,其中定义了各个启动菜单项;
memtest
splash.jpg//使用图形界面方式安装时,菜单项的背景图片;
TRANS.TBL
vesamenu.c32
vmlinuz*//内核文件;

需要注意的是,光盘或U盘的引导设备本来是没有MBR这种第一扇区的概念的,但光盘或U盘等设备可以模拟出MBR,在MBR上存放着boot.cat这个bootloader,boot.cat类似于grub的第一阶段,负责去加载isolinux.bin,而isolinux.bin则类似于grub的第二阶段程序。boot.cat和isolinux.bin就充当这里的bootloader了,它们最终要实现的任务是加载内核文件。我们知道,grub有配置文件(/boot/grub/grub.conf),在配置文件中定义了各个在grub引导过程中要显示的菜单项;对于这里的isolinux.bin也一样,它的配置文件则是isolinux.cfg,在isolinux.cfg中定义了各个启动菜单项(label),在每个label中又定义了menuKernel以及要对Kernel传递的参数(包括initrd等),这里的menu是每个菜单项的标题。


以下为isolinux.bin引导界面(以CentOS 6系统安装镜像为例):

wKioL1jFNyvhurclAAaX2437HqE442.png

是不是很熟悉?我们安装系统时就会看到这个界面。


这里菜单项中的每一项是如何定义的呢?我们使用less看一下isolinux.bin程序的配置文件isolinux.cfg中的内容:

wKiom1jFO2OSw9g9AAB_642y-iI829.png

不难发现,这里的每一项label中的menu后面的标题就是安装系统时显示的菜单项标题。在第一个label中还有一项"menu default",设置该label为默认启动项。此外,每个label中还定义了内核文件以及传递给内核的参数,这里把ramdisk文件作为参数传递给内核。我们后面要提到的kickstart文件也可以通过这种方式传递给内核。


在光盘启动时,光盘中的bootload会把kernel和initrd(即ramdisk)一同装载进内存中。initrd是特制的,它含有操作系统安装过程中所需要用到的各种基本工具,在这里kernel不需要执行根切换(switchroot);借助于initrd提供的rootfs,kernel会去启动anaconda这个安装程序。


anaconda程序是安装过程中用户空间第一个启动的应用程序,类似于正常操作系统启动时的/sbin/init初始化程序;anaconda可由initrd这个rootfs提供,也可以来自其他地方,在这里anaconda起安装系统的作用。


总结一下,安装CentOS系统过程的启动启动流程是这样的:

bootloader(isolinux/boot.cat,isolinux/isolinux.bin) --> isolinux/vmlinuz(isolinux/initrd.img)运行在内存中的操作系统 --> anaconda



2. anaconda的工作过程


前面提到,使用anaconda安装CentOS系统有两种方式,默认使用的是图形界面(GUI)安装,要求主机内存至少有512MB内存。而使用基于文本配置接口(TUI)来安装CentOS则需要显示指定,指定方式可以是在菜单界面按ESC键,并向label指定的内核传递一个'text'参数即可,如图:

wKioL1jFQ26xN-2TAAAC8gPgDO4747.png

这里的'linux'是isolinux/isolinux.cfg配置文件中定义的一个label,通过'linux'这个label可以调用其指定的项及参数,例如menu,kernel(vmlinuz),initrd等,还可以传递参数,例如此处的'text'参数。


另一种方式是在菜单项界面按Tab键,并传递一个'text'参数,如下:

wKioL1jFQ3Kga_6vAAejKUCoNv0352.png


当kernel启动anaconda之后,就开始执行anaconda的安装过程了。


anaconda的工作过程分为三个阶段:

(1)安装前的配置阶段

(2)安装阶段

(3)首次启动

(注意:严格来说,第三阶段即首次启动这一阶段与anaconda无关,只是系统安装过程中的一个步骤)


(1)安装前的配置阶段:

在这一阶段配置的参数主要是:

①安装过程使用的语言

②键盘类型

③安装目标存储设备

Basic Storage:本地磁盘;

Specialized Storage:特种设备,例如iSCSI;

④设定主机名;

⑤配置网络接口;

⑥时区;

⑦管理员密码;

⑧设定分区方式及MBR的安装位置;

⑨创建一个普通用户;

⑩选定要安装的程序;


前面提到,使用anaconda安装CentOS系统有图形界面安装和文本界面安装两种方式,这里分别对这两种安装方式的配置进行介绍:


图形界面安装:


选择是否检测安装引导设备(这里是光盘),如果不需要则可直接选择"Skip":

wKiom1jGJG6Q3UJYAABNkYOHrW8770.png


找到安装程序anaconda:

wKioL1jGJG6j8zS5AAA-dolusuk328.png


进入anaconda图形化安装界面:

wKioL1jGJAnxiCDvAAMq5fZrJgE949.png


选择安装过程使用的语言:

wKioL1jGJAqAiGsIAAKp931EK40935.png


选择键盘类型:

wKiom1jGJAqSgtJYAAI9Faiu6r4379.png


选择安装目标存储设备,这里选择本地磁盘:

wKioL1jGJAugmvbqAAI8-1hwuLc622.png


接下来一步,需要先确认磁盘为空或者磁盘上没有重要数据,点击确认之后所有数据将会被丢失。还有一点需要注意的就是如果当前主机上有多块硬盘,则其他硬盘上的数据也会被覆盖,确认不会造成影响之后方可点击确认:

wKiom1jGJA2QUCQcAAOnj_kztsk516.png


设定主机名:

wKiom1jGJA2wupxcAAGfAFYqiuU423.png


设定时区:

wKioL1jGJBGwgjPFAAdKLaMvIP8939.png


设置管理员密码:

wKiom1jGJBLjcfgMAAGshjdpjfQ212.png


选择安装方式,这里既可以使用默认分区布局,也可以自定以分区布局。此处选择自定义布局:

wKiom1jGJBSyr3_XAARTAAFk7P8078.png


这里采用最简单的分区方式,将硬盘/dev/sda分为三个分区,如图:

wKioL1jGJBXhNq0bAAIWGHBoPJs048.png


格式化将会丢失部分或全部原有的数据,确认不会造成影响之后即可进行格式化:

wKiom1jGJBbzgf6eAAKYn-PAEc4031.png


这里提示所有的分区设置将应用于磁盘之上,选择"Write changes to disk":

wKioL1jGJBbzQRqWAABCEhFuUjg971.png


设置MBR的安装位置、是否为bootloader加密以及rootfs所在分区的卷标:

wKioL1jGJBeAvvKjAAK7ezmc2B0431.png


选定要安装的程序包、程序包仓库:

wKiom1jGJBrDd4AvAAM43-h0wtU161.png


如果选择"Modify repository",则可修改程序包仓库的名称、类型:

wKioL1jGJD3AWikEAAN1nawKoJE054.png


以上为图形界面安装前的配置阶段。前面提到,可以在菜单项引导界面向内核传递参数"text"方式选择文本安装方式。接下来介绍文本界面安装前的配置。



文本界面安装:


显示欢迎信息:

wKioL1jGKtTwEkuoAAANPU5W-WQ019.png


选择安装过程使用的语言:

wKiom1jGKtTjg9Q8AAAdvjnIjYc274.png


选择键盘类型:

wKioL1jGKtTDmbpSAAAZ5Ui-WYM076.png


这里选择"Re-initialize",初始化所有磁盘:

wKioL1jGKtXDrM0OAAA4-tyno_8051.png


选择时区,并启用UTC:

wKiom1jGKtWQIttsAAAbOBiyb08994.png


设置管理员密码:

wKiom1jGKtXiyvi8AAAaqifs3Vw545.png


选择要对哪个磁盘设备进行分区(这里可使用默认的分区布局):

wKioL1jGKtaAZ-P3AAAwIs7vbkg586.png


确认是否将指定的分区操作应用于指定磁盘设备上,这里确认不会造成影响即可选择"Write changes to disk":

wKiom1jGKtahCnCuAAAc1EtrZkQ644.png



(2)安装阶段:

在这一阶段主要完成的操作主要有:

①在目标磁盘上创建分区并执行格式化;

②将选定的程序包安装至目标位置;

③安装Bootloader.



图形界面安装方式的安装阶段:

wKiom1jGJDzjznh4AANJdwEFAhE039.png



文本界面安装方式的安装阶段:

wKioL1jGKtbiKT7BAAAZeJxksXk190.png




(3)首次启动

这一步骤与anaconda程序无关,只是安装过程中的一个步骤。

首次启动设定的功能主要有:

①iptables:可设定是否开启防火墙功能;

②selinux:可设定是否开启SELinux功能;

③core dump:可设定是否开启核心转储功能;核心转储,即在内核崩溃时能够将内核崩溃那一刻在内存中的所有数据创建成为映像文件保存在磁盘上,供后续可以通过这个映像文件分析追踪导致内核崩溃的原因,从而可以避免重复出现同样的问题。开启该功能要求内存至少有2G。


这样就把CentOS系统安装完成了!

CentOS系统安装(上):图形/文本界面安装的更多相关文章

  1. Swift社交应用文本输入优化汇总

    本文将汇总一下Swift社交应用文本输入优化技巧。

  2. 创建自注册的Swift UI 控件

    UIKit的UITextField控件的placeholder属性就是用来干这个的。方式2:NSNotificationCenterNSNotificationCenter通过UITextViewTextDidChangeNotification通知来告诉你用户在TextView中输入或删除了某些字符。一般,我们在对象的deinit方法中向NSNotificationCenter注销该对象。但是在Swift中,我们无法在扩展中使用deinit方法。TheNotificationProxyatRunTime

  3. 在 Cocoa 中实现 ICU 文本变换

    ICU库提供了一整套强大的文本变换功能,在处理用户输入、特别是当你的程序需要处理一些英语之外的语言或者非拉丁字符时非常有用。在Apple的平台中,字符串变换一直以来都是通过CoreFoundation的CFStringTranform函数来实现。输入变换结果HELLOWORLDLowerhelloworld仅转换元音字母为小写。拉丁到ASCII这一步会移除变音符以及会把ASCII码范围之外的字符和标点符号转换成ASCII中与之最为接近的版本。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@fox

  4. CentOS 8.2服务器上安装最新版Node.js的方法

    这篇文章主要介绍了CentOS 8.2服务器上安装最新版Node.js的方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. centos+php+coreseek+sphinx+mysql之一coreseek安装篇

    这篇文章主要介绍了centos+php+coreseek+sphinx+mysql之一coreseek安装篇的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下

  6. anaconda 部署Jupyter Notebook服务器过程详解

    这篇文章主要为大家介绍了anaconda 部署Jupyter Notebook服务器过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  7. Centos7 中 Node.js安装简单方法

    这篇文章主要介绍了Centos7 中 Node.js安装简单方法,非常不错具有一定的参考借鉴价值,需要的朋友可以参考下

  8. Anaconda+pycharm安装及环境配置全过程

    在使用pyCharm进行开发时,需要用到Anaconda创建的环境,下面这篇文章主要给大家介绍了关于Anaconda+pycharm安装及环境配置的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

  9. nodejs脚本centos开机启动实操方法

    在本篇文章里小编给大家整理的是关于nodejs脚本centos开机启动实操方法,有兴趣的朋友们参考下。

  10. Centos PHP 扩展Xchche的安装教程

    这篇文章主要介绍了Centos PHP 扩展Xchche的安装教程的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部