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系统文件与启动流程的更多相关文章

  1. Linux系统的启动流程

    Linux系统的启动流程: 1.通电(通常按下电源键,开始通电) 2.加载BIOS (通常看到显示器提示按F2进入主板) 3.读取MBR (MBR硬盘的入口地址,用来装载引导) 4.进入引导 (通常有 ...

  2. Linux的开机启动流程

    Linux的开机启动流程 1.开机BIOS自检                                             --> 检查CPU,硬盘等硬件信息 2.MBR[Major ...

  3. Linux操作系统-CentOS7启动流程和服务管理

    Linux操作系统-CentOS7启动流程和服务管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.systemd POST --> Boot Sequence --&g ...

  4. Linux操作系统-CentOS6启动流程和服务管理

    Linux操作系统-CentOS6启动流程和服务管理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux组成 1>.Linux: kernel+rootfs ker ...

  5. linux系统的启动流程梳理

    1. 不同版本的linux系统的启动流程 1.1 centos6.x系统的启动流程 其详细启动步骤如下: 1)开机,BIOS自检,检查各个硬件是否正常 2)读取硬盘MBR信息,引导系统启动 3)加载g ...

  6. 2021年3月-第01阶段-Linux基础-Linux系统的启动流程

    Linux系统的启动流程 理解Linux操作系统启动流程,能有助于后期在企业中更好的维护Linux服务器,能快速定位系统问题,进而解决问题. 上图为Linux操作系统启动流程 1.加载BIOS 计算机 ...

  7. Linux系统的启动流程以及做个小小的Linux

    内核的作用     进程管理:进程间切换     内存管理:内存空间分割为内核空间和用户空间     IO管理:对底层硬件的使用必须由内来实现,不能由用户空间进程来实现     文件系统管理     ...

  8. [转] 浅谈Linux系统的启动流程

    原文:http://blog.csdn.net/justdb/article/details/9621271 版权声明:本文为博主原创文章. Linux系统的启动时通过读取不同的配置文件,执行相应的S ...

  9. 浅谈Linux系统的启动流程

    Linux系统的启动时通过读取不同的配置文件,执行相应的Shell脚本完成的.当然本文只是简单的从文件的角度分析,更深层次的本文没涉及. 主要读取了以下文件:  /boot/grub/grub.con ...

随机推荐

  1. Spring源码 12 IOC refresh方法7

    本文章基于 Spring 5.3.15 Spring IOC 的核心是 AbstractApplicationContext 的 refresh 方法. 其中一共有 13 个主要方法,这里分析第 7 ...

  2. DevOps落地实践点滴和踩坑记录-(2) -聊聊平台建设

    很久没有写文章记录了,上一篇文章像流水账一样,把所见所闻一个个记录下来.这次专门聊聊DevOps平台的建设吧,有些新的体会和思考,希望给正在做这个事情的同学们一些启发吧. DevOps落地实践点滴和踩 ...

  3. Word 段前分页是什么?怎么设置?

    描述 这两个标题在第一个标题的页中,且两个标题都没有独立分页.要让每一个标题独立分页,需要对标题的格式进行修改. 段前分页指的是标题与标题之间不在同一个页中,每一个标题都在独立的页中. 设置段前分页 ...

  4. 介绍下Java内存区域(运行时数据区)

    介绍下Java内存区域(运行时数据区) Java 虚拟机在执行 Java 程序的过程中会把它管理的内存划分成若干个不同的数据区域.JDK 1.8 和之前的版本略有不同. 下图是 JDK 1.8 对JV ...

  5. 万物皆可集成系列:低代码释放用友U8+深度价值(2)—数据拓展应用

    在上一篇内容我们介绍了如何利用低代码开发套件实现低代码应用与U8+系统的对接集成,本次给大家带来的是如何将用友U8+系统中的数据进行价值扩展和实际应用. 我们以生产物料齐套分析为例来说明如何利用低代码 ...

  6. C# 使用if(DEBUG)调试 失效问题

    在调试winform程序的时候,经常会切换debug和release模式.有些时候在debug模式下不想用的东西就会使用 #if(!DEBUG) #endif 但是这次在新项目的时候,使用这个语句,失 ...

  7. WebGPU实现Ray Packet

    大家好~本文在如何用WebGPU流畅渲染百万级2D物体?基础上进行优化,使用WebGPU实现了Ray Packet,也就是将8*8=64条射线作为一个Packet一起去访问BVH的节点.这样做的好处是 ...

  8. ClickHouse(05)ClickHouse数据类型详解

    ClickHouse属于分析型数据库,ClickHouse提供了许多数据类型,它们可以划分为基础类型.复合类型和特殊类型.其中基础类型使ClickHouse具备了描述数据的基本能力,而另外两种类型则使 ...

  9. KingbaseES 支持列加密

    KINGBASE 列加密支持 sm4 和 rc4 加密算法,具体算法在 initdb 时指定,默认是 sm4.要使用列加密,必须 shared_preload_libraries = 'sysencr ...

  10. 【Shashlik.EventBus】.NET 事件总线,分布式事务最终一致性

    [Shashlik.EventBus].NET 事件总线,分布式事务最终一致性 简介 github https://github.com/dotnet-shashlik/shashlik.eventb ...