文章目录
- 1. 开机启动过程
- 2.实验环境
- 3.grub磁盘引导出现问题
- 4.启动引导文件丢失
- 5.内核镜像文件丢失
1. 开机启动过程
过程如下图:
1)加载BIOS
- 当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它。
- 这是因为BIOS中包含了CPU的相关信息、设备启动顺序信息、硬盘信息、内存信息、时钟信息、PnP特性等等。
- 在此之后,计算机心里就有谱了,知道应该去读取哪个硬件设备了。
从功能上看,BIOS分为三个部分: 自检及初始化程序;硬件中断处理;程序服务请求
自检及初始化程序 |
比较容易理解,就是电脑通电后BIOS对硬件部分的检测,是否有异常或故障,还有就是启动前一些硬件参数的比对是否符合,之后就是引导硬盘的操作系统 |
硬件中断处理 |
计算机开机的时候,BIOS会告诉CPU硬件设备的中断号,当你操作时输入了使用某个硬件的命令后,它就会根据中断号使用相应的硬件来完成命令的工作,最后根据其中断号跳回原来的状态 |
程序服务请求 |
从BIOS的定义可以知道它总是和计算机的输入输出设备打交道,它通过最特定的数据端口发出指令,发送或接收各类外部设备的数据,从而实现软件应用程序对硬件的操作 |
2)读取MBR
- 众所周知,硬盘上第0磁道第一个扇区被称为MBR,也就是Master Boot Record,即主引导记录,它的大小是512字节,别看地方不大,可里面却存放了预启动信息、分区表信息。
- 系统找到BIOS所指定的硬盘的MBR后就会将其复制到0×7c00地址所在的物理内存中。其实被复制到物理内存的内容就是Boot Loader,而具体到你的电脑,那就是lilo或者grub了。
3)Boot Loader
- Boot Loader 就是在操作系统内核运行之前运行的一段小程序。
- 通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核做好一切准备。
- 系统读取内存中的grub配置信息(一般为menu.lst或grub.lst),并依照此配置信息来启动不同的操作系统。
4)加载内核
- 根据grub设定的内核映像所在路径,系统读取内存映像,并进行解压缩操作。
- 系统将解压后的内核放置在内存之中,并调用start_kernel()函数来启动一系列的初始化函数并初始化各种设备,完成Linux核心环境的建立。至此,Linux内核已经建立起来了,基于Linux的程序应该可以正常运行了。
5)用户层init依据inittab文件来设定运行等级
- 内核被加载后,第一个运行的程序便是/sbin/init,该文件会读取/etc/inittab文件,并依据此文件来进行初始化工作。
6)init进程执行rc.sysinit
- 在设定了运行等级后,Linux系统执行的第一个用户层文件就是/etc/rc.d/rc.sysinit脚本程序,它做的工作非常多,包括设定PATH、设定网络配置(/etc/sysconfig/network)、启动swap分区、设定/proc等等。
7)启动内核模块
- 具体是依据/etc/modules.conf文件或/etc/modules.d目录下的文件来装载内核模块。
8)执行不同运行级别的脚本程序
- 根据运行级别的不同,系统会运行rc0.d到rc6.d中的相应的脚本程序,来完成相应的初始化工作和启动相应的服务。
9)执行==/etc/rc.d/rc.local==
- rc.local就是在一切初始化工作后,Linux留给用户进行个性化的地方。你可以把你想设置和启动的东西放到这里。
10)执行/bin/login程序,进入登录状态
- 此时,系统已经进入到了等待用户输入username和password的时候了,你已经可以用自己的帐号登入系统了。
2.实验环境
使用我自己新建的ttt虚拟机,并且有光驱(塞光驱的时候要关闭虚拟机)。
3.grub磁盘引导出现问题
3.1 模拟问题
1)首先查看启动分分区所在硬盘:我的启动分区所在硬盘是 /dev/vda
2)模拟问题:dd if=/dev/zero of=/dev/vda bs=446 count=1 破坏磁盘引导,将MBR覆盖
3)将selinux改为disable并且 reboot
4) 此时采用磁盘方式打开虚拟机打不开,找不到grub
3.2 解决问题
1)此时关闭虚拟机,采用光驱方式启动,进入虚拟控制台
2)进入援救模式
3)输入1,回车得到一个shell
4)df查看一下
5)chroot /mnt/sysimages/ 回车
6)grub2-install /dev/vda 然后就成功了
7)exit两次,关闭虚拟机,以磁盘方式开启虚拟机,就可以看到又恢复了
4.启动引导文件丢失
4.1 模拟问题
1)模拟问题: rm -fr /boot/grub2/grub.cfg,并且reboot
发现虚拟机重启错误了
4.2 解决问题
1)以光驱方式启动虚拟机,先把挽救阶段的弄好。
2)此时关闭虚拟机,采用光驱方式启动,进入虚拟控制台
3)输入1,回车得到一个shell
4)df查看一下
6)chroot /mnt/sysimages/ 回车
7)grub2-install /dev/vda 然后就成功了
8)以磁盘方式开启虚拟机,输入set root=‘hd0,msdos1’,指定/boot分区所在位置
9)写入原grub.cfg中的所需内容:
输入linux16 /vmlinuz-3.10.0-123.el7.x86_64 ro root=/dev/mapper/live-rw(内核、根分区的设备名称,用df查看)
虚拟文件系统:initrd16 /initramfs-3.10.0-123.el7.x86_64.img
10)boot启动
11)进入图形界面后:grub2-mkconfig > /boot/grub2/grub.cfg,以上操作可以使系统正常启动,但是是临时的,所以进入系统后还是需要执行这条命令。
5.内核镜像文件丢失
5.1 模拟问题
模拟问题:rm -rf /boot/vmlinuz-3.10.0-123.el7.x86_64
5.2 解决问题
1)以光驱方式启动虚拟机,先把挽救阶段的弄好。
2)chroot /mnt/sysimage
3)挂载光盘,进入光盘
4)安装内核软件包
5)复制内核镜像文件
退出两次,以硬盘方式启动: