Linux的启动和关机的流程、引导加载程序
本文为鸟哥中18章笔记
-
18.1 启动流程
- 不能随意关机,多用户的操作系统,关机导致其他在线用户数据丢失
- 后台任务的数据丢失,硬盘损坏
-
启动过程
- 加载bios,获取第一个启动设备的代号
- 读取第一个启动设备的MBR的引导程序grub或lilo的启动信息
- 加载操作系统核心,解压缩、尝试驱动所有硬件设备
- 核心执行init程序并获取运行信息
- init执行/etc/rc.d/rc.sysinit文件
- 启动核心的外挂模块/etc/modprobe.conf
- 执行各个批处理文件
- init执行/etc/rc.d/rc.local文件
- 执行login程序
- 登陆之后shell控制主机
-
引导加载程序与核心载入
- MBR (mater boot record)
- 第一个启动设备是硬盘,硬盘的MBR中安装了 引导加载程序 ,因为系统核心为加载时无法识别文件系统,引导加载程序就是找到系统的核心文件并加载它到主存储中。
- 核心加载过程中,可能会建立initrd虚拟盘RAM disk
- 加载核心之后,开始执行init程序
-
init程序、/etc/inittab与runlevel 运行等级
- init根据/etc/inittab的运行等级启动服务和程序
-
运行等级
- 作用,规定系统启动的服务,让linux的运行环境不同
- 0-halt 直接关机
- 1-single User mode 单用户模式,用于系统出问题的维护,类似windows安全模式
- 2-multi-user ,without nfs 没有nfs服务
- 3-full multi-user mode 完整的网路功能的文本模式
- 4-unused 系统保留
- 5-x11 和3类似但是使用xwindow模式
- 6-reboot 重新启动
- 0、4、6 不能用于默认的启动模式
- 启动模式设置在/etc/inittab文件中,ubuntu不在该文件夹下
- 一般用3、5设置启动等级
- 接下来启动 sysinit
-
init处理系统初始化流程sysinit
- 获取网络环境和主机类型
- 载入内存设备/proc 和usb设备/sys
- 决定是否启动SELinux
- 监测设备和pnp参数测试
- 自定义模块的加载
- 。。。。
- 。。。
- 将启动信息写到dmesg文件
-
启动系统服务 /etc/rc.d/rc3,可以打开看看文件的格式
-
要在运行等级为3时启动某个服务,要将其写入到rc3.d文件中,该文件
- S开头的文件为启动时要启动的服务,K开头的文件为关闭时要关闭的服务
- SK后接的时执行顺序
-
要在运行等级为3时启动某个服务,要将其写入到rc3.d文件中,该文件
-
用户自定义启动程序
- /etc/rc.d/rc.local
- 将脚本的完整文件名写到该文件中,就可以开机自启动
-
切换运行等级
- 运行等级不同启动,结果只是启动了/ect/rc.d/rc[0-6]的文件里的服务不同而已
-
修改运行等级
- 修改默认等级需要修改/etc/initab
-
暂时修改 init [0-6]
-
执行的过程,将如现在是rc3 执行init 5,系统执行的动作有
- 比较rc3与rc5之间的K、S文件不同
- 关闭rc3中启动的而rc5中没有的服务
- 启动rc5中有二rc3中没有启动的服务
-
执行的过程,将如现在是rc3 执行init 5,系统执行的动作有
- 查看当前运行等级 runlevel
- 启动过程中核心 驱动主机的硬件设备
- 核心可以读取驱动程序modules
-
核心和核心模块的位置
- 核心:/boot/vmlinuz,已编译的二进制文件
- 核心的解压缩RAM Disk /boot/initrd,
- 核心modules:/lib/modules,
- 核心源码/usr/src/linux,
- 如果要添加一个新硬件,操作系统不支持,需要重新编译核心
-
核心modules与依赖性
- 核心的文件结构
2. 核心的依赖性保存在 modules.dep文件中
- 使用depmod可以建立该文件
- 将已编译好的驱动程序放到kernel目录的对应文件夹下,执行depmod就可以更新modules.dep文件,核心就能识别该模块
- 查看modules的信息
-
insmod 手动添加模块
- 不会分析模块的依赖性
- rmmod删除模块
-
modprobe处理模块的加载问题
- 该命令直接搜索modules.dep文件的依赖性,更方便
- modprobe modulename
- 在/etc/modprobe.conf
-
MBR的512k不足以安装grub,分阶段安装
- stage1:安装grub的最小主程序,并不加载相关设置文件,主程序安装在MBR或者超级块(分区的第一个扇区)
- stage2:加载引导加载程序的相关设置文件和相关环境参数,一般在/boot
-
-
grub可以完成的功能:
- 指定并取用核心文件,加载到主存储器中
- 将加载任务交给下一个加载程序
-
例如
-
MBR中安装了windows和linux的grub,/dev/hda2/的超级块安装了linux的grub2,核心文件放在该分区/boot/linuz,/dev/hda1安装了windows的grub1,
- mbr可以直接指定核心文件启动
- 可以将起交给grub2启动
- 交给grub1启动
- linux可以将grub的主程序安装在mbr或超级块,windows只能安装在超级块,所以需要先安装windows在安装linux,否则linux的主程序将会被覆盖。
- 但是可以修改
-
MBR中安装了windows和linux的grub,/dev/hda2/的超级块安装了linux的grub2,核心文件放在该分区/boot/linuz,/dev/hda1安装了windows的grub1,
-
忘记root密码
-
以运行等级1进入单用户模式
- 修改/etc/shadow 将root的哪一行的第二个字段去掉,root就没密码了
-
- 使用knoppix工具
-
以运行等级1进入单用户模式
-
设置错误无法进入系统
-
例如磁盘配额错误
- 进入单用户模式 重新载入根目录,
-
没有正常关机
- 进入单用户模式运行fsck修复磁盘
-
例如磁盘配额错误