目录
  1. 1. 1、linux的启动流程
  2. 2. 2、BIOS,boot loader,kernel加载
  3. 3. 3、第一个进程init及配置文件/etc/inittab与runlevel
  4. 4. 4、init处理系统初始化流程(/etc/rc.d/rc.sysinit)
    1. 4.1. 主要工作:
  5. 5. 5、启动系统服务与相关的启动配置文件(/etc/rc.d/rc(n)& /etc/sysconfig)
  6. 6. 6、启动中需要的配置文件
  7. 7. 7、内核与内核模块
    1. 7.1. 位置:
    2. 7.2. 内核模块与依赖性:
    3. 7.3. 查看内核模块
    4. 7.4. 加载与删除
  8. 8. 8、grub
  9. 9. 9、Initrd,创建initrd文件
  10. 10. 10、测试与安装grub
    1. 10.1. 安装步骤:
    2. 10.2. grub菜单加密:
  11. 11. 11、启动过程问题解决
学习Linux-启动流程

1、linux的启动流程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
加载BIOS的硬件信息与进行自我测试,依据设置取得第一个可启动的设备
-->
读取并执行第一个启动设备内MBR的boot loader(即是grub,spfdisk等)
-->
依据boot loader的设置加载kernel,kernel开始检测硬件与加载驱动程序
-->
主动调用init进程,init取得run-level(运行程序优先级)信息
-->
init执行/etc/rc.d/rc.sysinit文件准备软件执行的操作环境
-->
init执行run-level的各个服务启动(scripts)
-->
init执行/etc/rc.d/rc.local文件
-->
init执行终端机模拟程序mingetty进程,最后等待用户登录

2、BIOS,boot loader,kernel加载

1
2
3
4
5
6
7
8
9
BIOS,MBR:开机时,系统自动加载BIOS,并通过BIOS加载CMOS,取得各个硬件配置,之后BIOS进行开机自检,执行硬件检测初始化,,配置PnP设备,定义启动顺序,进行启动设备数据读取。
BIOS通过硬件的INT13检测磁盘,读取MBR。
Boot Loader引导加载程序:包含在MBR中,认识操作系统文件格式,加载内核文件 -->linux的boot loader是grub
功能:提供菜单,加载内核文件,转交其他loader.
注:每个文件系统都会有一个引导扇区提供操作系统安装boot loader。
安装双系统问题:windows的loader不具有控制权转交功能,因此只能先装windows再装linux。
boot loader加载内核检测硬件与initrd功能
linux内核文件放在/boot中,而其他的linux启动不需要的附加内核(附加的驱动程序)放在/lib/modules/目录类,并且被编译为模块。
虚拟文件系统:放在/boot/initrd,能够通过boot loader来被加载,并被激活,如果boot loader不能顺利挂载根目录,initrd就会被解压缩启动,并且在内存中仿真一个根目录,且仿真的文件系统能提供一个可执行程序来加载启动需要的内核模块,,帮助内核重新调用/sbin/init开始后续的启动流程,从而正常启动系统。

3、第一个进程init及配置文件/etc/inittab与runlevel

1
2
3
4
5
6
7
8
run-level:执行等级
0 --> halt
1--> 单用户维护模式
2 --> 类似纯文本模式,但是无NFS服务
3 --> 纯文本模式 ,
4 --> 系统保留功能 ,
5 --> X11 ,
6 --> reboot

4、init处理系统初始化流程(/etc/rc.d/rc.sysinit)

主要工作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1、取得网络环境与主机类型
2、测试与挂载内存设备/proc及USB设备/sys
3、是否启动SElinux
4、启动系统随机数生成器(进行密码加密演算)
5、设置终端机字体
6、设置启动过程中的欢迎画面
7、设置系统时间与时区,读取/etc/sysconfig/clock
8、接口设备的检测与Plug and Play(PnP)参数的设置
9、用户自定义模块加载
10、加载内核相关设置
11、设置主机名与初始化电源管理模块
12、初始化软件磁盘阵列
13、初始化LVM文件系统功能
14、fsck检查磁盘文件系统
15、进行磁盘配额的转换
16、重新以可读写模式挂载系统磁盘
17、启动quota功能
18、启动系统伪随机数生成器
19、清除临时文件
20、将启动相关信息加载到/var/log/dmesg中

5、启动系统服务与相关的启动配置文件(/etc/rc.d/rc(n)& /etc/sysconfig)

1
2
3
4
/etc/rc.d/rc\*:K开头的文件是表示stop,S开头的文件表示start,其后数字表示启动顺序
注:都是连接文件
用户自定义开机程序:/etc/rc.d/rc.local中包括的完整文件名
在/etc/inittab内的mingetty是启动终端机的命令

6、启动中需要的配置文件

1
2
3
4
5
/etc/modprode.conf:指定系统内硬件所使用的模块
/etc/sysconfig/:启动中读取的相关服务配置文件,authconfig,设置用户身份认证机制;clock,设置时区,/usr/share/zoneinfo/Asia/ShangHai复制到/etc/localtime;i18n,设置语系;keyboard&mouse,键盘,鼠标形式;so on...
run-level切换
runlevel:展现当前runlevel
init:切换命令

7、内核与内核模块

位置:

1
2
3
4
5
6
内核:/boot/vmlinuz or /boot/vmlinuz-version
内核解压缩所需RAMDisk:/boot/initrd(/boot/initrd-version)
内核模块:/lib/modules/version/kernel or /lib/modules/$(uname -r)/kernel
内核源码;/usr/src/linux or /usr/src/kernels
内核版本:/proc/sys/kernel
系统内核功能:/proc/sys/kernel

内核模块与依赖性:

1
depmod -Ane:创建modules.dep,记录内核支持的模块的各项依赖性

查看内核模块

1
2
lsmod:模块名称,模块大小,模块是否被其他模块所用
modinfo -a(author)d(description)i(license)n(详细路径) 模块名称

加载与删除

1
2
3
4
insmod /lib/modules/$(uname -r) 文件路径 // 加载模块  //不主动分析依赖性
rmmod -f(强制)w(完结后) 模块名
modprode -1cfr //主动分析依懒性
/etc/modprode.conf

8、grub

1
2
3
4
5
6
boot loader 的程序代码执行与设置值加载分成两个阶段
stage1:执行boot loader主程序,最小主程序安装在启动区
stage2:主程序加载配置文件,配置文件都放在/boot中
grub配置文件:/boot/grub/menu.lst
硬盘在grub的代号从0开始,例如,第一块硬盘,(hd0),(hd0,1),(hd0,2)
chain loader转交控制权:编辑/boot/grub/menu.lst,将第一个启动的系统设置为使用hd0分区,读取第一个硬盘分区。

9、Initrd,创建initrd文件

1
mkinitrd -v --with=模块名称 initrd文件名 内核版本 :重制initrd文件

10、测试与安装grub

1
如果机器没有安装grub,可以尝试安装一个

安装步骤:

1
2
3
4
5
1、grub-install [--root-dirrctory=DIR](安装实际目录) INSTALL_DEVICE(安装设备)
2、创建配置文件:vim /boot/grub/menu.lst
3、grub shell命令:root (hdx,x):选择含有grub目录的分区代号;find /boot/grub/stage1:寻找安装信息;find /boot/vmlinuz:寻找内核;setup (hdx,x)安装grub于boot loader or MBR中;quit 离开。
vga是屏幕分辨率,改变分辨率必须支持framebuffer_console(大写)这个内核功能参数
BIOS无法读取大硬盘问题:新建/boot分区,并放在最前面

grub菜单加密:

1
2
3
1、grub-md5-crypt:产生md5密文;
2、vim /boot/grub/menu.lst,将产生的密文以password --md5 密文 格式加入title,每加入一个title,加密一个title.
3、整体设置,将密文放在最开始的全局设置 password --md5 密文

11、启动过程问题解决

1
2
3
4
5
忘记root密码:重新启动,进入grub,e编辑,进入单用户维护模式,修改passwd。
init配置文件错误:进入grub,改用bash;mount -o remount、rw / 将根目录重新挂载为可读写 mount -a;reboot
BIOS磁盘对用问题:磁盘代号对应错误,致使紊乱,grub-install --recheck /dev/sda1:主动跟新device.map
因文件系统错误而无法启动:fsck,检查系统错误并解决坏块,reboot
利用chroot切换到另一个磁盘:暂时将根目录移到其他磁盘挂载,并解决问题
文章作者: rack-leen
文章链接: http://yoursite.com/2019/04/20/Linux/%E9%B8%9F%E5%93%A5%E7%9A%84Linux%E7%A7%81%E6%88%BF%E8%8F%9C%E7%AC%94%E8%AE%B0/%E5%AD%A6%E4%B9%A0Linux-%E5%90%AF%E5%8A%A8%E6%B5%81%E7%A8%8B/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 rack-leen's blog
打赏
  • 微信
  • 支付宝

评论