您的位置:首页 > 运维架构 > Linux

Linux-08-系统开机引导流程

2014-04-13 13:54 232 查看

1.系统引导流程

 

系统启动步骤:

(1) post:power on self test,加电自检。

固件(firmware)被固化在主板上,介于软件和硬件之间。

CMOS是固化在主板上的程序,BIOS是操作CMOS的界面;不同系统的固件平台和进入方法是不同的。

Linux下跟固件相关的常用设置就是设置硬件时钟(hardware clock),通过date命令查看的时钟叫软件时钟。

date:  查看软件时钟

hwclock: 查看硬件时钟

关于不会使用的命令,记得help! hwclock --help或

man  hwclock

 

(2)固件读取成功后,读取MBR:master boot record,位于硬盘的0柱面,0磁头,1扇区。载入MBR中存放的自举程序BootLoader(GRUB): 载入内核

查看grub配置文件: vi  /etc/grub.conf(此处是一个链接文件,真实位于/boot目录下,使用ls /boot可以查看到内核文件)

 kernel /vmlinuz-2.4.20-8 ro root=LABEL=/ hdc=ide-scsi

以上是grub.conf中非常重要的一行,表示内核信息,其中2.4.20-8表示内核的版本号,第一个2表示主版本号,4表示次版本号,20-8表示末版本号,次版本号比较重要,我们可以自己下载Linux内核进行升级,但要注意次版本号,次版本号为奇数时表示内核为测试版,可能不稳定!!!偶数表示为正式版。

 

(3)内核载入后,驱动硬件(内核文件很大,其中很大部分是各种硬件的驱动程序,如果要将Linux内核安装到某个特定的小型设备,可以裁剪内核,只保留该设备需要的驱动程序)

内核文件是一个压缩文件,系统启动时会边解压边载入内核。

 

 

(4)内核启动进程init

init进程是第一个可以存在的进程,它的PID恒为1,但它必须向一个更高级的功能负责:PID为0的内核调度器(Kernel Schedule),从而获取CPU时间。Linux下init进程是所有进程的父进程。利用ps -le | more 命令可以查看到所有进程的PPID是1,即init进程。

 

(5)init进程启动后读取配置文件/etc/inittab文件。

 

 

 

 

2.Linux运行级别

查看当前运行级别: runlevel

切换运行级别:init [0123456Ss]

查看运行级别分类: cat  /etc/inittab

# Default runlevel. The runlevels used by RHS are:

#   0 - halt (Do NOT set initdefault to this)

#   1 - Single user mode

#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)

#   3 - Full multiuser mode

#   4 - unused

#   5 - X11

#   6 - reboot (Do NOT set initdefault to this)

 

man  inittab : 查看系统配置文件的帮助文档(注意:只能这样查看系统配置文件的帮助文档,且不能写绝对路径。)通过此命令可以查看到/etc/inittab的文件格式为:     id:runlevels:action:process

 

/etc/rc.d/rc.sysinit 是一个shell脚本:完成系统服务程序的启动,如系统环境变量设置,设置系统时钟,加载字体,检查加载文件系统,生成系统启动信息日志文件等等。

 

/etc/rc.d 目录下存放的系统脚本很重要,/etc/rc.d/rc[0123456].d存放了对应的运行级别需要启动和关闭的脚本,其中以K(kill)开头的表示不启动,以S(start)开头的表示启动(注意:K  S必须都是大写!)。例如:ls /etc/rc.d/rc3.d可以查看在运行级别3下面需要启动和关闭的脚本程序。例如:对于级别3下的文件 S03vmware-tools是开机自启动的,为了节约内存和cpu资源,我们不希望它自启动,可以将其禁用,cd  /etc/rc.d/rc3.d   ,然后mv   S03vmware-tools  K 03vmware-tools 即可。

 

/etc/rc.d/init.d目录:该目录包含了各个运行级别的服务程序脚本。

要手工启动或关闭服务: /etc/rc.d/init.d/服务脚本名称 ,然后回车,例如:/etc/rc.d/init.d/sshd,回车后会列出使用方法,例如:/etc/rc.d/init.d/sshd  start

Linux详细启动过程及其读取和执行的脚本和配置文件图:

 

 

 

 

 

3.Linux启动服务管理

chkconfig:查看或启动或关闭启动项

ntsysv:图形界面方式添加或删除自启动项

 

 

4.GRUB配置与应用

grub 配置文件:  /boot/grub/grub.conf

使用cat  /etc/grub/grub.conf得到以下内容:

default=0

timeout=10

splashimage=(hd0,0)/grub/splash.xpm.gz

title Red Hat Linux (2.4.20-8)

        root (hd0,0)

        kernel /vmlinuz-2.4.20-8 ro root=LABEL=/ hdc=ide-scsi

        initrd /initrd-2.4.20-8.img

其中,

default 定义缺省启动系统

timeout 定义缺省等待时间

splashimage 定义GRUB界面图片,本项后面的(hd0,0)表示第一块硬盘的第一个分区

hiddenmenu  隐藏菜单

title   定义菜单项名称

root  设置GRUB的根设备(即内核)所在位置

kernel  定义内核所在位置

initrd  命令载入系统所需镜像文件 

(后4项比较重要!)

Grub应用案例:

 

 

 

 

 

 

 

 

通常,在服务器前的任何人都可以进入单用户模式修改root密码,为了避免此种情况,可以上锁机房,不让人接近;另一种方法是给grub设置密码。

 

(图1)生成grub密码(md5)的两种方法

 

图(2)设置grub密码,将其写入配置文件

 

 

 

grub修复主要出现在升级内核出错或者grub的配置文件出错,试验中例如:将/boot/grub/grub.conf中的kernel /vmlinuz-2.4.20-8 ro root=LABEL=/ hdc=ide-scsi 行中的vmlinuz写成了vmlinux,此时手工引导系统(见上图,即将grub.conf重新手工敲写一遍),进入系统后再修改grub配置文件

 

 

 

 

 

 

 

 

对于特别严重的系统错误,致使无法进入到单用户模式和grub修复(例如inittab文件被破坏!试验中可以删除/etc/inittab文件,删除之前先备份!!!),此时可以使用光盘修复(终极修复模式),见下图:

 

 

 

 

 

 

5.启动故障分析与解决

dmesg:查看系统启动日志

例如,想要查看系统启动时是否识别到网卡:

dmesg | grep eth0

想要查看系统启动时是否识别到添加的硬盘(即第二块硬盘):

dmesg | grep sdb

 

系统日志:/var/log/messages

/var/log :存放所有日志文件
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: