LINUX 启动流程
### 系统启动流程
系统组成:内核+根分区文件系统
磁盘分区及相关文件
启动分区 /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
显示的内核来自于/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=<module>: 除了默认的模块之外还需要安装的模块
内核信息输出的文件系统
/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是用户 空间程序
- 点赞
- 收藏
- 关注作者
评论(0)