Linux系统启动流程及启动故障排错

本文发布时间: 2019-Mar-22
今天写这篇文章,是因为别人提出一个问题,自己搞错了,感觉不好意思,就查了一下资料,并实际测试了二个故障,同时也借鉴其他博主资料,不为别的,主要方便以后学习和查阅。一:系统启动的流程图二:启动顺序1,BIOS自检,检测硬件,决定启动介质BIOS为写入到主板上的EEPROM的程序,它可以在开机的时候执行,并通过BIOS程序去加载CMOS的信息,并通过CMOS内的设置取得主机的各项硬件配置(CMOS:CMOS的主要功能就是记录主板上面的重要参数,包括系统时间,CPU电压与频率,各项设备的I/O地址与IRQ等),BIOS程序也可以修改CMOS当中的参数,一般常见的使用Del按键进入BIOS设置界面.2,从硬盘启动,读硬盘的第一个扇区MBR,然后将启动引导工作交给boot loader引导MBR引导记录位于物理硬盘的第一块扇区(第一块扇区512个字节,其中MBR占446字节,分区表占64字节,结束标志占2字节),该扇区又称为主引导扇区(MBR扇区)。3,boot loader去找 grub,grub读取配置文件grub.conf来决定默认启动项,找到内核(kernel)和驱动(initrd)1).Boot loader:它的主要功能是认识操作系统的文件格式并加载内核到内存中去执行,由于不同的操作系统的文件格式不一致,因此每种操作系统都有自己的bootloader,bootloader分为两个阶段: 执行boot loader加载文件系统驱动 加载真正的配置文件: grub.conf 2). grub.conf里面有内核和驱动的信息。4,内核会主动调用init进程,读取配置文件 /etc/inittab,决定启动级别,运行初始化脚本/etc/rc.d/rc.sysinit,运行相应的启动级别下的脚本 /etc/rc.d/rcN.d/1).vim /etc/inittabid:5:initdefault: //默认的runlevel设置,此处为5 si::sysinit:/etc/rc.d/rc.sysinit //准备系统软件执行的环境的脚本执行文件l0:0:wait:/etc/rc.d/rc 0 //0 - 关机(千万不要把initdefault 设置为0 )l1:1:wait:/etc/rc.d/rc 1 //1 - 单用户模式l2:2:wait:/etc/rc.d/rc 2 //2 - 多用户,但是没有 NFS服务l3:3:wait:/etc/rc.d/rc 3 //3 - 完全多用户模式l4:4:wait:/etc/rc.d/rc 4 //4 - 没有用到(系统保留功能)l5:5:wait:/etc/rc.d/rc 5 //5 - X11(与 3类似,但是加载使用X Window)l6:6:wait:/etc/rc.d/rc 6 //6 - 重新启动 (千万不要把initdefault 设置为6 )ca::ctrlaltdel:/sbin/shutdown -t3 -r now //是否允许按【ctrl】【alt】【del】就重新启动的选项#不断电系统的pf,pr两种机制,一个是没电时的关机,一个是复电的处理pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"#tty1~tty6是由这六行决定的1:2345:respawn:/sbin/mingetty tty12:2345:respawn:/sbin/mingetty tty23:2345:respawn:/sbin/mingetty tty34:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6#启动X window是由这里决定的x:5:respawn:/etc/X11/prefdm -nodaemon2)./etc/rc.d/rc.sysinit作用1.取得网路环境和主机类型2.测试与挂载内存设备/proc及USB设备 /sys3.决定是否启动SELinux4.启动系统的随机数生成器5.用户自定义模块6.加载内核的相关设置7.初始化软件磁盘阵列,lvm8.启动相关信息加载/var/log/dmesg文件中5.依据/etc/inittab 执行/etc/rc.d/rc0~6.d 找到/etc/rc.d/rcN.d/K??*开头的文件,并进行 /etc/rcN.d/K??* stop 的动作 找到/etc/rc.d/rcN.d/S??* 开头的文件,并进行 /etc/rcN.d/S??* start 的动作 如果默认启动是文本开启6个文本控制台 [ALT+F1~F6] 如果默认启动项是图形则开启图形界面以及6个文本控制台 用户自定义的开机启动程序/etc/rc.d/rc.local 6.加载X Window界面,等待用户输入用户名和密码1). 通过/etc/passwd、/etc/shadow验证,如果用户名和密码输入正确读取4个初始化文件:/etc/profile、/etc/bashrc、~/.bashrc、~/.bash_profile文本界面直接开启shell图形界面开启桌面,进入X Window,通过开启终端打开shell 2).系统还会自定义设备与模块对应文件为/etc/modprobe.conf三. 介绍一下grub.conf这个文件#vim /etc/grub.confdefault=0 # 默认的启动项,也就是启动那个title,从0开始计数。timeout=5 #timout=5,就是默认在启动选择界面停留的时间,等待5秒自动进入默认操作系统 splashimage=(hd0,0)/grub/splash.xpm.gz#splashimage是grub启动背景画面,这个可以不要 #hiddenmenu 是隐藏菜单只有按上下键才会出现title Red Hat Enterprise Linux Server (2.6.18-308.el5)#title后面就是系统在启动时候显示的名字 root (hd0,0)#root 指定你内核所在分区。hd0表示第一块硬盘设备。 0表示第一个分区,也是/boot所在的分区kernel /vmlinuz-2.6.18-53.el5 ro root=LABEL=/ rhgb quiet#kernel 内核在哪里;ro 只读;root=LABEL=/ 根分区是谁;rhgb (图形化显示启动过程) ;quiet (静默式启动,不显示dmesg信息)initrd /initrd-2.6.18-53.el5.img#initrd内核镜象的名字#rhgb:表示redhat graphics boot,就是用图片来代替启动过程中显示的文本信息,这些信息在启动后用dmesg可以看到 #quiet:表示在启动过程中只显示要信息,类似硬件自检的消息不回显示四.几个故障修复的例子案例一:1.我们把title下面的三行删掉,然后重启系统,2,重启系统后,会卡在这里,因为修改了grub.conf这个文件,3,这里就需要吧grub.conf里的那三行手动添加进去了,需要指定/boot所在的分区,linux内核,和initrd文件,然后boot启动4,看到红色的Red Hat就证明你的内核加载成功了5,启动成功后再把/etc/grub.conf文件的那三行加回去案例二:1.把/boot/grub/grub.conf删掉,会产生怎样后果? 可以把这个文件备份到其他地方,这样启动后可以把文件恢复回去,运行find /vmlinuz-2.6.18-53el5(可以使用TAB补全),可以搜索vmlinuz所在分区2. 内核成功被加载


(以上内容不代表本站观点。)
---------------------------------
本网站以及域名有仲裁协议。
本網站以及域名有仲裁協議。

2024-Mar-04 02:10pm
栏目列表