AmazingCounters.com

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这个文件

wKiom1UuC_3Sy3NWAACcnxJ9bI0178.jpg

需要把grub.conf里的三行内容手动添加进去,需要指定/boot所在的分区,linux内核,和initrd文件,然后boot启动。

操作无误重启后内核加载成功

 

启动成功后再把/etc/grub.conf文件的那三行内容加回去

 

 

2.把/boot/grub/grub.conf删掉,会怎样呢

可以把这个grub.conf文件备份到其他地方,这样启动后可以把文件恢复回去,也可以用find搜索vmlinuz所在分区.

wKioL1UuD1-i1zOcAAEWRN51QB4361.jpg

3.MBR损坏

#dd if=/dev/zero of=/dev/hda bs=446 count=1 //模拟Boot loader 损坏

#reboot

从光盘启动,在这之前要把镜像挂载上

wKioL1UuEcLyktWEAACaBVJ_dtE492.jpg

选择语言: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目录下)

 

 

 

 

posted @ 2017-09-02 20:08  黑夜繁星  阅读(882)  评论(0编辑  收藏  举报
AmazingCounters.com