系统启动及故障排错和内核管理

(一)Linux组成结构

  • Linux: kernel+rootfs
    kernel: 进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
  • rootfs: 程序和glibc
  • 库:函数集合, function, 调用接口(头文件负责描述)
  • 过程调用:procedure ,无返回值
  • 函数调用:function
  • 程序:二进制执行文件

(1)内核介绍

(1)Linux 内核特点:
  • 支持模块化:.ko (内核对象)
  • 如:文件系统,硬件驱动,网络协议等
  • 支持内核模块的动态装载和卸载
(2)组成部分
  • 核心文件:
  • /boot/vmlinuz- VERSION -release
  • ramdisk :辅助的伪根系统
  • CentOS 5: /boot/initrd- VERSION-release.img
  • CentOS 6,7: /boot/initramfs- VERSION -release.img
  • 模块文件:/lib/modules/ VERSION-release

(二)CentOS6启动流程

Linux启动流程解析图解

(1) POST自检:

系统接通电源时自动检测CPU,内存,主板,显卡,声卡,网卡等I/O设备,如果设备正常则进行下一启动步骤。

(2) MBR引导

MBR(Master Boot Record) MBR记录一般是在磁盘 0 磁道 1 扇区,共512个字节。前446个字节是BootLoder,后 4*16 的 64 个字节是存放分区信息的,最后 2 个字节是校验信息,一般是 55AA。

(3) MBR引导GRUB(GRand Unified Bootloader)

Bootloader的工作机制:bootloader可以访问文件系统,而内核则作为文件而存在。bootloader访问内核文件时,是将内核文件Vmlinz所在的整个分区当作根去访问的。我们常用的内核加载器是GRUB(Grand UnifiedBootloader),因此由grub来加载内核。

  # grub文件内部的所有内容
  [root@vinny grub]# ll
  total 280
  -rw-r--r--. 1 root root     63 Jun 19 00:39 device.map
  -rw-r--r--. 1 root root  13428 Jun 19 00:39 e2fs_stage1_5
  -rw-r--r--. 1 root root  12636 Jun 19 00:39 fat_stage1_5
  -rw-r--r--. 1 root root  11780 Jun 19 00:39 ffs_stage1_5
  -rw-------. 1 root root    771 Jun 19 00:39 grub.conf
  -rw-r--r--. 1 root root  11772 Jun 19 00:39 iso9660_stage1_5
  -rw-r--r--. 1 root root  13284 Jun 19 00:39 jfs_stage1_5
  lrwxrwxrwx. 1 root root     11 Jun 19 00:39 menu.lst -> ./grub.conf
  -rw-r--r--. 1 root root  11972 Jun 19 00:39 minix_stage1_5
  -rw-r--r--. 1 root root  14428 Jun 19 00:39 reiserfs_stage1_5
  -rw-r--r--. 1 root root   1341 Nov 15  2010 splash.xpm.gz
  -rw-r--r--. 1 root root    512 Jun 19 00:39 stage1
  -rw-r--r--. 1 root root 126148 Jun 19 00:39 stage2
  -rw-r--r--. 1 root root  12040 Jun 19 00:39 ufs2_stage1_5
  -rw-r--r--. 1 root root  11380 Jun 19 00:39 vstafs_stage1_5
  -rw-r--r--. 1 root root  13980 Jun 19 00:39 xfs_stage1_5

根据上边的所有展示内容,发现很多后缀相同的文件device.map,menulst,stage1,stage2,以及一系列的stage1_5组成。一下是我对这些文件的解读,说错了请大牛纠正。

  • device.map 可能是启动系统的时候,一些需要加载的驱动模块,和分区信息的地图。我们现在出门都需要地图,更何况刻板认真的计算机。

  • menu.lst 是grub.conf的链接文件,当我们启动系统的时候,会有一个选择功能选择菜单,等下免我会详细介绍。

  • stage:grub引导程序过于庞大,所以在启动过程中分为三个阶段进行:第一阶段存放在MBR中第二阶段存放于内核文件系统中。第二阶段没有文件系统,怎么访问呢。这个时候出现了stage1_5阶段,反正就是想办法让第二阶段启动,所以这个地方出现了很多stage1_5为后缀的文件。

  • grub.conf 文件参数意义

     # grub.conf generated by anaconda
     default=0  # 默认启动的内核title, 0 表示是第一个  
     timeout=5 # 默认等待时间  
     splashimage=(hd0,0)/grub/splash.xpm.gz  # 指定菜单的背景图片的路径。为xpm格式,采用gzip压缩,只能为14bits色  
     hiddenmenu # 隐藏菜单  
     title CentOS 6 (2.6.32-696.el6.x86_64)  
     # 标题名,用户可自定义
     root (hd0,0)  
     # 指定 grub 的根位置   
     # 指定 kernel 文件的位置,还要指出 root(系统启动后) 的位置,挂载方式 ro,这项很关键。  
             # 加载后会启动 init 进程。
             kernel /vmlinuz-2.6.32-696.el6.x86_64 ro root=UUID=0861b596-c806-4895-97b3-2ef308bdc6a3 nomodeset rd_NO_LUKS  KEYBOARDTYPE=pc KEYTABLE=us LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_NO_LVM rd_NO_DM rhgb quiet
              # 在内核启动过程中装载根文件系统时有用  
             initrd /initramfs-2.6.32-696.el6.x86_64.img
    

(4)引导加载器程序GRUB

(1)grub legacy

GRUB是bootloader阶段的一个程序,这是Centos中最常用的引导程序,CentOS 6安装的是grub legacy。

CentOS 6的grub legacy

按e:进入编辑模式,用于编辑菜单
编辑模式

然后按c: 进入命令模式,交互式接口
交互式界面

这个界面就和上边联系起来了 ,假如你不会写的话,可以敲help就可以查看帮助。
grub>后边需要跟上本文中grub.conf 文件参数意义里边的内容。

(5) 进入kernel

在GRUB中选择对应的kernel进入,然后kernel会对自身进行初始化,始化系统中各设备并做相关的配置工作,其中包括CPU、I/O、存储设备等。运行用户空间的第一个应用程序,在CentOS 6上是init,在CentOS 7上是Systemd。

(1)读取/etc/inittab来读取默认级别
    # Default runlevel. The runlevels used are:

    #   0 - halt (Do NOT set initdefault to this)
    #0:关机
    #   1 - Single user mode
    #1:单用户模式(root, 无须登录), single, 维护模式
    #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
    #2: 多用户模式,会启动网络功能,但不会启动NFS;维护模式;
    #   3 - Full multiuser mode
    #3:多用户模式,正常模式;文本界面;
    #   4 - unused
    #4:预留级别;可同3级别;
    #   5 - X11
    #5:多用户模式,正常模式;图形界面;
    #   6 - reboot (Do NOT set initdefault to this)
    #6:重启
    id:5:initdefault:

注意:上边的最后一行是制定每次启动时后的默认启动级别,修改它就是修改你的默认启动级别。
如果要查看当前系统运行的init级别可使用runlevel或者who -r

(2)执行初始化系统脚本 /etc/rc.d/rc.sysinit 来初始化脚本

这个脚本里边有很多内容,这里就不一一列举了,只是把它做的事情给列出来。

    # 获取网络环境与主机类型。首先会读取网络环境设置文件"/etc/sysconfig/network",获取主机名称与默认网关等网络环境。  
    # 打印文本欢迎信息。  
    # 挂载/etc/fstab文件中定义的其它文件系统。  
    # 激活swap  
    # 检测根文件系统,并以读写方式重新挂载  
    # 决定是否启动SELinux和udev。  
    # 接口设备的检测  
    # 用户自定义模块的加载。用户可以再"/etc/sysconfig/modules/*.modules"加入自定义的模块,此时会加载到系统中。  
    # 加载核心的相关设置。按"/etc/sysctl.conf"这个文件的设置值配置功能。  
    # 设置系统时间(clock)。  
    # 设置终端的控制台的级别。  
    # 设置raid及LVM等硬盘功能。  
    # 以方式查看检验磁盘文件系统。  
    # 进行磁盘配额quota的转换。  
    # 重新以读取模式载入系统磁盘。  
    # 启动quota功能。  
    # 启动系统随机数设备(产生随机数功能)。  
    # 清楚启动过程中的临时文件。  
    # 将启动信息加载到"/var/log/dmesg"文件中。
(3)然后执行 /etc/rc.d/rc 脚本

当你选择默认模式为3的时候,默认会读取/etc/rc.d/rc3.d 下的所有脚本,来控制系统启动的时候启动或者关闭哪些服务。这里面的脚本大致分为以S 开头的和以 K 开头的脚本。 S 代表开机时启动的,K 表示开机时不启动。
排序的说明:服务的启动可能会产生依赖的情况。所以无法避免的会出现排序的情况。比如说:S20S198来说会先执行S199后执行S22,是先S2S1比较,之后在比较S20S19以此类推。数字越小越先运行;数字越小的服务,通常为依赖到别的服务;

  • chkconfig命令:查看每个服务对应级别的开关,以及设置相关服务对应级别上的开关;
  • 增加服务:chkconfig --add srv_name 可以将自己写的一些脚本,让此命令统一管理。
  • 删除服务:chkconfig --del srv_name 将服务删除,意思就是服务不由chkconfig这种机制来管理
  • chkconfig srv_name {on|off}设置服务开机是否自启动,默认管理的级别是2345. 指定默认级别,可以与其他选项一起使用

注意:正常级别下,最后启动的一个务:S99local指向了/etc/rc.d/rc.local脚本,且有又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中;
【注意】:正常级别下,最后启动一个服S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本;因此,不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中。

(6) 手工配置系统启动配置

(1)系统服务脚本的特点
  • 基本都可以提供start|stop|restart|status这几个状态值的接收
  • 服务脚本存放位置,所有的系统服务脚本都放在/etc/rc.d/init.d文件夹中
    系统服务脚本
(2)服务脚本的编写格式

格式详解

其中,有三行格式是必须要写上的#!/bin/bash,#/chkconfig,#description
# chkconfig: runlevels SS KK【SS:表示开始运行的次序,KK:表示关闭程序的次序,-表示都不启动】 因此可以手动编写系统服务:

  • (1)把服务脚本放置/etc/init.d目录下
  • (2)使用chkconfig –add 添加到系统服务
  • (3)重启系统让服务生效
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352

推荐阅读更多精彩内容