Linux系统文件与启动流程
Linux系统文件与启动流程
/etc初始化系统重要文件
- /etc/sysconfig/network-scripts/ifcfg-eth0:网卡配置文件
- /etc/resolv.conf:Linux系统DNS客户端配置文件
- /etc/hostname (CentOS7) /etc/sysconfig/network:(CentOS 6)主机名配置文件
- /etc/hosts:系统本地的DNS解析文件
- /etc/fstab:配置开机设备自动挂载的文件
- /etc/rc.local:存放开机自启动程序命令的文件
- /etc/inittab:系统启动设定运行级别等配置的文件
- /etc/profile及/etc/bashrc:配置系统的环境变量/别名等的文件
- /etc/profile.d:用户登录后执行的脚本所在的目录
- /etc/issue和/etc/issue.net:配置在用户登录终端前显示信息的文件
- /etc/init.d:软件启动程序所在的目录(centos 6)
- /usr/lib/systemd/system/ 软件启动程序所在的目录(centos 7)
- /etc/motd:配置用户登录系统之后显示提示内容的文件
- /etc/redhat-release:声明RedHat版本号和名称信息的文件
- /etc/sysctl.conf:Linux内核参数设置文件
/proc重要路径
/proc/meminfo:系统内存信息
/proc/cpuinfo:关于处理器的信息,如类型,厂家,型号,性能等
/proc/loadavg:系统负载信息,uptime 的结果
/proc/mounts:已加载的文件系统的列表
/var目录下文件
/var/log:记录系统及软件运行信息文件所在的目录
/var/log/messages:系统级别日志文件
/var/log/secure:用户登录信息日志文件
/var/log/dmesg:记录硬件信息加载情况的日志文件
Linux开机启动流程
作为一个运维人,必须得保障服务器正确工作,机器宕机了,也得明确是什么问题,从何查起,那么了解启动流程就能够对症下药,排查问题。
- BIOS自检
检查硬件是否健康。如 cpu 风扇是否正常,内存是否正常,时钟是否正常,这个过程是读取 ROM 上的指令执行的。
- 微控制器
系统想要启动必须先加载 BIOS,按下电源键时,给微控制器下达一条复位指令,各寄存器复位,最 后下达一条跳转指令,跳转到 BIOS 的 ROM,使得硬件去读取主板上的 BIOS 程序,在这之前都是 由硬件来完成,之后硬件就会把控制权交给 BIOS。
- BIOS->POST
随后 BIOS 程序加载 CMOS(可读写的 RAM 芯片,保存 BIOS 设置硬件参数的数据)的信息,借 CMOS 取得主机的各项硬件配置。取得硬件配置的信息之后,BIOS 进行加电自检(Power-on self Test,POST)过程,检测计算机各种硬件信息,如果发现硬件错误则会报错(发出声音警告)。之后 BIOS 对硬件进行初始化。BIOS 将自己复制到物理内存中继续执行,开始按顺序搜寻可引导存储设 备,决定存储设备的顺序(即定义第一个可引导的磁盘,当然是在有两个磁盘的前提),接下来就 会读取磁盘的内容,但是要读取磁盘文件必须要有文件系统,这对 BIOS 挂载文件系统来说是不可 能,因此需要一个不依赖文件系统的方法使得 BIOS 读取磁盘内容,这种方法就是引入 MBR。最后 BIOS 通过 INT13 硬件中断功能读取第一个可引导的存储设备的 MBR(0 磁道 0 扇区)中的 boot loader。将 MBR 加载到物理内存中执行。MBR 载入内存后,BIOS 将控制权转交给 MBR(准确的 说应该是 MBR 中的 boot loader),然后 MBR 接管任务开始执行。
- MBR引导
载入了第一个可引导的存储设备的 MBR 后,MBR 中的 boot loader 就要读取所在磁盘的操作系统核 心文件(即后面所说的内核)了。 但是不同操作系统的文件系统格式不同,还有一个磁盘可以安装多个操作系统,如何让 boot loader 做到引导的就是用户想要的操作系统,这么多不同的功能单靠一个 446 字节的 boot loader 是远远不 够的。必须有一个相对应的程序来处理各自对应的操作系统核心文件,这个程序就是操作系统的 loader(注意不是 MBR 中的 boot loader),这样一来 boot loader 只需要将控制权交给对应操作系统 的 loader,让它负责去启动操作系统就行了。 一个硬盘的每个分区的第一个扇区叫做 boot sector,这个扇区存放的就是操作系统的 loader,所以常 说一个分区只能安装一个操作系统。MBR 的 boot loader 有三个功能:提供选单,读取内核文件,转 交给其它 loader。 提供选单就是给用户提供一张选项单,让用户选择进入哪个操作系统;读取内核文件的意思是,系 统会有一个默认启动的操作系统,这个操作系统的 loader 在所在分区的 boot sector 有一份,除此之 外,也会将这个默认启动的操作系统的 loader 复制一份到 MBR 的 boot loader 中,这样一来 MBR 就 会直接读取 boot loader 中的 loader 了,然后就是启动默认的操作系统;转交给其它的 loader,当用 户选择其它操作系统启动的时候,boot loader 会将控制权转交给对应的 loader,让它负责操作系统的 启动。
- GRUB引导
grub 是 boot loader 中的一种,就 grub 来说,为了打破在 MBR 中只有 446Bytes 用于存放 boot loader这一限制,所以这一步的实现是这样的:grub 是通过分成三个阶段来实现加载内核这一功能的,这三个阶段分别是:stage1, stage1.5 以及 stage2。 stage1:存放于 MBR 的前 446Bytes,用于加载 stage1.5 阶段,目的是为了识别并驱动 stage2(或者 /boot)所在分区的文件系统。 stage1.5:存放于 MBR 之后的扇区,加载 stage2 所在分区的文件系统驱动,让 stage1 中的 boot loader 能识别 stage2 所在分区的文件系统。 stage2:存放于磁盘分区之上,具体存放于/boot/grub 目录之下,主要用于加载内核文件(vmlinuz- VERSION-RELEASE)以及 ramdisk 这个临时根文件系统(initrd-VERSION-RELEASE.img 或 initramfs- VERSION-RELEASE.img)。 概述:假如要启动的是硬盘设备,首先硬件平台主板 BIOS 必须能够识别硬盘,然后 BIOS 才能加载 硬盘中的 boot loader,而 boot loader 自身加载后就能够直接识别当前主机上的硬盘设备了;不过, 能够识别硬盘设备不代表能够识别硬盘设备中的文件系统,因为文件系统是额外附加的一层软件组 织的文件结构,所以要对接一种文件系统,就必须要有对应的能够识别和理解这种文件系统的驱 动,这种驱动就称为文件系统驱动。而 stage1.5 就是向 grub 提供文件系统驱动的,这样 stage1 就能 访问 stage2 及内核所在的分区(/boot)了。
- 加载内核
内核(Kerenl)在得到系统控制权之后,首先要进行自身初始化,而初始化的主要作用是: 探测可识别到的所有硬件设备; 加载硬件驱动程序,即加载真正的根文件系统所在设备的驱动程序(有可能会借助于 ramdisk 加载 驱动); 以只读方式挂载根文件系统(如果有借助于 ramdisk 这个临时文件系统(虚根),则在这一步之后 会执行根切换;否则不执行根切换); 运行用户空间的第一个应用程序:/sbin/init。 到这里内核空间的启动流程就结束了,而接下来是用户空间完成后续的系统启动流程。 注意:ramdisk 和内核是由 boot loader 一同加载到内存当中的,ramdisk 是用于实现系统初始化的、 基于内存的磁盘设备,即加载至内存(的某一段空间)后把内存当磁盘使用,并在内存中作为临时 根文件系统提供给内核使用,帮助内核挂载真正的根文件系统。而之所以能够帮助内核挂载根文件 系统是因为在 ramdisk 这个临时文件系统的/lib/modules 目录下有真正的根文件系统所在设备的驱动 程序;除此之外,这个临时文件系统也遵循 FHS,例如有这些固定目录结构:/bin, /sbin, /lib, /lib64, /etc, /mnt, /media, ... 因为 Linux 内核有一个特性就是通过使用缓冲/缓存来达到加速对磁盘上文件的访问的目的,而 ramdisk 是加载到内存并模拟成磁盘来使用的,所以 Linux 就会为内存中的“磁盘”再使用一层缓冲 /缓存,但是 ramdisk 本来就是内存,它只不过被当成硬盘来使用罢了,这就造成双缓冲/缓存了,而 且不会起到提速效果,甚至影响了访问性能;CentOS 5 系列以及之前版本的 ramdisk 文件为 initrd- VERSION-RELEASE.img,就会出现上述所说到的问题;而为了解决一问题,CentOS 6/7 系列版本就将其改为 initramfs-VERSION-RELEASE.img,使用文件系统的方式就可以避免双缓冲/缓存了,可 以说这是一种提速机制。
- 启动init进程
grub 中默认指定 init=/sbin/init 程序,可以在 grub.conf 中 kernel 行自定义执行程序 init=/bin/bash,此时 可以绕过下面步骤直接进入 bash 界面。 内核源代码文件中显示 996 行左右,规定了 init 启动的顺序,/sbin/init->/etc/init->/bin/init->/bin/sh。
- 读取/etc/inittab 文件
inittab 文件里面定义了系统默认运行级别,这一步做了一些工作如下: 初始运行级别(RUN LEVEL); 系统初始化脚本; 对应运行级别的脚本目录; 定义 UPS 电源终端/恢复脚本; 在虚拟控制台生成 getty,以生成终端; 在运行级别 5 初始化 X。
- 执行/etc/rc.d/rc.sysinit 程序
系统初始化一些脚本,主要完成以下工作。 设置主机名; 设置欢迎信息;
激活 udev 和 selinux 可以在 grub.conf 中,kernel 行添加 selinux=0 以关闭 selinux; 挂载/etc/fstab 文件中定义的文件系统; 检测根文件系统,并以读写方式重新挂载根文件系统; 设置系统时钟;
激活 swap 设备; 根据/etc/sysctl.conf 文件设置内核参数; 激活 lvm 及 software raid 设备; 加载额外设备的驱动程序; 清理操作。 /etc/rc*.d/文件(各种服务) 里面定义的是各种服务的启动脚本,可以 ls 查看,S 开头代表开机启动的服务,K 开头的是关机要 执行的任务。#代表数字,一个数字代表一个运行级别,共 7 个运行级别。 /etc/rc.d/rc.local 文件 这里面可以自定义开机启动的命令。
- 执行/bin/login
执行/bin/login 程序,等待用户登录。
centos7启动流程
CentOS7 和 CentOS6 启动流程差不多,只不过到 init 程序时候,改为了 systemd,因此详细解释一下 systemd 后的启动流程。
- uefi或BIOS初始化,开始post开机自检;
- 加载mbr到内存
- 加载内核和inintamfs模块
- 内核开始初始化,使用systemd代替centos6的init程序
1.执行initrd.target,包括挂载/etc/fstab文件中的系统,此时挂载后,就可以切换到根目录了
2.从initramfs根文件系统切换到磁盘根目录
3.systemd执行默认target配置
CentOS7 系表面是有“运行级别”这个概念,实际上是为了兼容以前的系统,每个所谓的“运行级 别”都有对应的软连接指向,默认的启动级别是/etc/systemd/system/default.target,根据它的指向可 以找到系统要进入哪个模式。
centos7的7个启动模式是:
- 0 ==> runlevel0.target, poweroff.target
- 1 ==> runlevel1.target, rescue.target
- 2 ==> runlevel2.target, multi-user.target
- 3 ==> runlevel3.target, multi-user.target
- 4 ==> runlevel4.target, multi-user.target
- 5 ==> runlevel5.target, graphical.target
- 6 ==> runlevel6.target, reboot.target
- systemd执行sysinit.target;
- systemd启动multi-user.target下的本机与服务器服务;
- systemd执行multi-user.target下的/etc/rc.d/rc.local。
- Systemd 执行 multi-user.target 下的 getty.target 及登录服务;
- systemd 执行 graphical 需要的服务。
Linux系统文件与启动流程的更多相关文章
- Linux系统的启动流程
Linux系统的启动流程: 1.通电(通常按下电源键,开始通电) 2.加载BIOS (通常看到显示器提示按F2进入主板) 3.读取MBR (MBR硬盘的入口地址,用来装载引导) 4.进入引导 (通常有 ...
- Linux的开机启动流程
Linux的开机启动流程 1.开机BIOS自检 --> 检查CPU,硬盘等硬件信息 2.MBR[Major ...
- Linux操作系统-CentOS7启动流程和服务管理
Linux操作系统-CentOS7启动流程和服务管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.systemd POST --> Boot Sequence --&g ...
- Linux操作系统-CentOS6启动流程和服务管理
Linux操作系统-CentOS6启动流程和服务管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux组成 1>.Linux: kernel+rootfs ker ...
- linux系统的启动流程梳理
1. 不同版本的linux系统的启动流程 1.1 centos6.x系统的启动流程 其详细启动步骤如下: 1)开机,BIOS自检,检查各个硬件是否正常 2)读取硬盘MBR信息,引导系统启动 3)加载g ...
- 2021年3月-第01阶段-Linux基础-Linux系统的启动流程
Linux系统的启动流程 理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进而解决问题. 上图为Linux操作系统启动流程 1.加载BIOS 计算机 ...
- Linux系统的启动流程以及做个小小的Linux
内核的作用 进程管理:进程间切换 内存管理:内存空间分割为内核空间和用户空间 IO管理:对底层硬件的使用必须由内来实现,不能由用户空间进程来实现 文件系统管理 ...
- [转] 浅谈Linux系统的启动流程
原文:http://blog.csdn.net/justdb/article/details/9621271 版权声明:本文为博主原创文章. Linux系统的启动时通过读取不同的配置文件,执行相应的S ...
- 浅谈Linux系统的启动流程
Linux系统的启动时通过读取不同的配置文件,执行相应的Shell脚本完成的.当然本文只是简单的从文件的角度分析,更深层次的本文没涉及. 主要读取了以下文件: /boot/grub/grub.con ...
随机推荐
- Flask 运行报错 HTTPStatus.BAD_REQUEST This site can’t provide a secure connection
这时候将访问的url,从https换成http 就好啦!!!!!!!!!!!!!
- openstack 创建虚拟机失败
虚拟机创建失败 用户创建一台虚拟机,虚拟机使用4个网络平面,所以虚拟机选择了4个不同平面的网络,创建虚拟机一直在孵化的过程中,最后创建虚拟机失败. 失败后返回的报错日志 Build of ins ...
- 125. 验证回文串--LeetCode
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/valid-palindrome 著作权归领扣网络所有.商业转载请联系官方授权,非商业转载请注明出处. ...
- CSS 标签、类名和ID选择器有空格和没有空格的区别
前言 标签选择器.类名选择器以及 ID 选择器在使用上要注意"加空格"和"不加空格".两种使用形式上有很大的差别. 下面是讲解案例的 HTML 代码: < ...
- RabbitMQ 入门系列:3、基础含义:持久化、排它性、自动删除、强制性、路由键。
系列目录 RabbitMQ 入门系列:1.MQ的应用场景的选择与RabbitMQ安装. RabbitMQ 入门系列:2.基础含义:链接.通道.队列.交换机. RabbitMQ 入门系列:3.基础含义: ...
- 一次客户需求引发的K8S网络探究
前言 在本次案例中,我们的中台技术工程师遇到了来自客户提出的打破k8s产品功能限制的特殊需求,面对这个极具挑战的任务,攻城狮最终是否克服了重重困难,帮助客户完美实现了需求?且看本期K8S技术案例分享! ...
- C++ Protobuf
Protobuf protobuf (protocol buffer) 是谷歌内部的混合语言数据标准.通过将结构化的数据进行序列化(串行化),用于通讯协议.数据存储等领域的语言无关.平台无关.可扩展的 ...
- docker 匿名和具名挂载
匿名挂载,只指定容器内了,没指定容器外 -v 容器内路径 docker run -d -P --name nginx01 -v /etc/nginx nginx #-P 随机映射端口 ; -v 不指定 ...
- Springboot_maven多环境配置
开发过程中总是需要多环境配置,而Spring自带的方式不是那么优秀,可以利用maven来帮助做到 可以再pom.xml中配置profiles来做到 打包命令: mvn clean package -P ...
- 安装Win 8.1 跳过输入密钥步骤
安装Win 8.1 跳过输入密钥步骤 问题描述 因测试需要,要安装Win 8.1到实体机上,但是制作完U盘启动盘,开始安装时发现,必须输入产品密钥才能进行安装.所以,在这里介绍 ...