Linux 开机流程

这里以RHEL 6 64bit为例,开机的大致流程;

  1. 加载 BIOS 的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置;
  2. 读取并执行第一个开机装置内 MBR 的 boot Loader (亦即是 grub等程序);
  3. 依据 boot loader 的设定加载 Kernel ,Kernel 会开始侦测硬件与加载驱动程序;
  4. 在硬件驱动成功后,Kernel 会去自动调用 init 程序,而 init 会取得 run-level 信息;
  5. init 执行 /etc/rc.d/rc.sysinit 档案来准备软件执行的作业环境 (如网络、时区等);
  6. init 执行 run-level 的各个服务之启动 (script 脚本);
  7. init 执行 /etc/rc.d/rc.local 档案;
  8. init 执行终端机仿真程序 mingetty 来启动login 程序,最后就等待用户登入啦;

加载 BIOS 的硬件信息与进行自我测试,并依据设定取得第一个可开机的装置

开机首先会去加载BIOS(Basic Input Output System),并透过BIOS程序去加载CMOS的信息,并且CMOS内设定的信息取得主机的各项硬件配置。(e.g. CPU与接口的沟通频率),取得了这些信息之后,BIOS还会进行开机自我检测(Power-On Self Test, POST)。然后开始执行硬件侦测的初始化,之后再定义可开机的装置顺序

读取并执行第一个开机装置内 MBR 的 boot Loader (亦即是 grub等程序)

BIOS会指定开机的装置让我们可以读取磁盘中的操作系统核心档案。由于不同OS有不同的文件系统格式,因此我们必须要以一个开机管理程序来处理核心档案加载(load)的问题,开机因此这个程序就被称Boot Loader了。这个Boot Loader在开机装置的第一个扇区内(MBR Master Boot Record)。BIOS是透过硬件的INT 13中断功能来读取MBR的,也就是说BIOS能够侦测到你的磁盘,它就可以通过硬件INT 13号中断来读取该磁盘的第一个扇区内的MBR

一个电脑上装多重操作系统,为什么要先装Windows OS,因为装多重操作系统的时候,每一个系统都会保留一块启动扇区(boot sector)以便到时候启动操作系统,而且还会把启动程序(boot loader)放到系统的MBR,每一块硬盘就只有一个MBR,装第二个操作系统的时候会覆盖第一个操作系统放到系统的MBR的值,Windows系统的Loader预设不具有控制权的转交功能

boot loader的主要功能

  • 提供选单:用户可以选择不同的开机项目,在这个是多重引导的重要功能。

  • 载入核心档案:直接指向可开机的程序区段来启动操作系统。

  • 转交其他Loader: 将开机管理功能转交给其他的Loader来负责。

boot loader最终功能就是加载kernel文件

依据 boot loader 的设定加载 Kernel ,Kernel 会开始侦测硬件与加载驱动程序

通过boot loader的管理而开始读取内核文件后,接下来,Linux就会将内核解压缩到内存中,并且利用内核的功能,开始测试和驱动周边设备。此时Linux内核会以自己的功能重新检测一次硬件,而不一定会使用BIOS检测到的硬件信息。内核此时才开始接管BIOS后的工作了。内核文件一般会放置在/boot里面,并且取名为/boot/vmlinuz

在硬件驱动成功后,Kernel 会去自动调用 init 程序,而 init 会取得 run-level 信息

在内核加载完毕进行完硬件检测与驱动程序加载后,此时主机硬件就准备就绪了,此时内核会主动调用第一个进程,就是/sbin/init。/sbin/init最主要的功能就是准备软件执行的环境,包括系统的主机名、网络设置、语系处理、文件系统格式及其他服务的启动。配置文件为/etc/inittab。而inittab内还有一个很重要的设置选项,就是默认的run level(启动执行等级)。

执行等级:Linux通过设置run level来规定系统使用不同的服务来启动,让Linux的使用环境不同。依据有无网络与有无X Window而将run level分为7个等级

  • 0 - halt 系统直接关机

  • 1 - single user mode 单用户维护模式,用在系统出问题是的维护

  • 2 - Multi-user, without NFS 类似下面的runlevel3,但无NFS服务

  • 3 - Full multi -user mode 完整含有网络功能的纯文本模式

  • 4 - Unused 系统保留功能

  • 5 - X11 与runlevel3类似,但加载使用X Window

  • 6 - reboot 重新启动

由于runlevel 0/4/6不是关机、重新启动就是系统保留的,所以不能将默认的run level设置成这三个值,否则系统就会不断自动关机或者自动重启

/etc/inittab语法

[设置选项]:[run level]:[init的操作行为]:[命令选项]

  • 设置选项:最多四个字符,代表init的主要工作项目,只是一个简单的说明

  • run level:该项目在哪些run level进行的意思。如果是35则代表runlevel3与5都会执行

  • init的操作行为:主要可以进行的动作项目意义有

init设定值

意义说明
initdefault代码预设的run level设定值
sysinit代表系统初始化的动作项目
ctrlaltdel代表[ctrl]+[alt]+[del]三个按键是否可以重新启动的设定
wait代表后面字段设定的指令项目必须要执行完毕才能继续底下其他的动作
respawn

代表后面字段的指令可以无限制的再生(重新启动)。举例来说,tty1的mingetty产生的可登入得画面,在你注销而结束后,系统会再开一个新的可登入画面等待下一个登入

更多的设置可以参考man inittab的说明

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

这个脚本主要是设定系统的环境

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

用户自定义开机启动程序(/etc/rc.d/rc.local)

参考来自鸟哥私房菜第三版

Linux系统的开机启动流程是一个高度有序且复杂的过程,涉及多个关键阶段,从硬件初始化到系统服务启动,最终提供用户登录界面。以下是详细的启动流程说明: ### 启动流程详解 1. **加电自检(POST)** 系统上电后,首先进行的是硬件自检(Power-On Self-Test,POST),由BIOS(基本输入输出系统)负责执行。BIOS会检测硬件设备是否正常,并根据CMOS中存储的设置确定启动设备顺序[^2]。 2. **引导加载程序(Bootloader)** BIOS将控制权交给选定启动设备的主引导记录(MBR)中的引导程序(如GRUBGRUB2)。GRUB2负责加载Linux内核和初始内存盘(initrd)到内存中。initrd是一个临时根文件系统,包含启动过程中所需的驱动程序和工具,用于挂载真正的根文件系统[^4]。 3. **内核初始化** 内核被加载后,开始初始化硬件设备并加载必要的内核模块。随后,内核会挂载根文件系统,并启动第一个用户空间程序 `/sbin/init`,它是系统初始化的起点。 4. **系统初始化(SysV init 或 systemd)** 根据所使用的初始化系统(SysV init 或 systemd),系统进入不同的初始化流程: - **SysV init** 系统读取 `/etc/inittab` 文件以确定默认运行级别(如运行级别3为多用户模式,运行级别5为图形界面模式)。随后执行 `/etc/rc.d/rc.sysinit` 脚本,完成系统基本初始化(如挂载文件系统、配置网络等)。接着,根据运行级别启动 `/etc/rc.d/rcX.d/` 目录下的服务脚本(X表示运行级别)[^5]。 - **systemd** systemd 是现代Linux发行版中广泛采用的初始化系统。它通过目标(Target)来代替传统的运行级别。默认目标通常为 `multi-user.target`(命令行模式)或 `graphical.target`(图形界面)。systemd 并行启动服务,依赖关系由单元文件(Unit files)定义,显著提高了启动速度。可以使用 `systemctl get-default` 查看当前默认目标,使用 `systemctl set-default TARGET` 修改默认目标[^5]。 5. **执行 rc.local(可选)** 在SysV init系统中,系统会执行 `/etc/rc.d/rc.local` 脚本,用户可在此添加需要开机自启的命令或服务。该步骤在systemd系统中可以通过创建自定义的service单元文件实现[^3]。 6. **启动终端登录服务** 最后,系统启动 `getty` 或 `agetty` 进程,提供终端登录界面。用户可以通过命令行或图形界面登录系统。图形登录通常由显示管理器(如GDM、LightDM)处理。 7. **用户登录与Shell初始化** 用户登录后,系统加载用户的Shell环境配置文件(如 `/etc/profile`、`~/.bash_profile` 等),进入用户工作环境[^5]。 ### 示例:查看和修改默认启动目标(systemd系统) ```bash # 查看当前默认目标 systemctl get-default # 修改默认目标为图形界面模式 sudo systemctl set-default graphical.target # 修改默认目标为命令行模式 sudo systemctl set-default multi-user.target ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值