LINUX 启动流程

网友投稿 874 2022-05-28

### 系统启动流程

系统组成:内核+根分区文件系统

磁盘分区及相关文件

启动分区  /boot

内核设计流派

单内核设计: 把所有功能集成于同一个程序

linux

微内核设计:每种功能使用一个单独的子系统实现

Windows,Solaris

Linux 内核特点

支持模块化:

支持模块运行时动态装载或者卸载

内核组成

核心文件: /boot/vminuz-VERSEION-Release

模块文件: /lib/modules/

ramdisk: 临时内存根文件

CentOS 系统的启动流程

POST: '加电自检'

ROM: CMOS

BIOS: Basic Input and output system

Boot Sequence:

按次序查找各引导设备、第一个有引导程序的设备、为本次启动要用的设备

bootloader: 引导加载器、程序

Winodws: ntloader

Linux:

LILO: Linux Loader --- 无法加载大硬盘  (目前手机使用最多)

GRUB: Grand Uniform Bootloader

GRUB 0.X ---CentOS5/6  Grub Legay

GRUB 1.X ---CentOS7  (是一个完全重写的程序 )  GRUB2

功能:提供一个菜单、允许用户选择要启动的系统或不同的内核版本、把用户选定的内核 装载到RAM中的特定空间中、解压,展开。而把整个系统的控制权移交给内核

MBR: Master Boot Record

512 bytes:

446 bytes: bootloader

64bytes: fat

2bytes: 55AA(表示有效、如果是非55AA则表示MBR无效)

GRUB:

bootloader : 1st stage

Pattion: filesystem driver 1.5 stage

disk partition: /boot/grub 2nd stage

加载Kernel

自身初始化:

探测可以识别到的所有硬件设备:

加载硬件驱动程序(会借且于randisk加载驱动)

以只读方式挂载根文件系统

运行用户空间的第一个应用程序

:/sbin/init

CentOS5 使用 Sysv init

配置文件:/etc/inittab

CentOS6 使用 Upstar

配置文件: /etc/inittab

重要配置在 /etc/init/*.conf

CentOS7 使用 Systemd

配置文件: /usr/lib/systemd/

/etc/systemd/system/

ramdisk

Linux 内核的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问

CentOS 5 : initrd

工具:mkinitrd

CentOS6/7 :initramfs

工具:dracut(mkinitrd)

系统初始化流程(内核级别),POST---> BootSequence(BIOS)---->bootloader(MBR) ---->Kernel(ramdisk)---> rootfs(readonly)----->/sbin/init()

/sbin/init

CentOS5 : Sysv init

运行级别:为了系统的运行或者维护等目的而设定的机制

0-6 : 7个级别

0: 关机

1: 单用户模式(single user) root 账号,不需要认证、维护模式

2: 多用户模式,会启动网络功能、但不会启动nfs,维护模式

3: 多用户模式,完整功能模式、(不会启动用图形)

4: 预留级别、目前无特殊使用目的、功能和3级别一样

5: 多用户模式,完全功能模式、图形界面

6: 重启模式

~]# runlevel (查看目前运行的级别)

配置文件: /etc/inittab

每行定义一种action以及与之对应的process

id:runlevels:action:process

id:一个任务的标识符

runlevel: 运行级别或以写多个、空表示所有级别

action: 在什么条件下启动此任务

process: 具体的任务是

action

wait: 等待切换至此余男所在的级别时执行一次

respawn: 一旦任务终止、就自动重启

initdefault: 设定默认运行级别、此时process省略

sysinit: 系统初始化方式、此处一身孕为指定/etc/rc.d/rc.sysinit脚本

示例:

id:3:initdefault:

si::sysinit:/etc/rc.d/rc.sysinit

L:0:wait:/etc/rc.d/rc 3

意味着去启动或者关闭/etc/rc.d/rc3.d/目录下服务脚本所控制服务

K*: 要停止的服务 K##*,优先级、数字越小、越是优先关闭,依赖的服务先关闭、而后关闭被依赖的

S*: 要启动的服务 S##*,优先级、数字越小、与关闭的顺序相反

系统初始化脚本:/etc/rc.d/rc.sysinit

1: 设置主机名

2:设置欢迎信息

3:激活udev和selinux

4: 挂载/etc/fstab文件中定义的所有文件系统

5:检测根文件系统、并以读写文件重新挂载根文件系统

6:设置系统时钟

7:根据/etc/sysctl.conf文件来设置内核参数

8: 激活lvm及软raid设备

9: 激活swap设置

10: 加载额外设备的驱动程序

11:清理操作

用户空间启动流程:(/sbin/init(/etc/inittab))

设置默认运行级别 ---> 运行系统初始化脚本 、完成系统初始化 ---> 关闭对应级别下需要停止的服务,启动对应级别下需要开开启的服务 ---> 设置登陆终端 ---> 启动图形终端

### Grub

如果识别设备

(hd#,#)

hd# : 磁盘编号

#: 分区编号

grub的命令行接口

help: 获取帮助

find: 查找文件

root (hd#,#): 定义根设备

kernel /PATH/TO/Kernel_file: 设定本次启动时用到的内核文件

initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核 提供的额外的文件的randisk

boot: 引导启动选择的内核

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

配置项:

default=#: 设定默认启动的菜单藏在

timeout=#: 指定菜单等待的选择时长

splashimge=(hd#,#)/PATH/TO/XPM_PIC_FILE: 指明菜单背景图片文件路径

hiddenmenu:隐藏菜单

passwdord [--md5] STRING:菜单编辑认证

title TITLE: 定义菜单项”标题“

root (hd#,#): grub查找stage2 及kernel文件所在设备分区;为grub的根

kernel /PATH/TO/VMLINUX_FIEL  [Patterns] : 启动的内核

initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件

password [--md5] STRING:启动选定的内核或操作系统时进行谁

~]#grub-md5-crypt 密码生成(md5)

进入单用户模式

1: 编辑grub菜单(e命令)

2: 在选定的kernel后、附加

1,s,S,single

3: 在kernel所在行、键入'b'命令

如何安装grub

~]# grub-install --root-direcotry=ROOT  /dev/DISK

方案二

~]# grub

grub> root(hd#,#)

grub> setup(hd#)

### 流程

POST --> bootloader ---> kernel ---> rootfs ---> switchroot ---> /sbin/init

内核信息查看

uname

-r : release号

-n : hostname

lsmod

LINUX 启动流程

显示的内核来自于/proc/model

modinfo

show info about a linux kernel module

-F field: 只显示指定字段信息

-n :只显示文本

modprobe

模块装载

modprobe -r module_name  ---remove

modprobe module_name

depmod

模块生成依赖

insmod

install module

insmod [filename] []

rmmod

remove module

ramdisk 文件管理

mkinitrd

dracut

~]#mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

--with=: 除了默认的模块之外还需要安装的模块

内核信息输出的文件系统

/proc: 内核状态和统计信息的输出接口、同时还提供一个配置接口/proc/sys

参数:

只读:信息输出 /proc/#/*

可写:配置 /proc/sys/

命令:

sysctl 命令 ---> 专用于查看或者设定/proc/sys目录中的值

sysctl [options] [variable [=value]]

查看

~]# sysctl -a

~]# sysctl variable

修改

~]# sysctl -w variable=value

echo 命令

查看

~]# cat /proc/sys/PATH/TO/SOMEFILE

修改

~]# echo "value" /proc/sys/PATH/TO

配置文件

/etc/sysctl.conf  /etc/sysctl.d/*.conf

永久有效

立即生效  sysctl -p key:value

核心参数:

net.ipv4.ip_forward: 核心转发

vm.drop_cache :手动回收 buffer

kernel.hostname: 主机名

net.ipv4.icmp_echo_ignore_all: 忽略所有ping

/sys/

sysfs: 输出内核各硬件设备的相关属性信息

也有内核对硬件特性可设置的信息

udev: 通过读取/sys目录下的硬件设备信息按需为各硬件设备 创建文件、:udev是用户 空间程序

kernel Linux

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:MySQL查询优化
下一篇:51开发板开发计算器程序
相关文章