12 linux引导流程解析
12.1 linux引导流程
常见的固件设置
安全设置
可引导介质列表
可引导介质搜索顺序
电源管理
启动细节
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
固件时钟:hwclock (hardware clock),
软件时钟:date 有时两者是不同的,这时,可以用命令进行同步,具体命令见 hwclock --help
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
内核 (kernel) : 其中主要的是硬件的驱动程序,其次是启动进程init。
Init的工作:
init启动后,读取initab文件,执行缺省运行级别,从而继续引导过程。在Unix中,init是第一个可以存在的进程,他的PID很为1,但他也必须向一个更高级别的功能负责:PPID=0的内核调度器(Kernel scheduler),从而获得CPU时间。
12.2 运行级别:
0 halt (do not set initdafault to this) 关机
1 signal user mode 没有图像界面,只能root登陆
2 Multiuser, without NFS (the same as 3, if youdo not have networking)
3 Full multiuser mode 2和3 是常用的服务器运行模式
4 unused 没有使用的运行级别 (可以自己定义该运行级别)
5 X11 系统缺省的运行级别(普通登录的用户界面)
6 reboot (do not set initdefault to this) 系统重启
查看当前的运行级别: runlevel
N 3 (没有切换过,当前是3的运行级别)
S 3 (切换了运行级别,当前是3的运行级别)
运行级别的切换: init 1 切换到运行级别 1
12.3 inittab文件的剖析
文件在 /etc/inittable
所有的条目均采用以下格式:
id :runlevel :action : process
id :表示符,一般为2位置吗或数字
runlevel :指定运行级别,可以指定多个。如果是空的,即在所有级别执行
action :指定运行状态
process:指定要运行的脚本/命令
action 常用取值
initdefault:自动系统缺省启动的运行级别
sysinit :系统启动执行process中指定的命令
wait :执行process中指定的命令,并等其结束再运行其他命令
once:执行process中指定的命令,不等待其结束
ctrlaltdel:按下Ctrl+Alt+Del时,执行process中指定的命令
powerfail :当出现电源错误时,执行process中指定的命令,不等待其结果
powerokwait:当电源恢复时,执行process中指定的命令
respawn:一旦process指定的命令中止,便重新运行该程序
查看文件内容:
# vi /etc/inittable
- # 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)
- #
- id:5:initdefault:
- # System initialization.
- si::sysinit:/etc/rc.d/rc.sysinit
- l0:0:wait:/etc/rc.d/rc 0
- l1:1:wait:/etc/rc.d/rc 1
- l2:2:wait:/etc/rc.d/rc 2
- l3:3:wait:/etc/rc.d/rc 3
注意:
1、id:5:initdefault: 指定系统默认运行级别为5
2、 # System initialization.si::sysinit:/etc/rc.d/rc.sysinit
启动脚本/etc/rc.d/rc.sysinit,完成系统服务程序启动,如系统环境变量设置,设置系统时钟,加载字体,检测加载文件系统,生成系统启动信息日子文件等。只要系统启动都会执行/etc/rc.d/rc.sysinit这个脚本,如果想执行某个操作,则可以在/etc/rc.d/rc.sysinit的末尾后面添加脚本代码,这样每次系统启动就会自动执行脚本了
3、
- l0:0:wait:/etc/rc.d/rc 0
- l1:1:wait:/etc/rc.d/rc 1
- l2:2:wait:/etc/rc.d/rc 2
- l3:3:wait:/etc/rc.d/rc 3
/etc/rc.d/rc的作用是判断默认运行级别,调用相应的/etc/rc.d/rc num脚本,执行相应运行级别目录中的服务程序,完成相应运行级别的初始化设置
/etc/rc.d/init.d 目录下包含各个运行级别的服务脚本。
/etc/rc.d/rc n.d : 存放对应于运行 n 级别的服务程序脚本的符合链接,链接到inint.d目录中的相应脚本
S表示start,表示在此运行级别要启动,K表示不启动 数字表示启动的顺序,数字越小越优先启动,最后一部分是脚本的名称
12.4 如何设置自启动程序
ln -s
% 生成软连接 将想执行的脚本以软连接的方式存放在某个运行级别的启动脚本文件夹里,保存并以S (start)开头的文件
例如 ls -s my.script /etc/rc.d/rc3.d/S100msg.scropt %将 my.script 在运行级别3下开机运行。
chkconfig
ntsysv
12.5 相关命令与日志
运行dmesg检查引导期间的错误
检查系统日志 /var/log/messages。,查找可能被dmesg忽略的应用程序错误
12.6 GRUB配置与应用
GRUB的配置文件默认为
/boot/grub/grub.conf
# ls -l /etc/grub.conf
GRUB的配置选项
default 定义缺省启动系统
timeout 定义缺省等待时间
splashimage 定义GRUB界面图片
hiddenmenu 隐藏菜单
title 定义菜单项名称
root 设置GRUB的根设备--即内核所在的分区
kernel 定义内核文件所在位置
initrd 命令加载镜像文件
GRUB 命令
功能键:
e: 编辑当前的启动菜单项
c: 进入GRUB的命令行方式
b: 启动当前的菜单项
d:删除当前行
Esc: 返回GRUB启动菜单界面,取消对当前菜单项所做的任何修改。
单用户模式应用
案例: root 密码忘记
进入单用户模式重新设置root密码,方法如下:开机进入GRUB界面,按e进入编辑模式,选中kernel行,再次按e键,在新的界面的最后一行输入“空格+1”或“空格+s“,接着回车,再根据说明按b,即可进入单用户模式。在单用户模式下,是不必须要root密码的。然后在命令行输入 passwd root, 再输入密码即可。
(通过所属说明,任何一台电脑都可以通过这种方式获得电脑上的权限和信息,的却是这样,window也是一样,任何一个操作系统都一样,不过我们可以在GRUB设置一个密码。方法如下:)
设置GRUB密码
1 使用GRUB自带的grub-md5-crypt 命令
# grub-md5-crypt
Password :
$$$$$$$$$$$$$$(这个密文是使用我们的密码生成的密文,将这个密文复制后,推出grub,进入编辑/etc/grub.conf,在hiddenmenu后面加上:password --md5 $$$$$$$$$$$$$$)
2 在GRUB交互命令界面中使用md5crypt命令
# grub
grub>md5crypt
Password
$$$$$$$$$$$$$$(这个密文是使用我们的密码生成的密文,将这个密文复制后,推出grub,进入编辑/etc/grub.conf,在hiddenmenu后面加上:password --md5 $$$$$$$$$$$$$$)
这是重启再进入GRUB中,看说明,按p 弹出输入密码位置。
GRUB修复
解决过程:
1.把安装盘放到光驱,然后重新启动机器,观察提示说明,按F2进入BOIS的setup中,找Boot选项中,设置为CD-ROM引导,把系统用光驱来引导。
2.等安装界面出来后,观察提示说明,按F5键,也就是linux rescue模式。然后在boot下输入 linux rescue,然后回车一下。按照提示执行查找相关错误。
Linux有6种终端,按ctrl+alt+F1-F6可以在不同的终端切换,按ctrl+alt+F7是切换到图形终端,如果在虚拟机里面是切换不了的,因为键位设置有冲突,要在vmware里面更改键位设置才行
图(一)系统引导流程
Firmware
|
Bootloader
|
Kernel
|
Init
|
/etc/inittab
|
Initdefault
|
/etc/rc.d/rc.sysinit
|
/etc/rc.d/rc
|
/etc/rc.d/rcN.d (N=0-6)
|
Username password