开机流程
centos 5和6版本
开机流程
kernel==>rootfs(根文件系统)
首先内核启动,然后加载根文件系统,然后启动init(第一个文件系统)它负责所有的程序的启动、管理、调用、删除等(这一切是运行在用户空间的)。
“`
kernel:进程管理
内存管理
网络管理
驱动程序
文件系统
安全功能
rootfs:
glibc
“`
库:从本质来说是函数的合集
库文件是二进制程序,但是没有执行入口,只能被别的程序调用
库分为
(1)有返回值的 (2)没有返回值
头文件:表明了库、函数的调用参数、个数、类型等等
LINUX内核的组成部分
核心文件
(1) /boot/vmlinuz-VERSION-release
内核模块在()内核模块文件名与内核版本必须同步
(2) /lib/moudles/VERSION-release
下面放着内核相关的元数据
(3)ramdisk(根切换的文件下方有详细解释)
5版本) /boot/initrd-VERSION-release.img
6版本) /boot/initramfs-VERSION-release.img
在开机时内核需要去寻找文件系统,文件系统在磁盘中,磁盘需要内核装在模块,模块又在根,进而形成了一个死循环
所以需要有一个虚拟根文件系统挂载上磁盘模块,挂上硬盘需要的文件系统。(根切换)
启动流程:
1)加电自检(POST):当你按下电源,主机自动检查各种硬件是否存在并完好
ROM
CMOS:加电是能够进行
BIOS:基本输入输出系统
当我们开机以后主机激活cpu,cpu会传递第一条指令(唤醒指令),然后会传给某 ROM 空间中的特定地址,然后cpu会执行地址中的给定的自检的指令完成自检
2)boot Sequence(引导加载次序也就是BIOS):按次序查找各引导设备,找到第一个有操作系统(能够读取mbr引导)的方式就是本次启动程序所用的设备
3)bootloader:引导加载器
GRUB:
(GRand Unified Bootloader)
LINUX的引导加载器(它也可以加载WIN)
以硬盘为例 是放在MBR中
bootloader:446字节
磁盘分区表 :64字节
55a : 2字节(记录bootloader是否有效的)
提供一个菜单,允许用户选择要启动的系统或不同版本的内核版本,把用户选定的内核装在到内存中特定空间中,解压展开,之后将整个系统的控制权移交给内核
GRUB:
BootLoader:1阶段,位于mbr中。主要目的是找到硬盘之上的第二阶段
1.5阶段,帮助grub识别硬盘上的文件系统
disk : 2阶段 硬盘阶段
4)kernel:
自身初始化:
探测可识别道德所有硬件设备;
加载硬件驱动程序
以只读方式挂载根文件系统
进行用户空间的第一个应用程序 /sbin.init
init程序类型
sysV风格:init
upstart风格:ubantu研发用于6版本
配置文件:/etc/inittab和/etc/init/*.conf
systemd:用于7版本红帽研发
配置文件:/usr/lib/systemd/system和/etc/systemd/system 中
5)rootfs
6)swichroot
7)sbin/init
8)/etc/inittab,/etc/init/*.conf
9)设定默认运行级别
10)系统初始化脚本
11)关闭或开启对应级别下的服务
内核的特性之一,利用缓冲和缓存用来加速对磁盘上的文件的访问
总结:POST加电自检—>bootSequence(BIOS)—>bootloader—->加载内核和(ramdisk文件)—->以只读方式装在根文件系统—->加载init
init
init级别:0:关机
1:单用户模式(root用户,无需登录维护模式)
2:多用户模式(会启动网络功能但不会启动NFS)
3:多用户模式(正常模式:默认文本界面,不会启动图形)
4:预留级别(也当3级别用)
5:多用户模式(图形界面)
6:重启
默认级别 :3、5
查看级别 runlevel
who -r
切换级别 init
配置文件/etc/inittab
每一行对应着一个action以及与之对应的process
id:runlevel:action:process
action:
wait:运行到此级别才运行一次
resoawn:此process终止就重启
initdefault:设定默认运行级别,process省略
sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit
运行制定级别下的指定服务
/etc/rc.d/rc0.d/
1.d/
2.d/
3.d/
4.d/
5.d/
6.d/
目录下的文件是脚本链接文件有
K* stop (按顺序0-99)
S* start
(按顺序0-99)
这其中的链接文件的原文件都在/etc/rc.d/init.d/下
备注:K数字越小越依赖于别的服务
S数字越小越被别的服务依赖
管理工具:
chkconfig
–list :显示每一个服务对应的级别是开机还是关闭(不加服务名称表示显示所有)
–level # 服务名 on/off
修改#级别下的某服务 开启/关闭
(此类脚本中chlconfig行定义了K和S的级别 K越小S越大 反之也一样)
添加 :把服务脚本放置于/etc/rc.d/init.d(文件下)
–add name
/etc/rc.d/init.d/NAME
#!/bin/bash
#
#chkconfig: LLLL nn nnn (
LLLL表示S的级别 ,nn表示S的数字 nnn表示K的数字)
先写脚本文件,在添加
chkconfig –del Name
修改制定链接的类型
chkconfig –level LLLL (省略时2345)程序 ON|OFF
rc#.d/文件夹下有一个S99local
正常级别下,这是最后运行的一个脚本,他指向rc.d/rc.local中如果不便或者不需要写成脚本的需要开启的程序可以房子此文件夹下
开机之前想运行的命令直接写到rc.d/rc.local
系统初始化要做的事情
1)设置主机名
2)设置欢迎信息
3)激活udev和selinux
4) 挂载/etc/fatab文件中定义的文件系统
5)检测根文件系统,并以读写方式重新挂载根文件系统
6)设置系统时钟
7)激活swap设备
8)根据/etc/sysctl.conf文件设置内核参数
9)激活lvm和software raid等设备
10)加载额外设备驱动操作
11)清理操作
总结
/sbin/init—->(/etc/inittab)—->设置默认运行级别—->运行初始化脚本,完成系统初始化—->关闭对应下需要关闭的服务,启动需要启动的服务—->设置登录终端
6版本
init程序为upstart,
配置文件:
/etc/inittab
/etc/init/*.conf
GRUB详解
1阶段 :mbr
1.5阶段:mbr中的山区中让1阶段中的bootloader能识别二阶段上的文件系
统(提供文件系统驱动)
2阶段 :存在于磁盘分区上
配置文件 /boot/grub/grub.conf <— /etc/grub.conf
2阶段及内核通常会放置在一个基本分区中
功用:
(1)提供菜单、并提供交互式接口
e:编辑模式用于编辑菜单
c:命令模式,交互式接口
(2)加载用户选择的内核或者操作系统
允许传递参数给内核
可隐藏此菜单
(3)为菜单提供了保护机制
为编辑菜单进行认证
为启用内核或操作系统进行认证
如何识别设备
(hd#,#):第几块磁盘的 第几个分区
grub命令行接口:
help:获取帮助列表
help KEYWord:某关键字的帮助信息
find (hd#,#)/FILENAME(支持TAB补全):查找文件
root (hd#,#) 把hd#,#设为根
kernel PATH/TO/FILE: 指明本次启动时用的内核文件
例如:init=PATH/TO/INIT 或 selinux=0
initrd /PATH/TO/INITRAMFS_FILE:设定为选定的内核为辅助文件的ramdisk
boot:引导启动选定的内核
手动在grub命令行接口启动系统
1)root(hd0,0)
2)kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
3)initrd /initramfs-VERSION-RELEASE.img
4)boot
开机的菜单栏定义在/etc/grub.conf下
重要的有
1)default=#(菜单项)
2)timeout=#(等待用户选择的时长)
3)spalshimage=(hd#,#)/PAST/TO/SOMEFILE (指明菜单等待选项时长)
4)hiddenmenu:隐藏菜单
5)title TITLE
root (hd#,#)
kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
initrd /initramfs-VERSION-RELEASE.img
备注:可以再title上方行增加
password [–md5] STRING:菜单编辑认证
也可以在5)title下方增加表示启动内核时认证
grub-md5-crypt 命令生成MD5 密码
进入单用户模式:
1)选定要编辑的title
输入e
2)选定kernel那行
输入1或S或s
3)光标定在kernel所在行
敲b键
安装grub:
grub-install /dev/sda
删除/boot文件
修复方法
1)进入救援模式
2)切根
3)安装内核
4)grup-install /dev/sda
5)写配置文件 grub.conf
lsmod命令:
查看当前内核加载了那些模块模块大小,被使用了多少次
显示的文件内容来自于/proc/moudles文件
查看单独模块的详细信息
modinfo
(modinfo可以不写绝对路径)
ldd CMD (完整文件路径)
查看CMD依赖的库文件
modprobe: 安装或卸载内核模块
-r MODNAME 移除模块 modNAME 安装模块
-n 静默模式
配置文件:/etc/modprobe.conf
/etc/modprobe.d/*.conf
#### /proc 目录
内核把自己内部状态信息以及统计信息,以及可配置参数通过proc伪文件系统输出到终端
参数
只读:输出信息
可写:可接受用户指定的新值来实现对内核某功能或特性的配置文件 一般在 /proc/sys 下
用 echo “VAR” > PATH/FILE
或sysctl -w > PATH/FILE=”VAR”
修改
sysctl -a 让配置文件生效
/sys/目录
sysfs
是内核用来输出硬件设备属性信息的文件夹,有些参数是可以修改的,用于调整硬件的工作特性。
本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/98385