`
maosheng
  • 浏览: 560363 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Linux 开机流程

阅读更多
Linux开机流程:

1. 加载 BIOS(Basic Input Output System),并透过 BIOS 程序去加载 CMOS 的信息,并且藉由 CMOS 内的设定值取得主机的各项硬件配置信息,进行开机自我测试(POST:Power-on Self Test),然后开始执行硬件侦测的初始化,并设定 PnP(Plug and Play) 装置,之后再定义出可开机的装置顺序,并依据设定取得第一个可开机装置,接下来就会开始进行开机装置的数据读取了 (MBR 相关的仸务开始)。


2. 读取并执行第一个开机装置内 MBR(Master Boot Record,, 主要启动记录区) 的 Boot Loader (亦即是 grub 或 lilo 或 spfdisk 等程序),Boot Loader 的最主要功能是要认识操作系统的文件格式并据以加载核心到主存储器中去执行


3. 依据 Boot Loader 的设定加载 Kernel(/boot/vmlinuz) ,Kernel 会开始侦测硬件与加载驱动程序
(boot loader 可以加载 kernel 与 initrd ,然后在内存中让 initrd 解压缩成为根目录, kernel 就能够藉此加载适当的驱动程序,最终释放虚拟文件系统,并挂载实际的根目录文件系统, 就能够开始后续的正常开机流程
initrd( /boot/initrd )虚拟文件系统 (Initial RAM Disk) ,这个档案的特色是,他也能够透过 boot loader 来加载到内存中, 然后这个档案会被解压缩并且在内存当中仿真成一个根目录,且此仿真在内存当中的文件系统能够提供一支可执行的程序,透过该程序来加载开机过程中所最需要的核心模块, 通常这些模块就是 USB, RAID, LVM, SCSI 等文件系统与磁盘接口的驱动程序啦!等载入完成后, 会帮助核心重新呼叫 /sbin/init 来开始后续的正常开机流程)。


4. 在硬件驱动成功后,Kernel 会主动呼叫 init(/sbin/init,PID=1) 程序,而 init 会取得(/etc/inittab)runlevel 信息
(/sbin/init 最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设定、语系处理、文件系统格式及其他服务的启动等。 而所有的动作都会通过 init 的配置文件,亦即是 /etc/inittab 来规划,而 inittab 内还有一个很重要的设定项目,那就是默认的 runlevel,开机执行等级 )


5. init 执行 /etc/rc.d/rc.sysinit 档案来准备软件执行的作业环境 (如网络、时区等)


6. init 执行 /etc/modules.conf内部的额外kernel模块

7. init 执行 run-level对应的/etc/rc.d[1-6].d下的各个服务之启动 (script 方式)


8. init 执行 /etc/rc.d/rc.local 档案


9. init 执行终端机仿真程序 mingetty 来启动 login 程序,最后就等待用户登入啦



runlevel(运行级别):0-6
0:halt
1:single user mode
2:multi user mode,without NFS
3:multi user mode,text mode
4:reserved
5:multi user mode,graphic mode
6:reboot


init 的处理流程:

1.设定默认的运行级别
2.运行系统初始化脚本(/etc/rc.d/rc.sysinit)
3.运行指定运行级别对应目录下的脚本(/etc/rc.d/rc[runlevel].d/)
4.设定Ctrl+Alt+Del组合键的操作
5.定义UPS电源在电源故障/恢复时执行的操作
6.启动 mingetty 的六个虚拟终端 (tty1-tty6)
7.启动图形终端


init 处理系统初始化流程 (/etc/rc.d/rc.sysinit)

1. 取得网络环境与主机类型
   读取网络配置文件 /etc/sysconfig/network ,取得主机名与默认通讯闸 (gateway) 等网络环境。

2. 测试与挂载内存装置 /proc 及 USB 装置 /sys
   除挂载内存装置 /proc 之外,还会主动侦测系统上是否具有 usb 的装置, 若有则会主动加载 usb 的驱动并且程序,尝试挂载 usb 的文件系统。

3. 决定是否启动 SELinux

4. 启动系统的随机数生成器
   随机数生成器可以帮助系统进行一些密码加密演算的功能,在此需要启动两次随机数生成器。

5. 设定终端机 (console) 字形

6. 设定显示于开机过程中的欢迎画面 (text banner);

7. 设定系统时间 (clock) 与时区设定
   需读入 /etc/sysconfig/clock 设定值

8. 接口设备的侦测与 Plug and Play (PnP) 参数的测试
   根据核心在开机时侦测的结果 (/proc/sys/kernel/modprobe ) 开始进行 ide / scsi / 网络 / 音效 等接口设备的侦测,以及利用以加载的核心模块进行 PnP 装置的参数测试

9. 用户自定义模块的加载
   使用者可以在 /etc/sysconfig/modules/*.modules 加入自定义的模块,则此时会被加载到系统当中

10.加载核心的相关设定
   系统会主动去读取 /etc/sysctl.conf 这个档案的设定值,使核心功能成为我们想要的样子

11.设定主机名与初始化电源管理模块 (ACPI)

12.初始化软件磁盘阵列
   主要是通过 /etc/mdadm.conf 来设定好的

13.初始化 LVM 的文件系统功能

14.以 fsck 检验磁盘文件系统
   会进行 filesystem check

15.进行磁盘配额 quota 的转换 (非必要)

16.重新以可擦写模式挂载系统磁盘

17.启动 quota 功能
   所以我们不需要自定义 quotaon 的动作

18.启动系统虚拟随机数生成器 (pseudo-random)

19.清除开机过程当中的临时文件

20.将开机相关信息加载 /var/log/dmesg 档案中


# dmesg         #显示开机过程的信息


启动系统服务与相关启动配置文件 (/etc/rc.d/rc N & /etc/sysconfig)

加载核心让整个系统准备接受指令来工作,再经过 /etc/rc.d/rc.sysinit 的系统模块与相关硬件信息的初始化后,你的 CentOS 系统应该已经顺利工作了。 叧是,我们还得要启动系统所需要的各项『服务』,这样主机才能提供我们相关的网络或者是主机功能嘛! 这个时候,依据我们在 /etc/inittab 里面提到的 run level 设定值,就可以来决定启动的服务项目了。

各个 run level 要执行的各项脚本放置处主要是通过 /etc/rc.d/rc 这个指令来处理相关任务。

/etc/rc.d/rc 指令说明:
 1.透过外部第一号参数 ($1) 来取得想要执行的脚本目录。亦即由 /etc/rc.d/rc 5 可以取得 /etc/rc5.d/ 这个目录来准备处理相关的脚本程序
 2.找到 /etc/rc5.d/K??* 开头的档案,并进行『 /etc/rc5.d/K??* stop 』的动作
     (关闭以K开头的服务)
 3.找到 /etc/rc5.d/S??* 开头的档案,并进行『 /etc/rc5.d/S??* start 』的动作
     (启动以S开头的服务)

注: /etc/rc5.d/下的文档全部是连接文档,连结到服务启动的目录 /etc/init.d/

# runlevel      # 查看当前的运行级别
N 3            
# init 5        # 切换运行级别为5
# runlevel
3 5             # 3:上次运行级别,5:当前运行级别


核心与核心模块:

在整个开机的过程当中,是否能够成功的驱动我们主机的硬件配备,是核心 (kernel) 的工作。

核心与核心模块位置:

核心(Kernel): /boot/vmlinuz 或 /boot/vmlinuz-version
核心解压缩所需 RAM Disk: /boot/initrd (/boot/initrd-version)
核心模块: /lib/modules/version/kernel 或 /lib/modules/$(uname -r)/kernel
核心原始码: /usr/src/linux (要安装才会有!否则预设不安装的!)

如果该核心被顺利的加载系统当中了,那么就会有几个信息记录下来:
核心版本: /proc/version
系统核心功能: /proc/sys/kernel/

# lsmod                         # (lsmod: list modules)查看核心已加载的核心模块

# modinfo [-adhpV][模块文件]    # 显示核心模块的信息

boot loader 的两个 stage:

boot loader 是载入核心(Kernel)的重要工具

在 BIOS 读完信息后,接下来就是会到第一个开机装置的 MBR 去读取 boot loader 了。这个 boot loader 可以具有选单功能、直接加载核心档案以及控制权移交的功能等, 系统必须要有 boot loader 才有办法加载该操作系统的核心就是了。但是我们都知道, MBR 是整个硬盘的第一个 sector 内的一个区块,充其量整个大小也才 446 bytes 而已,为了解决这个问题,所以 Linux 将 boot loader 的程序代码执行与设定值加载分成两个阶段 (stage) 来执行:

Stage 1:执行 boot loader 主程序:
第一阶段为执行 boot loader 的主程序,这个主程序必须要被安装在开机区,亦即是 MBR 或者是 boot sector 。但如前所述,因为 MBR 实在太小了,所以,MBR 或 boot sector 通常仅安装 boot loader 的最小主程序, 并没有安装 loader 的相关配置文件

Stage 2:主程序加载配置文件:
第二阶段为透过 boot loader 加载所有配置文件与相关的环境参数档案 (包括文件系统定义与主要配置文件 menu.lst-->grub.conf ), 一般来说,配置文件都在 /boot 底下












分享到:
评论

相关推荐

    Linux 开机流程练习脚本

    该文件为C语言编写的小脚本,需要Linux 5 版本的redhat来运行,并且前提是已经装了gcc相关软件;建议在VM ware 上练习用,练习前先给系统做个快照,以免你做不出来,然后系统起不来,重新安装你会很不爽的。

    linux启动流程图

    LINUX从开机到进入系统的详细流程图示介绍。

    专题资料(2021-2022年)Process开机流程包含了Linux开机程序.doc

    以下是详细的Linux开机流程和涉及的重要知识点: 1. **Load BIOS**:当计算机通电后,BIOS首先被加载。BIOS是一个固件,负责识别和初始化计算机硬件,如CPU、内存、硬盘和其他设备。它还负责设置硬件配置,这些配置...

    Linux操作系统的开机流程分析

    ### Linux操作系统的开机流程分析 #### 一、引言 Linux作为一款开源的操作系统,在服务器领域占据了主导地位,其强大的稳定性和灵活性深受广大用户的喜爱。本文将深入剖析Linux操作系统的开机启动流程,帮助读者...

    Process(开机流程)包含了Linux开机程序.doc

    Process(开机流程)包含了Linux开机程序.doc

    展锐Android11.0开机启动流程介绍V1.0-nowatermark

    Android 11.0 开机启动流程介绍 ... Android 11.0 平台开机启动流程的重要组件包括:Linux 内核、init 进程、Zygote 进程、System Server 进程等。这些组件之间的交互和协作是 Android 系统启动的关键。

    基于Qt的开机自启动(二)(Linux)

    首先,理解Linux的启动流程是关键。在Linux中,开机自启动通常涉及到`/etc/rc.d`或`/etc/init.d`目录下的脚本,或者在现代的Systemd系统中,是通过`/etc/systemd/system`目录下的服务单元文件(service unit file)来...

    10-Linux开机启动流程1

    Linux 开机启动流程详解 Linux 系统的启动过程是一个复杂而有序的序列,涉及到多个组件和步骤。这里我们将深入探讨这一流程,了解从按下电源键到用户登录的每一个环节。 1. BIOS(Basic Input Output System)加载...

    linux基础学习7

    #### Linux开机流程解析 Linux系统的开机流程是理解系统启动原理的关键步骤之一。本文将详细解析Linux系统从加电到最终登录界面的完整过程。 1. **加载BIOS硬件信息与自检** - **BIOS(Basic Input Output ...

    一天一点学习Linux之RHEL6的开机流程分析

    ### Linux RHEL6 开机流程详解 #### 一、引言 在日常使用Linux系统的过程中,用户往往只需简单地按下电源按钮,系统便能够自动完成启动。然而,在背后支持这一系列动作的是一套复杂的开机流程。对于专业人员来说,...

    linux开机启动配置文档—20170331.rar_linux 守护进程_linux开机启动配置文档

    在Linux操作系统中,系统的启动流程和服务管理是一个关键部分,特别是在服务器环境中,正确配置...对于提供的`linux开机启动配置文档—20170331.docx`文档,你可以深入学习其中的实例和具体操作步骤,以便于实践应用。

    linux-set-start.rar_linux 开机启动

    总的来说,Linux开机启动服务的设置涵盖了从理解启动流程到编写和管理服务脚本的多个层面。熟练掌握这些技能对于日常的系统管理和运维工作至关重要。通过学习和实践,你可以更有效地控制和优化Linux环境中的服务运行...

    Linux运维工程师面试常见问题汇总.docx

    2. **Linux开机流程**:了解Linux启动过程中的BIOS、MBR、GRUB、init系统、运行级别和服务启动顺序等概念是必备知识。 3. **Linux读写问题**:这可能涉及到文件系统的I/O操作,如文件权限、硬链接和软链接的区别,...

    Linux开机程序内幕.pdf

    在深入探讨Linux开机程序内幕之前,我们先来理解一下操作系统启动的基本流程。在传统的个人计算机上,启动过程通常从BIOS(基本输入输出系统)开始,它执行硬件自检(POST),然后根据用户设置的引导顺序加载引导...

    Linux系统如何初始化和启动系统服务的(Linux的开机流程)

    Linux系统初始化和启动系统服务的过程 Linux系统的初始化和启动系统服务的过程是一个复杂的过程,涉及到多个步骤和组件。下面我们将详细介绍这个过程。 一、简单介绍RHEL开机时的先后顺序 1. BIOS:电脑一打开...

    Linux运维工程师面试常见问题汇总.pdf

    2. **Linux开机流程**:了解从BIOS到运行用户会话的整个启动过程,包括bootloader(如GRUB)、init系统(如Systemd)和运行级别。 3. **Linux读写问题**:理解文件系统的读写机制,包括文件权限、硬链接与软链接的...

    18_开机关机流程与_Loader

    开机流程大致分为以下几个阶段: 1. **Boot Loader**: - Boot Loader是操作系统加载前的引导程序,它的主要任务是加载操作系统的核心。常见的Boot Loader有GRUB和LILO。 - GRUB(Grand Unified Bootloader)是一...

    Linux开机启动程序rc.local1

    【Linux开机启动程序rc.local详解】 在Linux操作系统中,开机启动程序是一个至关重要的部分,它决定了系统启动时自动运行哪些服务和脚本。rc.local是一个传统的方法,用于配置系统启动时执行的命令,尤其在CentOS7...

    linux开机启动资料

    这份“linux开机启动资料”应该包含了一系列关于这一主题的文档、教程或者脚本,旨在帮助学习者深入理解Linux启动过程的细节。下面,我们将详细探讨Linux开机启动的相关知识点。 首先,Linux的启动流程可以分为几个...

Global site tag (gtag.js) - Google Analytics