熟悉系统启动流程对于我们学习Linux系统是非常有帮助的,虽然基础,但能帮助我们更加理解Linux系统的工作机制,以下以CentOS6启动流程介绍:
1、加载BIOS的硬件信息,获取第一个启动设备 2、读取第一个启动设备MBR的引导加载程序(grub)的启动信息 3、加载核心操作系统的核心信息,核心开始解压缩,并尝试驱 动所有的硬件设备 4、核心执行init程序,并获取默认的运行信息 5、init程序执行/etc/rc.d/rc.sysinit文件 6、启动核心的外挂模块 7、init执行运行的各个批处理文件(scripts) 8、init执行/etc/rc.d/rc.local 9、执行/bin/login程序,等待用户登录 10、登录之后开始以Shell控制主机MBR(Master Boot Record)引导 MBR记录一般是在磁盘 0 磁道 1 扇区,共512个字节,BIOS找到并读取MBR到内存中。前446个字节是BootLoder,后 4*16 的 64 个字节是存放分区信息的,最后 2 个字节是校验信息,一般是 55AA。
GRUB(GRand Unified Bootloader) 就是MBR中的前446个字节,它的作用是要选择要启动的内核。
stage1:存放于MBR的前446Bytes,用于加载stage1.5阶段,目的是为了识别并驱动stage2(或者/boot)所在分区的文件系统;
stage1.5:存放于MBR之后的扇区,加载stage2所在分区的文件系统驱动,让stage1中的bootloader能识别stage2所在分区的文件系统;
stage2:存放于磁盘分区之上,具体存放于/boot/grub目录之下,主要用于加载内核文件(vmlinuz-VERSION-RELEASE)以及ramdisk这个临时根文件系统(initrd-VERSION-RELEASE.img或initramfs-VERSION-RELEASE.img)。
加载内核,初始化进程 通过grub加载到内核后,就在内存中解压并展开就可完成后续操作即内核自身初始化。 (1)探测可识别到的所有硬件设备 (2)加载硬件驱动程序(借助于ramdisk加载驱动) (3)以只读方式挂载根文件系统 (4)运行用户空间的第一个应用程序:/sbin/init 设置默认运行级别:为系统运行或维护等目的而设定;0-6:7个级别 d 0:关机 1:单用户模式(root自动登录), single, 维护模式 2: 多用户模式,启动网络功能,但不会启动NFS;维护模式 3:多用户模式,正常模式;文本界面 4:预留级别;可同3级别 5:多用户模式,正常模式;图形界面 6:重启 默认级别: 3, 5 切换级别:init # 查看级别:runlevel ; who -r
1阶段出问题症状:不会进入GRUB菜单,如果没有挂光盘,就直接黑屏,挂上光盘后,会直接进入安装菜单(因为GRUB主程序被破坏,检测以为系统没有安装) 我们可以用dd if=/dev/zero of=/dev/sda bs=1 count=446去破坏MBR中的GRUB,模拟出1阶段错误 恢复步骤:
开机按ESC键,选择第三项进入救援模式 切根 重新生成grub exit;exit;然后reboot重启1.5阶段模拟破环条件:用dd if=/dev/zero of=/dev/sda bs=1 count=3000 skip=512 seek=512来将MBR之后的扇区内容删除一些 恢复步骤同1阶段处理流程
首先光盘模式启动进入linux rescue救援模式。
切根、安装kernel内核
chroot /mnt/sysimage mount /dev/sr0 /media rpm -ivh /media/Packages/kernel-2.6.32-71.el6.i686.rpm --force安装grub grub-install /dev/sda 此命令可以修复1阶段、1.5阶段和2阶段 sync
手动添加/boot/grub/grub.conf配置文件,如下
修复完成后,保存,退出救援模式,重启。
sync exit reboot2.3模拟删除/etc/fstab文件 和清空/boot目录 rm -rf /etc/fstab rm -rf /boot/* 修复步骤: 一:开机进入救援模式 找到根对应在哪个分区(这里默认为/dev/sda2) mount /dev/sda2 /mnt/tmp vi /mnt/tmp/fstab 编辑完后,退出重启进入救援模式,
