linux系统开机启动流程之初学乍练

简介:

一、linux开机启动流程大体可以分为:

wKioL1MTU_PQkNgIAADVEDtf8XQ190.jpg

第一步、POST(Power-On-Self-Test,上电自检)

没有什么好说的,就是打开计算机的电源,加载BIOS信息,因为在BIOS会包含了CPU的相关信息,硬盘信息,内存信息,系统时钟等,BIOS的信息至关重要,以至于加电开机后必须要先找到它。

第二步、BIOS(boot sequence)

wKiom1MTZ1SheOqlAACo4UbZiIc800.jpg

在BIOS中有一个BOOT选项,在这里可以选择从那一个设备(物理介质)来引导,其实只是为了搜索一个操作系统来启动,当BIOS自检通过后,这个过程会访问系统中的硬盘或CD-ROM的第一个扇区硬盘上第0磁道第一个扇区,这就是MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,里面却存放了预启动信息、分区表信息。分成两段,第一段是引导分区(在系统光盘上或镜像安装到此处)大小是446个字节,第二段是分区表,共有66个字节,记录了分区信息预引导区的作之一是找到活动的分区,并将其分区的引导区读入内存。

第三步、GRUB(Grand Unified Bootloader)

wKioL1MTdx2wjko_AAEbErPF-yc291.jpg

BIOS完成自检后,bootloader就接手初始化硬件设备、创建存储器空间的映射,以便为操作系统内核准备好正确的软硬件环境,系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统,而grub又是分段的

1st stage: 位于MBR中,为了引导2nd stage

1.5 stage: 位于boot基本磁盘分区中,为识别内核文件所在的文件系统提供文件系统识别扩展

2nd stage: 位于boot基本磁盘分区中(位于/boot/grub/),GRUB的引导程序

wKiom1MTcrnRJPkIAAFMFjYCVAM018.jpg

grub.conf配置文件语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@localhost grub] # cat grub.conf
.....
default=0  #引导顺序
timeout=5  #等待用户选择要启动的内核或OS的时长,单位为秒;
splashimage=(hd0,0) /grub/splash .xpm.gz  #背景图片路径。
hiddenmenu  #隐藏菜单
title CentOS (2.6.32-431.el6.x86_64)  #标题
     root (hd0,0) #内核所的那一个硬盘的那一个分区中(无论什么类型的硬盘#都会识别为hd,不区分主分区与逻辑分区的概念)
     kernel  /vmlinuz-2 .6.32-431.el6.x86_64 ro root= /dev/mapper/vg0-root  rd_NO_LUKS rd_NO_DM LANG=en_US.UTF-8 rd_LVM_LV=vg0 /swap  rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=vg0 /root   KEYBOARDTYPE=pc KEYTABLE=us rhgb crashkernel=auto quiet rhgb quiet
#内核挂载的位置
     initrd  /initramfs-2 .6.32-431.el6.x86_64.img
#预加载外围驱动
#完整最小系统
#作用:是将根放在更加高级的设备上
grub读取完成后,将后需工作交给了内核      

第四步、Kernel初始化

wKiom1MTiNLR50iyAAJipWmx2ug812.jpg

而在内核中要完在对 硬件探测、硬件驱动初始化(initrd)、挂载根文件系统(只读挂载_ro)

内核被加载后,通过init进程,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。其实/etc/inittab文件最主要的作用就是设定Linux的运行等级,其设定形式是“:id:3:initdefault:”,这就表明Linux需要运行在等级3上。Linux的运行等级设定如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@localhost /] # cat /etc/inittab
.....
# Default runlevel. The runlevels used are:
#   0 - halt (Do NOT set initdefault to this)  #关机
#   1 - Single user mode  #单用户模式
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)#无网络支持的多用户模式
#   3 - Full multiuser mode #有网络支持的多用户模式
#   4 - unused #保留,未使用
#   5 - X11  #有网络支持有X-Window支持的多用户模式
#   6 - reboot (Do NOT set initdefault to this) #重新引导系统,即重启
#
id :3:initdefault:
#第一列:id: 操作的ID
#第二列:runlevels: 在哪些级别下执行此操作
#第三列:action: 动作
#每一种动作又可以分为:
#initdefault: 设置默认运行级别,无需定义操作
#sysinit:指定系统初始化脚本
#wait: 等待系统切换至此级别时运行一次;
#ctrlaltdel: 定义组合键被按下时要运行的命令;
#respawn: 当指定操作进程被关闭时立即再启动一次;

init进程将以/etc/inittab中设置的默认值来执行rc.sysinit,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、 设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等;

/etc/rc.d/rc.sysinit主要的作用是在各个运行模式中相同的初始化工作。包括:
     调入keymap以及系统字体
    启动swapping
    设置主机名
    设置NIS域名
    检查(fsck)并mount文件系统。
    打开quota
    装载声卡模块
    设置系统时钟    
    清理

    /etc/sysctl.conf设定内核参数

  /etc/rc.d/rc.sysinit 则根据其参数指定的运行模式(运行级别,你在inittab文件中可以设置)来执行相应目录下的脚本,凡是以K开头的,都以stop为参数调用;凡是以S开头的,都以start为参数来调用的。调用顺序按##从小到大来执行。例如,假如缺省的运行模式是3,/etc/rc.d/rc3.d/就会按上述方式来调用。

centos或redhat中的运行模式2,3,5都把/etc/rc.d/rc.local做为初始化脚本中的最后一个,所以用户可以在这个文件中添加一些需要在其他初始化工作之后,登录之前执行的命令。rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。

第五步、Shell

wKiom1MTinTTZaKuAABsaKLipLg275.jpg

执行/bin/login程序,进入登录状态

此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。










本文转自 jinlinger 51CTO博客,原文链接:http://blog.51cto.com/essun/1366045,如需转载请自行联系原作者
目录
相关文章
|
8天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
124 78
|
12天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
46 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
8天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
60 13
|
1月前
|
Ubuntu Linux 网络安全
linux系统ubuntu中在命令行中打开图形界面的文件夹
在Ubuntu系统中,通过命令行打开图形界面的文件夹是一个高效且实用的操作。无论是使用Nautilus、Dolphin还是Thunar,都可以根据具体桌面环境选择合适的文件管理器。通过上述命令和方法,可以简化日常工作,提高效率。同时,解决权限问题和图形界面问题也能确保操作的顺利进行。掌握这些技巧,可以使Linux操作更加便捷和灵活。
36 3
|
9天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
28 0
|
1月前
|
Linux
在 Linux 系统中,`find` 命令
在 Linux 系统中,`find` 命令
38 1
|
20天前
|
存储 Oracle 安全
服务器数据恢复—LINUX系统删除/格式化的数据恢复流程
Linux操作系统是世界上流行的操作系统之一,被广泛用于服务器、个人电脑、移动设备和嵌入式系统。Linux系统下数据被误删除或者误格式化的问题非常普遍。下面北亚企安数据恢复工程师简单聊一下基于linux的文件系统(EXT2/EXT3/EXT4/Reiserfs/Xfs) 下删除或者格式化的数据恢复流程和可行性。
|
7月前
|
消息中间件 Linux 网络安全
Linux下源码安装RabbitMQ并设置服务开机启动
Linux下源码安装RabbitMQ并设置服务开机启动
236 0
|
7月前
|
关系型数据库 MySQL Linux
MySQL【部署 02】Linux 非 root 用户部署 mysql-5.7.28 设置开机启动及问题汇总(含云盘资源)
MySQL【部署 02】Linux 非 root 用户部署 mysql-5.7.28 设置开机启动及问题汇总(含云盘资源)
355 0
|
关系型数据库 MySQL 应用服务中间件
Linux下设置mysql和tomcat开机启动
Linux下设置mysql和tomcat开机启动