本文共 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/