网站首页 > linux / 正文
请关注本头条号,每天坚持更新原创干货技术文章。
如需学习视频,请在微信搜索公众号“智传网优”直接开始自助视频学习
1. 前言
在本文中我们将回顾Linux操作系统中的引导过程。操作系统如何通过不同的启动状态阶段。本文是为那些刚刚接触Linux的读者编写的。了解Linux如何启动对于在系统出现故障时有效地进行故障排除非常重要。当系统打开,几分钟后,我们得到一个登录提示。我们有没有试着找出启动序列的所有阶段都发生了什么,以及系统启动过程中幕后发生了什么。
2. 启动电源
- BIOS基本输入输出系统是一个预置在主板芯片组中的软件程序。
- BIOS加载并扫描诸如硬盘、CD-ROM、RAM等设备。
- BIOS搜索主硬盘驱动器的MBR(主引导记录:第一扇区),扫描第一阶段加载程序(在我们的示例中,启动加载程序是(GRUB LILO),并将职责移交给MBR。
- Boot PROM/FLASH/BIOS能够熟练地将MBR加载到RAM中并执行它。
3. MBR (Master Boot Record)
512 bytes of space –> MBR
MBR包含了大多数操作系统的加载器信息。比如UNIX, Linux和WINDOWS。
MBR存储加载程序第阶段的二进制信息。
MBR包括第一个磁盘驱动器的物理扇区(通常是512bytes),它不是任何分区的一部分。
放置在主磁盘驱动器上,磁道第一柱面的主扇区为0,磁头为0(这整个路径通常是为引导程序预订的)
MBR包括一个小型可执行程序和一个指定主分区的表。
Boot?Code?(GRUB)?446?bytes
partition?1:?16?bytes
partition?2:?16?bytes
partition?3:?16?bytes
partition?4:?16?bytes
magic?Number:?2?bytes
- MBR还记录哪个主分区是活动的。
- BIOS向第一阶段引导加载程序提交权限,第一阶段启动加载程序并随后扫描分区表,并在配置为可引导的分区上找到第二阶段启动加载程序。
4. Linux操作系统引导器Boot Loader
- 引导加载程序从第一阶段加载程序中定义,并将自身加载到RAM中。所有这些都是在几毫秒内发生的。
- 默认的第二阶段引导加载程序是GRUB (Grand Unified boot loader)或LILO (Linux加载程序)
- 一旦GRUB加载到RAM中,它就会搜索内核的位置。
- GRUB将仔细检查映射文件,以找到位于(/boot)下的内核映像并加载它。
- GRUB从/boot分区加载内核(vmlinux -version)
5. Linux操作系统引导器之grub
GRUB为initrd - >组织RAMDISK (RAMDISK是从RAM中保留的空间)。此外,它还将initrd驱动到RAM中,以使内核准备好将自己加载到内存和依赖的模块中,这样它就可以将系统留给“init”进程
在Linux中,大多数驱动程序都是预先构建为模块的,这些模块是初始ram驱动器(initrd.img),它可以保存附加模块的所有信息。因此,当内核引导时,它创建ramdrive并加载initrd.img及其相关模块。
GRUB读取/boot/grub/grub.conf 为用户选择操作系统提供了一个干净的接口。
一旦内核加载了它所依赖的模块,它就会移交给“init”进程。内核映像有一个小的、未打包的程序,它解压缩内核并运行它。
6. Linux操作系统引导过程之LILO
为了在硬盘上定位操作系统,LILO需要指示MBR。对/etc/lilo.conf进行的任何修改,它必须在MBR中更新,但是在GRUB的情况下不需要更新,它直接从文件/boot/grub/grub.conf中读取。
在/etc/lilo.conf进行更改之后,我们必须手动更新MBR
/sbin/lilo?-v
7. Linux操作系统引导过程之第二阶段
GRUB第二阶段加载程序驻留在MBR和/boot分区中。一旦GRUB加载到内存中,它就变成了第二阶段加载器。
8. Linux操作系统引导过程之第三阶段
不应该删除/initrd目录,它是内核快速访问启动系统模块所需的模块(包括设备驱动程序)的临时占位符。
9. Linux内核初始化的关键点包括:
- 初始化CPU组件,如MMU
- 初始化调度器(PID 0)
- 以rw模式挂载根文件系统
- 派生init进程(PID 1)
本质上,内核初始化做了两件事:
- 启动共享资源管理器(RAM、处理器和大容量存储)的核心系统。
- 启动单个进程/sbin/init
- Init进程(sbin/init)是第一个进程,它加载所有不同的守护进程,并挂载/etc/fstab下列出的所有分区。
10. 关于/etc/fstab
- /sbin/init读取/etc/inittab文件
- 设置默认运行级别(telinit命令允许管理员告诉init进程更改其当前运行级别)
- 调用/etc/rc.d/rc.sysinit和/etc/rc.d/rc x(其中“x”是一个运行级)
- 在/etc/rc.d/rc5.d目录文件以字母K表示杀进程的脚本。文件以字母S开头代表启动脚本。
- 启动tty流程和xdm (X display manager)
- 启动用户登录屏幕
11. 总结
经过本文,大家应该对Linux操作系统引导的过程有一定的认识和了解吧?
本文已同步至博客站,尊重原创,转载时请在正文中附带以下链接:
https://www.linuxrumen.com/rmxx/1514.html
点击了解更多,快速查看更多的技术文章列表。
Tags:linux 启动级别
猜你喜欢
- 2024-11-26 Linux新手入门系列:注册tomcat的systemctl服务,设置开启自启动
- 2024-11-26 万字详文干货:从无盘启动volumio看Linux启动原理
- 2024-11-26 kali linux系统运行级别
- 2024-11-26 2Linux系统管理之Linux系统基础知识
- 2024-11-26 Linux内核打印级别
- 2024-11-26 Linux系统的正确关机方法
- 2024-11-26 开机启动流程
- 2024-11-26 对linux的基础了解
- 2024-11-26 90后程序员小伙分享—Linux内核kernel启动分析(下篇)精品推荐
- 2024-11-26 linux 简单介绍