五、linux引导流程解析
linux引导流程以前没有接触过,这次记录的详细点~
目标:
1、linux从启动电源到正常登陆,中间经历了哪些引导步骤。--linux引导流程
了解linux无法正常启动时,应该怎么排查错误。
2、linux的运行级别,运行级别的切换。
3、linux启动服务管理,查看linux的某一个服务是否启动,怎么启动linux服务
4、自举程序GRUB的配置与应用
5、启动故障与解决
一、系统引导流程
固件:firmware ,介于软件和硬件之间的应用。例如:CMOS/BIOS。在硬件的层面上检查所有的硬件是否正常。
不同的应用平台的固件并不相同。CMOS是固化在主板上的程序,BIOS是操作CMOS的管理控制界面
常用固件设置:
安全设置
可引导介质列表
可引导介质搜索顺序
电源管理
启动细节显示
固件时钟—hwclock hwclock –-hctosys 同步硬件时钟到软件时钟
--systohc 同步软件时钟到硬件时钟
软件时钟—date
MBR:master boot record 主引导记录,在0柱面0磁头1扇区。固件检测完成后跳转到MBR中读取记录,读取自举程序(BootLoader),linux中应用的bootloader有GRUB、lila、spfdisk
GRUB:配置信息grub.conf,其中最重要的信息是指定linux内核所在的位置。最重要的作用就是载入内核
内核:kernel,是一个可执行的文件, vmlinuz-3.5.0-17-generic,5为中间版本号,此号码若为偶数为正式版,为基数为测试版。内核的作用为:驱动硬件、启动进程init。
init:init进程启动后读取inittab文件,执行缺省运行级别,从而继续引导过程。在unix系统中init是第一个可以存在的进程,它的PID恒为1,但它也必须向一个更高的功能负责:PID为0的内核调度器(kernel scheduler),从而获得cpu时间。
执行配置文件/etc/inittab:在red hat系列的linux中存在这个文件,但是在debian 系衍生出来的linux 一向是没有使用/etc/inittab 作为登入状态文档来使用的,可以自己建立一个。因为从/etc/event.d/中的rc-default文件中代码可以看出:
script runlevel --reboot || true if grep -q -w -- "-s\|single\|S" /proc/cmdline; then telinit S elif [ -r /etc/inittab ]; then RL="$(sed -n -e "/^id:[0-9]*:initdefault:/{s/^id://;s/:.*//;p}" /etc/inittab || true)" if [ -n "$RL" ]; then telinit $RL else telinit 2 fi else telinit 2 fi end script
系统会首先搜寻inittab文件,如果不存在,那么将运行在2级别上。所以你可以自己建个inittab文件,或者把相应的telinit 2 改为 telinit X(你想要运行的级别)。
linux的运行级别:
0:halt
1:single user mode,没有图形界面,只有root可进入
2:Muliuser,without NFS
3:Full multiuser mode
4:unsued
5:x11---x windows 缩写为x,11为版本号
6:reboot
runlevel 查看当前启动级别
init [0123456Ss]或telinit[0123456Ss] 切换启动级别
注:Debian系(包括Ubuntu)的runlevel和RH系差别很大,没有rh系分的那么细。2是多用户模式。3,4,5和2一样。需要退出X,可以使用sudo pkill gdm
inittab文件剖析
在inittab中所有条目采取以下格式:
id:run-levels:action:process
id:标识符,一般为两位字母或数字
run-levels:指定运行级别,可以指定多个(若为空则全部执行,若是123,则在运行级别123都执行)
action:指定运行状态
process:指定要运行的脚本/命令
action常用取值:
initdefault:指定系统缺省启动的运行级别
sysinit:系统启动执行process中指定的命令
wait:执行process中指定的命令,并等其结束后再运行其他命令
once:执行process中指定的命令,不等待其结束
ctrlaltdel:按下Ctrl+Alt+Del时执行process指定的命令
powerfail:当出现电源错误时执行process指定的命令,不等待其结束
powerokwait:当电源恢复时执行process指定的命令
respawn:一旦process指定的命令终止,便重新运行该命令
脚本:/etc/rc.d/rc.sysinit 启动此脚本,完成系统服务程序启动,如系统环境变量设置、设置系统时钟、加载字体、检查加载文件系统、生成系统启动信息日志文件等。
/etc/rc.d/rc[0123456].d分别存放对应于运行级别的服务程序脚本的符号链接,链接到init.d目录中的相应脚本。此目录中K(kill)开头的为不启动的脚本,S(start)开头的为启动的脚本。名称中数字为启动顺序。
系统中所有的服务在/etc/init.d目录中存放
设置自启动程序方式
1、生成软链接 ln –s ,首先在/etc/rc.d/init.d中添加脚本程序,在/etc/rc.d/rcN.d目录中添加以S开头命名的软链接
2、将/etc/rc.d/rcN.d中的相应程序改名
3、chkconfig命令
4、ntsysv命令
fileware –BootLoader—kernel—init—/etc/inittab—initdefault—/etc/rc.d/rc.sysinit—/etc/rc.d/rc—/etc/rc.d/rcN.d
小知识:
查看文件排除以“#”开头的行
grep –v “^#” /etc/inittab | more
linux 中所有的日志文件都存放在/var/log目录中