一、Linux中开机流程
1.首先进行BIOS自检,加载MBR
启动整部系统首先需要进行BIOS自检,加载cmos信息
接下来进行开机装置的数据读取(MBR相关的任务)
2.读取并执行开机装置内MBR的boot Loader
boot Loader 就是开机系统的引导程序(grup 或spfdisk 等程序)这是安装多系统时需要着重设置的程序。
Linux现在我们一般使用的是(grub)程序。所以当我们安装Linux和Windows双系统时,想要移除Linux系统时不能直接格式化硬盘。
Windows 的 loader 预设不具有控制权转交的功能,因此你不能使用 Windows 的 loader 来加载 Linux loader ,如果直接格式化Linux所在的硬盘,会两个系统都无法进入。
boot Loader 的功能:
提供选单:可以使用户选择不同的操作系统,这是安装多系统引导重要的功能
载入核心系统:直接加载可开机的区段的系统内核
转交其他loader:将开机引导功能转给其他loader负责
3.内核加载
在loader引导之后,开始读取核心档案,内核开始检测硬件然后开始加载驱动程序
4.启动初始化进程
在硬件驱动加载成功后,内核会主动呼叫init程序(在RHEL7 以后的系统不是呼叫init程序)
Linux系统启动时需要做大量的初始化工作,挂载文件系统和交换分区等,启动各类进程服务等工作。
二、第一支程序init和配置文件/etc/inittab和runlevel (RHEL7 之前系统存在)
2.1 当核心加载完毕,进行完硬件检测及驱动程序的加载后,核心会主动呼叫第一支程序/sbin/init,同样这也是init的PID号码是1号的原因所在。
/sbin/init 最主要的功能是准备软件的执行环境,包括系统的主机名,网络设定,语系处理,文件系统格式以及其他服务的启动等。
然而这些所有的动作都会通过init的配置文件,/etc/inittab来规划,而/etc/inittab中还有一个很重要的设定项目,就是开机执行等级(runlevel)。
2.2 Run level
Linux就是设定run level来规定系统使用不同的服务来启动的,让Linux的使用环境不同。
基本上根据有无网络和GUI将run level分为7个等级。
0halt (系统直接关机)
1 single user mode(单人维护模式,用在系统出现问题时的维护)
2Multi user without NFS (类似run level3,但是没有NFS服务)
3Full multi user mode(完整含有网络功能的纯文本模式)
4unused (系统保留功能)
5X11( runlevel 3类似,加载GUI)
6reboot(重新启动)
2.3 /etc/inittab 的内容和语法
这个文件的语法是利用冒号(:)将设定分隔称为四个字段,每个字段意义与说明如下:
[设定项目]:[run level]:[init的动作]:[指令项目]
1.设定项目:最多4个字符,代表init的主要工作项目,只是一个简单的代表说明
2.run level:该项目在哪些run level下进行的意思,如果是35则代表run level3和5都会执行。
3.init的动作项目:主要可以进行的动作项目的意义
initdefault代表预设的run level设定值
sysinit代表系统初始化的动作项目
4.指令项目:是一些可以进行的指令,通常是一些script
2.4 init的处理流程
事实上/etc/inittab 的设定也有点类似shell script,因为文件内容的设定是一行一行的从上往
下处理的,所以init程序依据inittab设定的处理流程是这样的:
1.先取得run level 就是默认的执行等级的相关设定
2.使用/etc/rc.d/rc.sysinit进行系统初始化
3.按运行级别执行开机系统
2.5 启动系统服务与相关启动配置文件(/etc/rc.d/rc N & /etc/sysconfig)
2.6 用户自定义开机启动程序(/etc/rc.d/rc.local)
在完成runrevel指定的各项服务的启动后,如果还有其他的动作想要完成时,在系统启动完毕自动执行时
就需要将script写入/etc/rc.d/rc.local 中,那么该工作就会在开机时自动加载。
2.7 开机过程中会用到的主要的配置文件
init程序在运行的时候会有许多执行脚本,包括/etc/rc.d/rc.sysinit 和 /etc/rc.d/rc等等,这些脚本都会
使用相当多的系统配置文件,这些开机过程会用到的配置文件大多数放置在/etc/sysconfig目录下。
/etc/sysconfig/*
在整个开机的过程中,读取的相关配置文件都记录在/etc/sysconfig目录下
以下是该目录下重要的文件
authconfig :
这个文件主要是规范使用者的身份认证机制,包括是否使用本机的/etc/passwd,/etc/shadow等,以及
/etc/shadow密码记录使用哪种加密算法,还有是否使用外部密码服务器提供的账号验证(NIS,LDAP)等。
系统默认使用MD5加密算法,并且不使用外部的身份验证机制。
clock :
这个文件在设定Linux系统主机的时区。
network :
可以设定是否启动网络,以及设置主机名和网关(GATEWAY)
network-scripts/ :
network-scripts/ 里面的文件,主要用在设置网卡
2.8 run level 的切换
要每次开机都执行某个预设的 run level,只需要修改/etc/inittab 里面的设定项目, 就是【 id:5:initdifault:】里面的数字
如果只是暂时变更系统的 run level,使用init[0~6]来进行变更。
三、开机过程的问题解决
很多时候,我们可能因为不正常关机而导致系统的filesystem出错,此时Linux可能无法顺利开机,
此时我们只需要进入run level 1 单人维护模式去处理,应该就会解决问题 。
出现系统启动界面是按‘e’键,进入编辑模式,在出现kernel这一行的最后加上single或者1
3.1 忘记root密码:
忘记root密码时,只要能够进入系统和挂载/ ,然后重新设定root密码。
1.重新启动
2.在开机进入grub选单后,在上面的选单上面点'e'进入详细设定,将光标移动到kernel上方并点e
进入编辑界面,输入single进入单人维护模式
3.进入单人维护模式后,系统会议root的权限直接给你一个shell ,然后执行【passwd】命令重置密码
3.2 init配置文件错误
根据开机流程,我们知道当init配置文件出错,我们可能无法进入单人维护模式,当出现这种情况是我
们就告诉核心不要执行init,直接呼叫bash,跳过init。同样在开机进入grub,在grub edit的情况下
执行 init=/bin/bash 『 mount -o remount,rw / 』 用途是将根目录重新挂载成为可擦写,至于
『 mount -a 』则是参考 /etc/fstab 的内容重新挂载文件系统! 此时你又可以开机进行救援的工作
了。救援完毕需要重启。