Centos启动流程及grub legacy
Linux系统的组成部分:内核+根文件系统
内核的功能:进程管理、内存管理、网络管理、文件系统、驱动程序、安全功能
系统在运行时要么就是在运行内核代码,要么就是在运行应用程序代码。如果一个程序大多数时间在内核的系统调用上,那样真正执行业务功能的时间就少了,实际生产力不大。通常在开发程序的时候,大都不是直接使用系统调用来实现功能,而是使用系统调用的二次封装(glibc库),所谓库,就是函数(功能)的集合,库中的函数名,能够接受的参数,参数类型都应该有定义(头文件)。
库也是二进制程序,但是相比正常程序而言,库没有执行入口,只能通过被调用才能实现功能。进一步划分库,分为是否有返回结果,称之为过程调用和函数调用。
所以系统的最基本组成就是内核、程序、库。为了运行程序就必须要文件系统。
内核作为操作系统的最核心有两种设计流派:
单内核设计:把所有功能集成于同一个程序;Linux
微内核设计:每种功能使用一个单独的子系统实现;Windows, Solaris,微内核设计才能真正实现线程
Linux内核特点:
借鉴了微内核设计,支持模块化: .ko (kernel object),类似于库(.so)是被程序调用。
支持模块运行时动态装载或卸载;
内核组成部分:
核心文件:/boot/vmlinuz-VERSION-release
ramdisk:
CentOS 5:/boot/initrd-VERSION-release.img
CentOS 6,7:/boot/initramfs-VERSION-release.img
模块文件:/lib/modules/VERSION-release
现有一种情景,内核启动后需要加载各个硬件的驱动程序,但是内核不可能包含所有硬件的驱动,因为内核的功能都是模块文件来实现的,然而内核模块/lib/modules/的目录是在文件系统上,所以要使用这个目录的模块就需要正确识别磁盘和文件系统,就需要有正确的驱动,可是驱动模块又在磁盘上。如何解决这个矛盾,就出现了ramdisk(内存模拟的磁盘)文件,是一个微型的文件系统,里面存放了内核为了访问磁盘和文件系统等基本设备的驱动,这样内核就可以真正的访问磁盘上的模块文件。
ramdisk是安装系统的最后一步动态生成的,只存在用于识别当前硬盘的驱动文件,这个文件并不会把所有的驱动都包含。
在Centos 6开始称之为initramfs(内存模拟的文件系统),因为内核特性使得硬盘读取数据的时候会先在内存设立缓存区,然后再从内存缓存区读取,但是本身这个ramdisk的内容已经在内存中了,造成了二次缓存,就没有必要从内存读取到内存缓存了。
CentOS 系统的启动流程
系统初始化流程(内核级别): POST --> BootSequence(BIOS) --> BootLoader(MBR)--> Kernel(ramdisk)--> rootfs(readonly)--> /sbin/init ()。完整的详细启动过程参照 CentOS系统启动流程
MBR上的bootloader
功能:提供一个菜单,允许用户选择要启动的系统或不同的内核版本; 把用户选定的内核装载到RAM中的特定空间中,解压、展开,而后把系统控制权移交给内核;
GRUB启动的阶段:
bootloader:1st stage,这个阶段作用只有一个,就为了找到stage 2
stage 1.5:位于分区文件系统,因为stage 2 在磁盘分区上,要正确识别分区文件系统。位于MBR后面的扇区。
stage 2:位于文件系统/boot/grub
Kernel自身初始化:
探测可识别到的所有硬件设备;
加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)
以只读方式挂载根文件系统;
运行用户空间的第一个应用程序:/sbin/init(Centos5、6、7使用的都不同)
init程序的类型:
CentOS 5-:SysV init
配置文件:/etc/inittab
CentOS 6:Upstart
配置文件:/etc/inittab; /etc/init/*.conf
CentOS 7:Systemd
配置文件:/usr/lib/systemd/system/, /etc/systemd/system/
ramdisk/ramfs生成的工具程序:
CentOS 5: initrd 工具程序:mkinitrd
CentOS 6,7: initramfs 工具程序:dracut, mkinitrd(一般不用)
init
运行级别
假设一种场景,在Windows上安装了不兼容硬件的驱动导致一启动就蓝屏。那么正常情况只要卸载了此驱动就能正常启动。然而启动就蓝屏使得根本无法卸载。这个时候Windows就有了一个安全模式,安全模式下只加载了基本的系统组件,与正常启动相比这种模式下加载了不同的驱动启动了不同的服务。使得系统异常时有一个基本的环境来进行维护工作。
在linux中也同样有这种用于维护的模式,称之为运行级别(Centos5/6存在)。由init程序管理,在不同的级别下启动不同的服务和程序。
运行级别有7个:
0:关机
1:单用户模式(root用户无需登陆),single,用于维护
2:多用户模式,启动网络功能,但是不启动网络文件系统,用于维护
3:多用户模式,正常启动,文本界面
4:多用户模式,预留的级别,同级别3.
5:多用户模式,正常启动,图形界面
6:重启
所以一般常用于系统启动的有3、4、5。
级别的切换通过init程序:init level
查看级别:runlevel 、who –r
init的配置文件为/etc/inittab。按照指定格式id:runlevel:action:process 以Centos5为例: id:3:initdefault: id:作为唯一标识不可重复 另外有:1:0:wait:/etc/rc.d/rc 1 当切换到级别1的时候执行rc脚本,并传递1,rc脚本读取rc1.d/*,该目录下两种文件 K##:传递stop,大致原理如下: 为了方便管理启动的服务,有chkconfig 工具,自动在运行级别目录下创建链接,设置一个服务在某个级别下是K还是S。 想要一个服务可以通过chkconfig来控制,需要在服务启动脚本上使用如下标识 chkconfig命令:管控/etc/init.d/ 或者”###BEGIN INIT INFO …….###END INIT INFO“这种格式 正常级别下有个S99local表示最后一个启动的脚本,指向/etc/rc.d/rc.local,用于自定义添加开机启动。 |
所有服务启动完成后,就会启动终端设备和登陆程序,同样在/etc/inittab的配置文件中定义(Centos6的配置文件就不止一个)
如:tty1:respanw:/usr/sbin/mingetty tty1
回到配置文件中,系统启动时sysinit执行的/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) 清理操作;
完成内核加载后,启动第一个程序init的执行流程,/sbin/init (/etc/inittab)设置默认运行级别 --> 运行系统初始化脚本(rc.sysinit) --> 关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务(rc #)--> 设置登录终端 (或启动图形终端)
以上关于init配置文件完成的功能适用于centos5,后续再比较这种启动过程的变革。
Centos 6的init程序就已经变为upstart,但是其命名依然为init。配置文件/etc/init/*.conf,同时兼容/etc/inittab(仅用于定义默认运行级别),但是*.conf 的配置文件是按照upstart的标准来定义的(比上一代要更加复杂)。
Centos7的init程序为systemd,启动服务的时候已经不像centos5那样使用shell脚本来启动服务。
GRUB
grub作为一个bootloader,实现的功能
(1) 提供菜单、并提供交互式接口
e: 编辑模式,用于编辑菜单;
c: 命令模式,交互式接口;
(2) 加载用户选择的内核或操作系统
允许传递参数给内核
可隐藏此菜单
(3) 为菜单提供了保护机制
为编辑菜单进行认证
为启用内核或操作系统进行认证
grub交互模式下的常用命令
help: 获取帮助列表
help KEYWORD: 详细帮助信息
find (hd#,#)/PATH/TO/SOMEFILE:要指定磁盘分区
root (hd#,#) grub文件所在的分区设置为根
kernel /PATH/TO/KERNEL_FILE: 设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;
例如:init=/path/to/init, selinux=0
initrd /PATH/TO/INITRAMFS_FILE: 设定为选定的内核提供额外文件的ramdisk;
boot: 引导启动选定的内核;
手动在grub命令行接口启动系统:
grub> root (hd#,#)
grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
grub> initrd /initramfs-VERSION-RELEASE.img
grub> boot
配置文件:/boot/grub/grub.conf 配置启动时的菜单项
default=#: 设定默认启动的菜单项;菜单项(title)编号从0开始;
timeout=#:指定菜单项等待选项选择的时长;
splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;
hiddenmenu:隐藏菜单;
password [--md5] STRING: 菜单编辑认证;选择启动项的时候使用p按键输入密码。
title TITLE:定义菜单项“标题”, 可出现多次;
root (hd#,#):grub查找stage2及kernel文件所在设备分区;为grub的“根”;
kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
initrd /PATH/TO/INITRAMFS_FILE: 内核匹配的ramfs文件;
password [--md5] STRING: 启动选定的内核时进行认证;
password放在title里面表示内核认证,放在外面表示编辑菜单需要认证
grub-md5-crypt 用于生成md5加密后的密码
grub安装
如果grub配置文件丢失,则启动时进入grub交互模式;如果grub的stage 1(MBR)损坏则无法启动任何系统。重新安装grub使用grub-install,这命令实现完全安装(stage1、stage1.5、stage2)
grub-install --root-directory=ROOT /dev/DISK #root-directory是指明包含boot目录的位置
grub修复
假设场景MBR损坏,但是系统此时没有重启
方法一:直接使用上述命令安装即可。
方法二:直接输入grub命令进入交互模式。
grub>root (hd#,#)
grub>setup (hd0) #指定是磁盘而非分区,这时会修复stage1,使用现有/boot目录下的stage1和stage1.5来修复
如果无法损坏后无法开启系统,使用光盘进入救援模式,在救援模式下的bash-4.1# 执行grub-install,也可以切换/mnt/sysimage(原系统的根文件系统)来进行grub的安装
Centos启动流程及grub legacy的更多相关文章
- 【Linux】【Basis】CentOS启动流程
1. 基础概念 1.1 Linux系统的组成部分:内核+根文件系统 内核:进程管理.内存管理.网络协议栈.文件系统.驱动程序.安全功能 IPC:In ...
- Linux的启动流程以及GRUB详解
一.Linux引导和启动流程 概述,计算机电源接通后通过BISO之后,没有问题,就会去硬盘上找到MBR(Main Boot Record 主引导记录区)位于整个硬盘的0磁道0柱面1扇区, ...
- linux基础之CentOS启动流程
一.基本概念 内核设计流派: 单内核设计:Linux //所有功能集成于同一个程序 微内核设计:Windows,Solaris //每种功能使用一个单独子系统实现 Linux内核特点: 支持模块化:. ...
- CentOS启动流程及Shell脚本编程练习
转至:http://www.178linux.com/88910 一.请详细描述CentOS系统的启动流程(详细到每个过程系统做了哪些事情) 第一步:POST加电自检 主要实现的功能是检测各个外围硬件 ...
- centos启动流程[转]
启动流程概览 在硬件驱动成功后,Kernel 会主动呼叫 init 程序,而 init 会取得 run-level 资讯: init 运行 /etc/rc.d/rc.sysinit 文件来准备软件运行 ...
- centos启动流程
centos6启动流程 1.主板,post加电自检,检查硬件环境 2.主板选择一个硬盘进行引导,执行mbr446 grub stage1 3.grub stage1.5 加载/boot分区文件系统驱动 ...
- linux网络相关命令之脚本和centos启动流程
nice 功用:设置优先权,可以改变程序执行的优先权等级.等级的范围从-19(最高优先级)到20(最低优先级).优先级为操作系统决定cpu分配的参数,优先级越高,所可能获得的 cpu时间越长. 语法: ...
- CentOS6启动流程(含详细流程图)
参考:Linux启动流程和grub详解(作者:好笔记运维) 为什么把这位的参考放在前面,主要是这位大佬的流程图太详细了.虽说不一定要了解这么详细,但还是很佩服啊.不多说,上图(在新标签中打开图片) 下 ...
- Centos 6启动流程详解
author:JevonWei 版权声明:原创作品 Centos6 启动流程 POST开机自检 当按下电源键后,会启动ROM芯片中的CMOS程序检查CPU.内存等硬件设备是否正常运行,CMOS中的程序 ...
随机推荐
- 容器(docker)内运行Nginx
容器内运行nginx其实很简单,但是一开始还是浪费了我很多时间.这里写下来给大家省点时间. 1.创建nginx文件夹,放置各种配置及日志等. mkdir /docker/nginx docker 文件 ...
- mac电脑复制键失灵
mac键按command+c偶尔失灵打电话给客服. 客服的解决方案: 1.关机状态同时按: shiflt+option+control+关机键 (重置键盘快捷键不会丢失数据) 20秒 2.松开后重 ...
- vChart
vue+echarts工具: https://v-charts.js.org
- CAtia_打开提示:许可证过期怎么办
CAtia_许可证过期怎么办:进计算机管理,点开服务和应用程序,点服务,找到DS License Server,在启动此服务的地方点启动,从而开启DS License Server.
- Python学习日记 --day3
1.数据类型整体分析. int :1,2,3213,用于计算 bool:True False 用于判断 str:‘qweqweqe’ .‘我爱你中国’ .‘1234位朋友’ 储存少量的数据,进行 ...
- vs2015 工具栏添加控件
就是“添加”——“组件(N)”,然后把需要的代码写进去,但是工具栏里面却显示不出来. 结果是得重启系统才行,重启之后的确显示在工具栏显示出来了,但是拖到设计界面的时候还会出现“未能加载工具箱项xxx, ...
- C# 异步示例代码
在 使用BackgroundWorker组件 一文中,阐述了在Winform编程中,使用BackgroundWorker组件实现异步调用,本文主要讲述利用委托实现异步. 以下描述摘抄于MSDN: 异步 ...
- 关于ASP.NET 服务器报错 Server Error in '/' Application Runtime Error 错误及解决方法
今天遇到一个错误 程序在服务器上运行时报错 先贴上错误代码 自己也在网上找了一些解决方法,把错误定位到服务器的配置文件也就是Web.config的问题, 于是在system.web节点下 加上cust ...
- Game Engine Architecture 8
[Game Engine Architecture 8] 1.Differences across Operating Systems • UNIX uses a forward slash (/) ...
- css第二天
二丶 1.字体属性font: 字体名称(font-family)字体大小(font-size):pc中通常,字体大小表示为12px,14px.移动设备中通常表示为0.57rem.字体粗细(font-w ...