博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019/02/16 Linux启动流程
阅读量:3924 次
发布时间:2019-05-23

本文共 3894 字,大约阅读时间需要 12 分钟。

在这里插入图片描述

了解这个课程,可以万一系统启动故障,库快速排错,恢复启动
centos6 和centos7启动流程不一样
在这里插入图片描述
linux的内核+相关工具rootfs(如gnu),gnu很多工具装在根目录下。内核对应系统里的内核包
这个包包含了内核的主要内容
在这里插入图片描述
内核对应linux操作系统的核心功能,进程,内存,网络的管理,都是内核完成的
而各种其他的软件gnu,各种工具是由各种软件和各种库组合而成的,
ldd 可以查看系统中指定的命令包含的库,库大部分默认路径都在lib64里,只解决了程序本身的功能,而同用的公共功能是放在库里
在这里插入图片描述
在这里插入图片描述
函数如在细分的话,有两种,一种叫procedure过程 (无返回值),另一种叫function函数
bash如何在shell脚本中实现函数
在这里插入图片描述
linux里,内核设计是基于单内核的
单内核和微内核区别就是是否把功能集成在同一个程序中,(linux就是集成在同一个程序中)
所有的linux功能是放在单一的程序里
在这里插入图片描述
所有核心功能都集成在单一文件中在这里插入图片描述
而windows(solaris)是基于微内核,用很多不同操作系统的功能,用不同的单独子系统分开实现
进程管理用单一模块实现,内存管理分开用单一子系统实现,不同的子系统和子模块来实现不同的功能,组合起来,来实现整个操作系统的功能
而linux就拿一个文件把所有功能全实现了
(很多权威的人认为微内核更先进),分模块,进而有一个子模块出问题,不影响其他模块
minix,李娜思(承认微内核更先进)和一个教授一起开发的
在这里插入图片描述
linux一些核心的功能是专门一个文件实现的,但是其他零散的,比如(文件系统,硬件驱动,网络协议)也是以一个个模块提供的,这种模块叫内核对象,表现为一个个ko文件,linux有各种各样的文件系统,典型的xfs,ext4,这些系统对应的需要加载的内核模块来支持这些文件系统,就表现为ko文件
在这里插入图片描述
好处就是,可以必要的情况下加载到内存里,不必要的情况下就不加载,减少内存容量内存使用
在这里插入图片描述
列出系统中加载的哪些模块
lsmod加载模块 list module 模块,centos7默认不使用ext4,用xfs
在这里插入图片描述3代表用了三次,有一些情况下了用了xfs驱动模块三次 ,驱动模块大小
centos6 默认用的ext4,也用过网卡驱动模块e1000
modrobe -r可以卸载模块
在这里插入图片描述
可以根据系统的情况,自动的装载卸载
在这里插入图片描述
在这里插入图片描述
linux核心文件
linux辅助的文件
在这里插入图片描述
在这里插入图片描述
在centos5上交叫initrd
在这里插入图片描述
辅助的文件系统,带有辅助的相关文件,这个文件破坏了,系统将导致无法启动
在这里插入图片描述
在这里插入图片描述
是压缩格式的,要看里面的内容,就需要解压,在centos7上是一个cpio的存档
在这里插入图片描述
在这里插入图片描述
解压缩文件要看后缀,gzip -d 解压,真正的格式是cpio的存档文件
在这里插入图片描述
cpio是一个打包文件,预览里面内容,带有的文件列表
在这里插入图片描述在这里插入图片描述
5版本用的ext3
可以用同样方法解压6的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述这里面放的就是一些和启动相关的驱动模块
在这里插入图片描述
基本就放在两个目录里,用这些文件来对应启动内核相对应的功能
在这里插入图片描述
内核启动设计到达主要三个相关的主要内容
在这里插入图片描述
和kernel相关里面 包大致分2个文件/boot,/lib
initrd对应initramfs,rd对应的虚拟的磁盘(ramdisk)模拟的一个磁盘
ramfs(ramfilesystem)模拟的一个文件系统
数据存放在磁盘上,用户去访问,并不是访问磁盘得到,而是访问文件系统,通过文件系统去访问磁盘,如果模拟一个磁盘,去访问数据,无形中多了一部操作,效率偏低,而直接模拟成文件系统,把数据模拟到这个文件系统,效率更高,相当于少了一层
在这里插入图片描述
mbr最多管理2T, 大于2T管理gpt分区,gpt分区需要配合的是uefi
gpd分区配合,bios配合mbr,post就是mbr,mbr最多管理2T数据,大于2T就需要用到GPT分区,gpt分区需要配合的硬件uefi,post相比uefi启动稍微慢点,
post加电自检 意思,加粗样式之后记录到mbr启动过程,mbr对应的整个硬盘的第一个扇区sector的512字节(三部分)446字节(就是启动程序bootloader),64字节分区表,55aa分区位的标识
这个445字节就是bootload,centos6叫做grub程序,grub里面分不同的软件(grub0.97,grub2),早起还有io启动软件
centos6用的是0.97版本,centos7用的是2点几
在这里插入图片描述在这里插入图片描述
grub加载完后,开始加载内核vmlinuz
在这里插入图片描述
第一个加载内核之后去寻找跟,找到跟之后
启动进程是init,centos7是systemd
在这里插入图片描述
init在sbin下,sbin是/根目录下,所以执行程序前先把根目录找到
在这里插入图片描述
运行init就需要读取配置文件,最核心的文件就是/etc/inittab文件,这个文件定义了一些必要的内容,比如开机到底进入到什么模式下(图形界面5模式,字符界面3模式)
/etc/inittab调用了一些脚本/etc/rc.d/rc.sysinit初始化脚本,最终看到登录界面
在这里插入图片描述
面试题,centos6的启动流程
1.bios需要设置由哪个设备引导开机(硬盘,网卡)启动设备找到后
2.找到mbr去找到446字节grub系统程序,加载好后
3.加载内核,同时解开内核文件vmlinuz-2.6.32-754.el6.x86_64,解开后尝试驱动各种硬件
4,。驱动找到后,去寻找目录下的第一个进程
5.启动起来后就开始加载各种配置文件(初始化脚本/etc/rc.d/rc.sysinit)
6.按顺序一个个执行
在这里插入图片描述
post power-on-self-test
在这里插入图片描述
是在主板里内部配置的程序,这个程序会自动的经过通电,会自动的把bios功能的程序加载执行,检测各种硬件信息(如果内存松了,就滴滴报警)
rom主板里,只读的程序,检查各种硬件
如果检查没有问题就开始找第一个程序,引导设备,可以修改放在ram(内存,主板里有一块小电池)
引导操作系统的程序叫bootloader,加载跟操作系统相关,windows(ntloader)和linux(可以兼容windows)各不相同,
所以按照顺序很重要,因为只能存在一个启动程序(按照系统,先windows后linux,不然会覆盖
否则单独重新按照bootloader
LILO:只能启动系统, 早期的系统用,已经淘汰
grub功能很强大(早期的linux loader功能有限只能启动机器)
grand unified bootloader 功能强大的统一的bootloader

如何grub程序出现错误,修复

在这里插入图片描述
446放的是GRUB第一阶段
在这里插入图片描述
GRUB第一阶段2进制的放在446字节里,这部分内容来引导系统,然后尝试找boot分区
boot存放了一些和内核相关的文件
在这里插入图片描述
grub第二阶段是在boot/grub,表现为分区下目录里的多个具体文件
访问一个文件系统必须加载驱动
在这里插入图片描述
在这里插入图片描述
1.5阶段很关键,因为446字节放不下ext4驱动文件,所以要放在后面的扇区,
通过446字节找后1.5的驱动,然后找ext4模块
在这里插入图片描述
这些文件就是第二阶段的文件
在这里插入图片描述
在这里插入图片描述
读取这个文件就开始找/(告诉内核跟在哪里,有配置文件/boot/grub/grub.conf)
在这里插入图片描述
跟所在文件系统的uuid,也可以改成/dev/sd2 但是换了硬盘,名称变了就起不来
在这里插入图片描述
找到操作系统的跟目录,下面sbin目录,找到init程序,系统第一个程序运行
在这里插入图片描述
但是有可能boot和/的文件系统不一样,挂载的时候,挂载/的时候,这个文件就告诉你/在哪里
就是挂载/的时候就已经告诉你boot在哪里了
跟的文件系统是单独解决的,是依靠boot里的/initramfs
在这里插入图片描述
所以破坏了这个文件系统就找不到跟了,这个文件等于虚拟的文件系统,可以加载一些必要的驱动,是装系统的时候临时生成的
vmlinux跟这个文件是什么时候创建的,不是创建系统的时候有的,是在centos光盘里就有
在这里插入图片描述
在这里插入图片描述用MD5做哈希运算,得出结果一致就说明文件内容一样
在这里插入图片描述
是光盘拷贝过来的,不是临时生成的
**而initramfs这个文件,就是装系统临时生成的,破坏了也有方法修复,mkinitrd(可以重新生成此文件)
**
在这里插入图片描述
如果移除这个文件,就需要用mkinitrd生成
在这里插入图片描述
再试试重启,出现这种情况,破坏initrb文件修复方法
菜单能出来,后续启动不了,就是ramfs文件出问题了
在这里插入图片描述
vmare按esc,生成中可能不起作用
在这里插入图片描述
第三项救援模式
在这里插入图片描述
在这里插入图片描述
找到跟,并且已经挂载跟
在这里插入图片描述
根目录在sysimage/boot,用mkinitrd修复
在这里插入图片描述
要切换跟,把硬盘的你作为真正的跟
在这里插入图片描述时间比较长,有可能还没写到磁盘,所以写多个sync同步多次,迫使它同步写磁盘
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
删除内核文件怎么修复
在这里插入图片描述
在这里插入图片描述
troubshooting选择第二项救援模式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
也是把跟挂载在sysimage下
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
mkinitrd是个脚本不是个程序, 里面是dract这个程序
在这里插入图片描述
切跟 chroot /path
trap 抓返回信号的,捕捉信号的
while cmd ; do cmds done
for name in list;do cmds done
for ((exp1;exp2;exp3));do cmds done
until cmd ; do cmds done
做菜单 select $ps3做提示符 $REPLAY保存的用户变量
continue
break N 多少层
if 判断
case
shift 移位
run-parts /PATH/ 是个脚本,运行目录下的所有脚本

转载地址:http://jwkgn.baihongyu.com/

你可能感兴趣的文章
7-1 jmu-Java-04面向对象进阶--02-接口-Comparator (20分)
查看>>
7-2 图形继承与多态 (30分)
查看>>
7-3 jmu-Java-03面向对象-06-继承覆盖综合练习-Person、Student、Employee、Company (30分)
查看>>
Abbreviation----Java实现
查看>>
7-6 停车场管理(Java实现)
查看>>
7-1 过河 (15分) Java实现
查看>>
7-2 跳一跳 (15分)Java实现
查看>>
6-1 xcu-sjjg-java-List-1 判断顺序表是否有序 (10分) Java实现
查看>>
7-1 数组循环左移 (20分) Java实现
查看>>
7-10 冲锋衣选货及折扣 (15分)Java实现
查看>>
7-3 矩阵转置 (20分)
查看>>
7-5 打dotaⅡ (20分)Java实现
查看>>
7-2 大笨钟 Java实现
查看>>
7-3 谁先倒 Java实现
查看>>
7-3 多项式求和 (20分)
查看>>
7-4 最大子列和问题 (20分)
查看>>
7-2 跳一跳 (15分)
查看>>
P3156 【深基15.例1】询问学号
查看>>
P3613 【深基15.例2】寄包柜Java/c++
查看>>
P1165 日志分析
查看>>