LinuxDay16——启动流程和内核管理

CentOS 5和6的启动流程

Linux: kernel+rootfs

  kernel:进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能

  rootfs: 

    glibc

  库:函数集合,function,调用接口

    过程调用:procedure(没有任何返回值即结果)

    函数调用:function(必有返回值即结果)

  程序

内核设计流派:

  单内核设计:集中管理,linux

    把所有功能集成于同一个程序;

  微内核设计:分散管理,Windows,solaris

    每个功能使用一个单独子系统实现;

Linux内和特点:

  支持模块化:.ko

  支持模块的动态装载和卸载;

组成部分:

  核心文件:/boot/vmlinuz-VERSION-release(压缩格式)

    ramdisk:

      CentOS 5:/boot/initrd-VERSION-release.img

      CentOS 6:/boot/initrmfs-VERSION-release.img

  模块文件:/lib/modules/VERSION-release

CentOS 系统启动流程:

I POST:加电自检;

  ROM:CMOS

    BIOS:Basic Input&Output System

    ROM+RAM

II BOOT Sequence:引导加载次序

  按次序查找各引导设备,第一个有引导程序的设备即为本次启动用到设备;

  bootloader:引导加载器,程序

    windows:ntloader

    Linux:

      LILO:lInux LOader(早期or安卓手机中)

      GRUB:GRand Uniform Bootloader

        GRUB 0.X:GRUB Legac

        GRUB 1.X:GRUB2

    功能:提供一个菜单,允许用户选择要启动系统或不同的内核版本;把用户选定的内核装载到内存中的特定空间中,解压、展开,并把系统控制权交给内核;

  MBR:主引导记录 (0磁道0扇区)

    446:bootloader

    64:fat 磁盘分区表 (文件系统分配表)

    2:55AA

  GRUB:

    bootloader:1st stage 位于MBR(主要目的是找到硬盘上的第二阶段)

    1.5stage(帮助GRUB识别分区文件系统)(安装时匹配好文件系统 放置在MBR之后的扇区)

    disk:2nd stage

III kernel:

  自身初始化:

    探测可识别到的所有硬件设备;

    加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)

    以只读方式挂载根文件系统;

    运行用户控件的第一个应用程序:/sbin/init

    

  init程序的类型:

    sysV:init,CentOS 5

      配置文件:/etc/inittab

    Upstart:init,CentOS 6

      配置文件:/etc/inittab, /etc/init/*.conf

    Systemd:systemd,CentOS 7

      配置文件:/usr/lib/systemd/system,/etc/systemd/system

  ramdisk:

    内核中的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问;

      ramdisk --> ramfs

      CentOS 5:initrd,工具程序:mkinitrd

      CentOS 6:initramfs,工具程序:mkinitrd,dracut

  系统初始化(前半段):

  POST --> BootSequence (BIOS) --> Bootloader(MBR) --> kernel(ramdisk) --> rootfs(只读) --> init(取决于配置文件)

IV /sbin/init

  CentOS 5:

    运行级别:为例系统的运行或维护等应用目的而设定:

      0~6:7个级别

      0:关机

      1:单用户模式(root,无需登录),single,维护模式;

      2:多用户模式,会启动网络功能,但不会启动NFS;维护模式;

      3:多用户模式,正常模式;文本界面;

      4:预留级别;可同3级别;

      5:多用户模式,正常模式;图形界面

      6:重启

    默认级别:

      3,5

    切换级别

      init 0

    查看级别

      runlevel

      who -r

V 配置文件:/etc/inittab

  每一行定义一种action以及与之对应的process

    id:runlevel:action:process

      action:

wait:切换至此级别运行一次;

respawn:此process终止,就重新气动之;

initdefault:设定默认运行界别:process省略

sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit;

...

id:3:initdefaule:设定默认级别3

si: :sysinit:/etc/rc.d/rc.sysinit

l0:0wait:/etc/rc.d/rc 0

l1:1wait:/etc/rc.d/rc 1

...

    l6:6wait:/etc/rc.d/rc 6

说明 rc 0 --> 意味着读取/etc/rc.d/rc0.d

K*:K##* 运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务;

S*:S##* 运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖别的服务;

for srv in /etc/rc.d/rc0.d/K*;do

  $srv stop

done

for srv in /etc/rc.d/rc0.d/S*;do

  $srv star

done

chkconfig命令

查看服务在所有级别的启动或甘比设定情况;

chkconfig --list name

添加:

SysV的服务脚本放置于/etc/rc.d/init.d(/etc/init.d)

chkconfig --add name

#!/bin/bash

#

# chkconfig: LLLL(0~6)级别 nn(S#) mm(K#)

删除:

chkconfig --del name

修改指定的链接类型

chkconfig [--level levels] name <on|off|reset>

--level LLLL: 指定要设置的级别;省略默认表示2345

注意:正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本;因此不便或不需写为服务脚本放置位于/etc/rc.d/rc.local文件中/etc/rc.d/rc.local在指定运行级别脚本后运行;可以根据情况,进行自定义修改;

tty1:2345:respawn:/usr/sbin/mingetty tty1

tty2:2345:respawn:/usr/sbin/mingetty tty2

...

tty6:2345:respawn:/usr/sbin/mingetty tty6

mingetty会自动调用login程序

x:5:respawn:/etc/X11/prefdm -nodaemon

VI /etc/rc.d/rc.sysinit: 系统初始化脚本

(1)设计主机名;

(2)设置还原信息;

(3)激活udev和SELinux

(4)挂载/etc/fstab文件中定义的文件系统;

(5) 检测根文件系统,并以读写方式重新挂载根文件系统

(6) 设置系统时钟

(7) 激活swap设备

(8) 根据/etc/sysctl.conf文件设置内核参数

(9) 激活lvm及software raid设备

(10) 加载额外设备的驱动程序

(11) 清理操作

总结:/sbin/init --> (/etc/inittab) --> 设置默认运行级别 --> 运行系统初始脚本、完成系统初始化 --> 关闭对应下需要关闭的服务,启动需要启动的服务 --> 设置登录终端

CentOS 6:

  init程序为:start其配置文件:

    /etc/inittab, /etc/init/*.conf,

    注意:/etc/init/*.conf配置文件的语法 遵循 upstart配置文件语法格式,和CentOS5不同

启动系统时,设置其运行级别1;

进入单用户模式:

(1) 编辑grub菜单(选定要编辑的title,而后使用e命令)

(2) 在选定的kernel后附加

1, s, S或single都可以

(3) 在kernel所在行,键入“b”命令

(4)passwd

GRUB(Boot Loader):

GRUB:GRand Uniform Bootloader

  GRUB 0.X:GRUB Legac

  GRUB 1.X:GRUB2

grub Legacy

  stagel:mbr

  stage1_5:mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统

  sstage2:磁盘分区(/boot/grub)

  配置文件:/boot/grub/grub.conf <-- /etc/grub.conf

  stage2及内核等通常放置于一个基本磁盘分区

功能

(1)提供菜单、并提供交互式接口

a:编辑模式,用于编辑菜单;

c:命令模式,交互式接口;

(2)加载用户选择的内核或操作系统

允许传递参数给内核

可隐藏此菜单

(3)为菜单提供了保护机制

为编辑菜单进行认证

为启用内核或操作系统进行认证

注意* 若/boot未独立分区(即boot在根下): grub寻找文件路径为 /boot/grub/grub.conf

若/boot独立分区:grub寻找文件路径为(即绕过boot) /grub/grub.conf

如何识别设备:

(hd#,#)

hd#:硬盘编号,用数字表示;从0开始编号

#:分区编号,用数字表示;从0开始编号

(hd0,0)第一块硬盘第一分区

grubd命令行接口

help:获取帮助列表

help KEYWORD :详细列出信息

find (hd#,#)/PATH/TO/SOMEFILE查找某个文件

root(hd#,#)

kernel /PATH/TO/KERNEL_FILE:设定本次启动时间用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;

例如:init=/path/to/init,selinux=0

initrd /PATH/TO/KERNEL_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;菜单编辑认证

title TITLE:定义菜单项“标题”。可出现多次

root (hd#,#),grub查找stage2及kernel文件所在设备分区,为grub的“根”

kernel /PATH/TO/VMLUNZ_FILE [PARAMETERS]:启动的内核

initrd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件

password [--md5] STRING;启动选定的内核或操作系统时进行认证;

  grub-md5-crypt(openssl) 命令

进入单用户模式:

  (1)编辑grub菜单(选定要编辑的title,而后使用e命令);

(2)在选定的kernel后附加

    1,s,S,或single都可以

  (3)在kernel所在行,键入“b”命令;

CentOS7系列启动流程

 CentOS7与6版本的不同之处:

6 : grub0.9和upstart

7 : grub2和systemd

主要介绍一下grub2和systemd吧,其他的启动流程几乎一样

grub2

/etc/default/grub
/boot/grub2/grub.cfg
grub2-mkconfig -o /boot/grub2/grub.cfg 生成grub2的配置文件
*在救援模式下修复grub
# chroot /mnt/sysimage
# grub2-install /dev/sda
# grub2-mkconfig -o /boot/grub2/grub.cfg

在grub命令行启动系统
> insmod xfs
> set root=(hd0,1)
> linux16 /vmlinux-... root=/dev/sda2 selinux=0
> initrd16 /initramfs-...

systemd

系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其它进程。

Systemd新特性:

系统引导时实现服务并行启动

按需启动守护进程

自动化的服务依赖关系管理

同时采用socket式与D-Bus总线式激活服务

系统状态快照

unit:表示不同类型的systemd对象

/usr/lib/systemd/system:每个服务最主要的启动脚本设置,类似于6系列的/etc/init.d/目录的功能

/run/systemd/system:系统执行过程中所产生的服务脚本

/etc/systemd/system:管理员建立的执行脚本,功能类似于6系列中/etc/rc.d/rcN.d/Sxx目录的功能

类型:

Service unit: (.service),用于定义系统服务

Target unit: (.target),用于模拟实现运行级别

Device unit: (.device),用于定义内核识别的设备

Mount unit: (.mount),定义文件系统挂载点

Socket unit: (.socket), 用于标识进程间通信用的socket文件,也可在系统启动时,延迟启动服务,实现按需启动

Snapshot unit: (.snapshot),管理系统快照

Swap unit: (.swap), 用于标识swap设备

Automount unit:(.automount),文件系统的自动挂载点

Path unit:(.path),用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务

systemctl命令

相关管理工具:

sysctl:修改内核参数的工具

-p 重新读入/etc/sysctl.conf

-a 列出当前生效的内核参数

-w net.ipv4.ip_forward = 1 即时生效

uname

-r:显示内核版本号

-a:显示全部信息

-n:显示主机名

lsmod:显示已经装载的模块

modinfo:显示模块的详细信息

-n:显示模块路径

-p:显示模块参数

-a:显示模块作者

-d:显示模块描述信息

-l:显示模块的遵循的协议

modprobe:装载模块

-r:卸载模块

depmod:内核模块依赖关系文件及系统信息映射文件的生成工具

insmod:指定装载模块文件,但不自动解决依赖模块

rmmod:卸载模块

time cmd 检测命令执行花的时间

lscpu:查看CPU信息

lspci:查看pci相关信息

lsusb:查看usb相关信息

lsblk:查看块设备相关信息

hal-device:查看所有硬件信息(CentOS6.x)

原文地址:https://www.cnblogs.com/Gmiaomiao/p/9032604.html

时间: 2024-11-09 00:49:04

LinuxDay16——启动流程和内核管理的相关文章

启动流程和内核管理

流程图: . 改名为RZ文件再解压 gunzip 解压 file 判断文件类型 cpio < 文件名 cpio是用来建立.还原备份档的工具程序,它可以加入.解开cpio或tar备份档内的文件 cpio是用来建立.还原备份档的工具程序,它可以加入.解开cpio或tar备份档内的文件cpio是用来建立.还原备份档的工具程序,它可以加入.解开cpio或tar备份档内的文件cpio是用来建立.还原备份档的工具程序,它可以加入.解开cpio或tar备份档内的文件cpio是用来建立.还原备份档的工具程序,它

鸟哥的linux私房菜——第20章 启动流程、模块管理与loader

20.1 Linux启动流程分析 Linux启动过程: 按下开机电源后计算机硬件主动读取BIOS来加载硬件信息以及硬件系统的自我测试,之后系统会主动读取第一个可启动的设备(由BIOS设置),此时就可以读入引导加载程序(boot loader)了,引导加载程序指定使用那个内核文件来启动,并实际加载内核到内存中解压缩与执行,此时内核就能够在内存中活动,并检测所有硬件信息与加载适当的驱动程序来使主机运行,等内核检测硬件与加载驱动程序完毕后,就可以登录了. 1)加载BIOS的硬件信息与进行自我测试,并依

系统启动流程以及内核管理

linux的组成: linux是单内核的系统,而windows是多个微内核的组成的操作系统 linux内核的作用:进程管理,内存管理,设备管理,网络管理,硬件驱动,安全机制 启动流程: 1,POST加电自检 作用:对电脑的各种硬件进行检测,看是否正常 ROM(主要):加载BIOS保存电脑的输出程序,但是它是保存在内存之中 RAM:保存电脑的各种参数设置,不然BIOS设置存不住,比如时间.并且指定对应的启 动项,如从光盘还是硬盘启动 bootloader:引导加载器,负责引导程序.解压,展开内核,

第二十章、启动流程、模块管理与 Loader grub

Boot Loader: Grub 『 boot loader 是加载核心的重要工具』!没有 boot loader 的话,那么 kernel 根本就没有办法被系统加载! boot loader 的两个 stage 在 BIOS 读完资讯后,接下来就是会到第一个启动装置的 MBR 去读取 boot loader 了.这个 boot loader 可以具有菜单功能.直接加载核心文件以及控制权移交的功能等, 系统必须要有 loader 才有办法加载该操作系统的核心.但是我们都知道, MBR 是整个硬

Android中Activity的启动流程和组织管理方式(Backstack、Task)

前言: Android对Activity的组织管理会引入一些名词概念术语,像Stack.Task等,本文会做简单介绍.Activity的启动.切换以及组织管理会受不同的配置和属性的影响,本文会简单介绍一些相对重要和典型的概念,比如BackStack.Affinity. 文章目录: ? 概述? Launcher启动Activity? 应用内启动子Activity? 锁屏状态下启动Activity? Stack.Task.BackStack.Affinity 此文章原始是PPT格式已转换为PDF,请

第二十章、启动流程、模块管理与 Loader

核心与核心模块 在整个启动的过程当中,是否能够成功地驱动我们主机的硬件配备, 是核心 (kernel) 的工作!而核心一般都是压缩档,因此在使用核心之前,就得要将它解压缩后, 才能加载主内存当中. 另外,为了应付日新月异的硬件,目前的核心都是具有『可读取模块化驱动程序』的功能, 亦即是所谓的『 modules (模块化)』的功能! 核心与核心模块位置: 核心: /boot/vmlinuz 或 /boot/vmlinuz-version: 核心解压缩所需 RAM Disk: /boot/initr

Tiny4412 Android 启动流程

Android系统的启动主要包括三个阶段: ①BootLoader启动 ②Linux Kernel启动 ③Android系统启动 前面我们大致分析了前面两个步骤,即u-boot和内核的启动流程(内核启动流程待完善-_-!!),这次就来分析以下Linux内核启动之后是怎样挂载起Android这个"根文件系统"的.Android系统在Linux内核上运行了一系列的系统服务. 和Linux系统类似,Android系统中第一个被启动的进程也是init进程,它的PID为0.Android系统的i

centOS 6启动流程

centOS6启动流程 centOS6启动流程 linux内核组成 centos6启动大致流程 1.post加电自检 2.Boot Sequence 3.MBR引导 4.Grub启动 制作initramfs文件 grub.conf的参数 grub的功能 提供启动菜单.并提供交互式接口 加载用户选择的内核或操作系统 为菜单提供了保护机制 安装grub grub-install命令 grub交互式 5.启动 init 进程 6.登录 我们平时使用linux系统,点击电源键,电脑开机到我们输入账号密码

CentOS启动流程、Grub legacy配置、linux kernel模块管理、伪文件系统介绍

写在前面: 博客书写牢记5W1H法则:What,Why,When,Where,Who,How. 本篇主要内容: ● 启动相关基础概念汇总 ● 启动流程 ● init程序类型     /etc/rc.d/rc     chkconfig     /etc/rc.d/rc.sysinit ● GRUB legacy     命令行接口     配置文件 ● Linux Kernel     内核模块查看与管理         lsmod         modinfo         modprob