linux启动过程及故障处理
一.首先简单看一下系统启动的流程图
二.linux系统启动过程
1,BIOS自检,检测硬件,决定启动介质
BIOS为写入到主板上的一块闪存或EEPROM的程序,它在开机时候执行,并通过BIOS程序去加载CMOS的信息,并通过CMOS内的设置取得主机的各项硬件配置,BIOS程序也可以修改CMOS当中的参数,一般使用Del按键进入BIOS设置界面。
2,从硬盘启动,读硬盘第一个扇区MBR,然后将启动引导工作交给boot loader
MBR引导记录位于物理硬盘的第一块扇区的一段引导代码(第一块扇区512个字节,其中MBR占446字节,分区表占64字节,结束标志占2字节),该扇区又称为主引导扇区(MBR扇区)
3,boot loader去找grub,grub读取配置文件grub.conf,决定默认启动项,找到内核(kernel)和驱动(initrd)
a . Boot loader:认识操作系统的文件格式并加载内核到内存中去执行,由于不同的操作系统的文件格式不一致,因此每种操作系统都有自己的bootloader,bootloader分为两阶: 1、stage1: 执行boot loader加载文件系统驱动
2、stage2:加载真正的配置文件: grub.conf , grub.conf里面有内核和驱动的信息.
4,内核会主动调用init进程,读取配置文件/etc/inittab,决定启动级别,运行初始化脚本/etc/rc.d/rc.sysinit,运行相应的启动级别下的脚本/etc/rc.d/rcN.d/
a. vim /etc/inittab
id:5:initdefault: //默认的runlevel设置,此处为5
# System initialization.
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(图形化界面)
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 tty1
2:2345:respawn:/sbin/mingetty tty2
3:2345:respawn:/sbin/mingetty tty3
4:2345:respawn:/sbin/mingetty tty4
5:2345:respawn:/sbin/mingetty tty5
6:2345:respawn:/sbin/mingetty tty6
#开机启动并进入图形化界面是由这里决定的
id:3:initdefault:
b./etc/rc.d/rc.sysinit作用,简单说明一下
1.取得网路环境和主机类型
2.测试与挂载内存设备/proc及USB设备 /sys
3.决定是否启动SELinux
4.启动系统的随机数生成器
5.用户自定义模块
6.加载内核的相关设置
7.初始化软件磁盘阵列,lvm
8.启动相关信息加载/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.加载图形界面,等待用户输入用户名和密码
a.通过/etc/passwd、/etc/shadow验证,如果用户名和密码输入正确,
读取4个初始化文件:/etc/profile、/etc/bashrc、~/.bashrc、~/.bash_profile
文本界面直接开启shell
图形界面开启桌面,进入X Window,通过开启终端打开shell
b.系统还会自定义设备与模块对应文件为/etc/modprobe.conf
三. 介绍grub.conf文件
#vim /etc/grub.conf(真实文件是/boot/grub/grub.conf)
default=0 # 默认的启动项,也就是启动那个title,从0开始计数。
timeout=5 #就是默认在启动选择界面停留的时间,等待5秒自动进入默认操作系统
splashimage=(hd0,0)/grub/splash.xpm.gz #splashimage是grub启动背景画面,这个可以不要。
hiddenmenu #hiddenmenu 是隐藏菜单只有按上下键才会出现
title CentOS 6 (2.6.32-696.el6.x86_64) #title后面就是系统在启动时显示的名字
root (hd0,0) #root指定你内核所在分区。hd0表示第一块硬盘设备。0表示第一个分区,也是/boot所在分区
kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=8764939d-68d9-44a9-b1ea-c976a1568641 rd_NO_LUKS rd_NO_LVM LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet #kernel 内核在哪里;ro 只读;root=LABEL=/ 用于指定根分区是谁;rhgb (图形化显示启动过程) ;quiet (静默式启动,不显示dmesg信息)
initrd /initramfs-2.6.32-696.el6.x86_64.img #initrd内核镜象的名字
四,下面是几个故障修复的例子
1.把title下面的三行删掉,然后重启系统
重启系统后,会卡在这里,因为修改了grub.conf这个文件
需要把grub.conf里的三行内容手动添加进去,需要指定/boot所在的分区,linux内核,和initrd文件,然后boot启动。
操作无误重启后内核加载成功
启动成功后再把/etc/grub.conf文件的那三行内容加回去
2.把/boot/grub/grub.conf删掉,会怎样呢
可以把这个grub.conf文件备份到其他地方,这样启动后可以把文件恢复回去,也可以用find搜索vmlinuz所在分区.
3.MBR损坏
#dd if=/dev/zero of=/dev/hda bs=446 count=1 //模拟Boot loader 损坏
#reboot
从光盘启动,在这之前要把镜像挂载上
选择语言:enginsh-----选择美式键盘----对网络接口选择no----对挂载以前的操作系统选择continue-----进入救援模式操作
4.把/boot/下的内容删了再试一下
同样使用光盘启动,进入linux rescue模式,查看一下/boot下什么都没有了
光盘挂上,然后安装kernel
内核安装完,还需要安装grub
没有grub.conf文件,手动添加进去,然后重启系统
内核加载成功
5.如果boot分区删了(前提是df可以看到/dev/hda1是boot分区记录),也可以恢复。
光盘进入到救援模式后,把那个boot分区添加回去,按照上面安装内核和grub就可以启动系统了,添加grub.conf文件。
注:如果重启后出现fsck.ext4: Unable to resolve 'LABEL=boot',重新进入救援模式
解决方法:# e2label /dev/sda1 /boot #e2label可以给分区加上label
6.系统超级用户root密码破解
开机的时候进入Centos的画面按Esc----按键盘的"e"键,出现下面界面:
用键盘上的方向键移动光标至第二项,然后再按“e”键,会出现下面界面:
先输入一个空格键,然后再输入数字1,按回车;或者输入空格键,再输入single,按回车。然后会出现下面界面:
按键盘的“b”键,重启系统,然后就进入单用户模式了,进入系统后输入#passwd root,就可以重新更改root密码了,然后重启系统就Ok了
7.硬盘扇区错乱
在启动过程中最容易遇到的问题就是硬盘有坏道或扇区错乱(数据损坏)情况,这种情况多由于异常断电、不正常关机导致。
此种问题发生,在系统启动的时候,屏幕会显示:
Press root password or ctrl+D:
此时输入root密码系统自动进入单用户模式,输入“fsck -y /dev/sda6”(fsck为文件系统检测修复命令,“-y”设定检测到错误自动修复,/dev/sda6为发生错误的硬盘分区,请依据具体情况更改此参数),系统修复完成后,用命令“reboot”重新启动即可。
8.系统配置文件丢失修复
系统在引导期间,很重要过程就是init进程读取其配置文件/etc/inittab,启动系统基本服务程序及默认运行级别的服务程序完成系统引导,如果/etc/inittab误删除或修改错误,Linux将无法正常启动此时,只有通过 救援模式解决。
1、有备份文件的恢复办法
进入救援模式,执行chroot命令后,如果有此文件的备份(强烈建议系统中的重要数据目录,如/etc、/boot等要进行备份),
直接将备份文件拷贝回去,退出重启即可。如果是配置文件修改错误,如比较典型的/boot/grub/grub.conf及 /etc/passwd的文件修改错误,也可以直接修正恢复。
注意:拷贝前需要先切根,另外也可以通过scp等网络传送备份或相同文件。
2、没有备份文件的恢复办法
如果一些配置文件丢失或软件误删除,且无备份,可以通过重新安装软件包来恢复,首先查找到/etc/inittab属于哪一个RPM包(即便文件丢失,因为存在RPM数据库,一样可以查找到结果):
挂载存放RPM包的安装光盘(在救援模式下,光盘通常挂载在/mnt/source目录下)