启动流程与内核管理

centos6和centos5启动流程与内核管理,启动过程中遇到的系统不能启动,各个阶段该怎么解决

Centos6和centos5

Linux: kernel+rootfs

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

rootfs:程序和glibc

库:函数集合, function, 调用接口(头文件负责描述)

过程调用:procedure,无返回值

函数调用:function

程序:二进制执行文件

v

内核设计流派:

单内核(monolithic kernel):Linux

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

微内核(micro kernel):Windows, Solaris

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

 

Linux内核特点:/lib/modules

支持模块化:.ko(内核对象)

如:文件系统,硬件驱动,网络协议等

支持内核模块的动态装载和卸载

模块查看:lsmod

模块安装:modprobe mod_name

模块卸载:modprobe -r mod_name

Rmmod

组成部分:

核心文件:/boot/vmlinuz-VERSION-release

ramdisk:辅助的伪根系统,放置有一些必要的驱动模块(破坏也会导致系统无法启动)

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

CentOS 6,7: /boot/initramfs-VERSION-release.img

模块文件:/lib/modules/VERSION-release(大多数放置位置)

 

启动流程

Post加电自检—-MBR引导(446B引导记录+46B磁盘分区表+2B标记位)—-GRUB—-加载内核—-启动init进程

 

Post-mbrstage1-stage1.5-stage2/boot/grub-grub.conf(kernel.initrd)-/sbin/init–/etc/inittab-id:N(启动的默认级别)-/etc/rc.d/rc.sysinit(系统初始化脚本)-/etc/rc.d/rcN.d/service(服务脚本)-/etc/init.d-/etc/rc.d/rc.local(最后一个脚本)–login

 

 

CentOS6启动流程

1.加载BIOS的硬件信息,获取第一个启动设备

2.读取第一个启动设备MBR的引导加载程序(grub)的启动信息

3.加载核心操作系统的核心信息,核心开始解压缩,并尝试驱动所有的硬件设备

4.核心执行init程序,并获取默认的运行信息

5.init程序执行/etc/rc.d/rc.sysinit文件

6.启动核心的外挂模块

7.init执行运行的各个批处理文件(scripts)

8.init执行/etc/rc.d/rc.local

9.执行/bin/login程序,等待用户登录

10.登录之后开始以Shell控制主机

 

 

如果/boot/initramfs-$(uname -r).img $(uname -r)被误删除用以下命令恢复

ramdisk文件的制作:

(1) mkinitrd命令

为当前正在使用的内核重新制作ramdisk文件

mkinitrd /boot/initramfs-$(uname -r).img $(uname -r)

(2) dracut命令

为当前正在使用的内核重新制作ramdisk文件

dracut /boot/initramfs-$(uname -r).img $(uname -r)

 

 

init程序的类型:

SysV: init, CentOS 5之前

配置文件:/etc/inittab

vUpstart: init,CentOS 6

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

vSystemd:systemd, CentOS 7

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

/etc/systemd/system

运行级别

/sbin/init  centos之前

为系统运行或维护等目的而设定,0-6,7个级别

0:关机

1:单用户模式(root自动登录),single 维护模式

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

3:多用户模式,正常模式,文本界面(字符界面)

4:预留级别:同3级别

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

6:重启

默认级别:3(字符界面)    5(图形界面)

切换级别:init  #

查看级别:runlevel    或者    who  -r

 

Centos6中/etc/inittab中定义了启动的默认级别 ,修改为3,那么启动的时候不加载图形界面,直接进入字符界面。(centos7不起作用)

 

在系统启动时,按任意键,看到系统进入一个界面,按a键进入编辑模式,可以定义用哪个界别进行启动

 

/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) 清理操作 

 

rc N –> 意味着读取/etc/rc.d/rcN.d/

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

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

 

注:1、S*打头的文件,为系统开启服务的文件,K*打头的文件,为系统关闭的服务文件

2、如果服务之间有依赖关系,如A依赖于B,那么开启的时候,会先开启所依赖的B服务,在开启A服务,关闭的时候,则先关闭A服务,在关闭B服务

 

 

chkconfig命令 (操作服务)

v查看服务在所有级别的启动或关闭设定情形:

chkconfig [–list] [name]

–add  name   添加

–del  name   删除

–level  LLLL:指定要设置的级别,省略时表示2345

–list name   在0-6级别该服务的开启状态

 

Xinetd管理的服务

Xinetd命令:管理一些在使用到该服务时,唤醒该服务的功能

瞬态服务被xinetd进程所管理

配置文件:/etc/xinetd.conf   /etc/xinetd.d/<service>

 

用chkconfig  命令也可以管理瞬态服务的开启和关闭

例: chkconfig  atd   off |on

 

/etc/rc.d/rc.local  可以把需要开机启动的服务放在这个文件下,计算机开机就会自动启动,但是不能用service命令进行管理,可以kill #发送信号进行停止中断

 

 

Centos启动流程(grub)

在grub启动时,分为三个阶段,分别是1,1.5和2,阶段,介绍一下3个阶段

  • stage1:加载MBR,bootloader
  • Stage1——5:MBR之后的27个扇区,让stage1中的BootLoader能够识别stage2所在的分区上的文件系统
  • Stage2:读取磁盘分区(/boot/grub/)

加载 / 需要找到/boot/grub/grub.conf 文件,若果丢失,系统无法启动

 

 

Grub.conf文件

 

Password  –encrypted   STRING     给用sha512算法给grub加密

 

实验:编写服务

  • 编写服务脚本:vim  testver

格式为:#!/bin/bash

#chkconfig :  35 99  00(35为运行级别,99为开启顺序,开启时最后开启00为关闭顺序,关闭时最先关闭)(开始号越大,关闭号则越小)

#description:This is a test service

Case  $1  in

Start)

Echo  testver  is  starting

;;

Stop)

Echo  testver  is  stoping

;;

Restart)

Echo  testver  is  stopped

Echo  testver  is  starting

;;

Status)

[ -f  /app/testver  ] && echo testver is running  || echo testver is stopped

  • 添加服务:

Chmod  +x  testver

Chkconfig  –add  testver

 

实验:删除内核文件,重新安装

  • 进入/boot目录,删除文件vmlinuz-`uname -r`
  • Reboot
  • 挂载光盘进入救援模式
  • 创建目录,将光盘挂载到该目录下,

Mkdir  /mnt/cdrom

Mount  /dev/sr0  /mnt/cdrom

  • 拷贝光盘中的/isolinux/vmlinuz文件到/boot目录下,并且改名

Cp  /mnt/cdrom/isolinux/vmlinuz  /mnt/sysimage/boot/vmlinuz-`uname -r`

  • 重启就可以进入系统

 

实验删除initramfs文件

模拟/boot/initramfs-$(uname -r).img $(uname -r)文件被删除,机器启动不了,修复方法:

  • 在centos6上删除/boot/initramfs-版本号.img 文件
  • 重启系统
  • 光盘启动,进入救援模式
  • 开启一个shell,切换到根目录 ,生成该文件

Chroot   /mnt/sysimage

Mkinitrd /boot/initramfs-`uname -r`.img `uname -r`

  • exit,exit,重启系统
  • 看到系统已经可以启动

 

实验:破坏MBR的前446个字节

  • 模拟破坏:dd  if=/dev/zero  of=/dev/sda  bs=1 count=446
  • 查看破坏情况: hexdump -C  -n  512   可以看到已经全部为0

 

  • 重启系统,可以看到系统直接进入光盘启动页面

 

  • 修复grub:

方法一:1、切根:chroot  /mnt/sysimage

2、修复:grub-install  –root-directory=DIR  /dev/DISK

在这里–root-directory=DIR指的是boot分区的上一级目录,因为boot分区的上一级目录时/ 所以可以默认不谢,/dev/DISK指的是/boot所在的磁盘

Grub-install  /dev/sda

方法二:1、输入  grub

2、root  (hd0,0)写boot所在磁盘的位置

3、输入   setup  (hd0)硬盘所在位置

用方法二进行修复的时候,需要用到stage1文件,需要确保该文件存在

  • 重启恢复

 

实验:破坏1.5阶段

  • 模拟破坏:dd if=/dev/zero of=/dev/sda bs=1 count=13000 skip=512 seek=512
  • 进入救援模式,修复grub
  • 切跟,执行grub-install  /dev/sda 修复完成
  • 修复完成之后,记得sync同步,等一会儿,等数据写完,在重启
  • 重启完成

 

实验:在LVM中删除boot目录和/etc/fstab文件

 

  • 删除rm -rf /boot  /etc/fstab
  • 进入救援模式
  • Lvdisplay 可以看到逻辑卷处于不可活动的状态
  • 激活LVM,   #:vgchange  -ay   ; lvdisplay  可以看到已经激活
  • 挂载逻辑卷

Mount  /dev/VolGroup/lv_root  /mnt/root

  • 编辑/etc/fstab文件,将/挂载

/dev/VolGroup/lv_root   /   ext4  defaults  0  0

/dev/sda1  /boot  ext4  defaults  0  0

  • 将系统重启,并且进入救援模式,可以看到已经可以切换根目录了
  • 将安装光盘进行挂载,挂载的时候会提示错误,是因为此时目录为只读模式,需要重新挂载为rw模式才可以使用

Mount  -o  remount,rw  /mnt/sysimage

Mount  /dev/cdrom  /mnt/cdrom

  • 挂载光盘完成后,就可以安装内核包

Rpm  -ivh  /mnt/cdrom/Package/kernel-XXX.rpm –root=/mnt/sysimage –force

  • 此时切换根,进入/boot目录,可以看到一些文件已经安装成功
  • 接下来,需要安装gurb 文件,

Grub-install  /dev/sda

安装完成后,记得等一段时间,敲几遍syne  等数据写入完成

  • 下面还缺失一个关键性文件,需要我们手动来建立,那就是conf

文件内容如下:

Default=0

Timeout=3

Title=yan

Kernel  /vmlinuz-版本号   root=/dev/VolGroup/lv_root

Initrd  /initramfs-版本号.img

保存退出

  • 重启系统,可以看到系统修复完成,已经可以登录
  • 将swap分区挂载

/dev/mapper/VolGroup/lv_swap  swap  swap  defaults 0  0

挂载完成,用free命令查看,可以看到swap大小

 

 

/procmulu

内核把自己内部状态信息及统计信息,以及可配置参数通过proc伪文件系统加以输出

 

/proc/sys

(1) sysctl命令用于查看或设定此目录中诸多参数

sysctl -w path.to.parameter=VALUE

sysctl -w kernel.hostname=mail.magedu.com

(2) echo命令通过重定向方式也可以修改大多数参数的值

echo “VALUE” > /proc/sys/path/to/parameter

echo “websrv” > /proc/sys/kernel/hostname

 

Sysctl命令

默认配置文件:/etc/sysctl.conf

  • 设置参数

Sysctl  -w  parameter=VALUE

  • 通过读取配置文件设置参数

Sysctl  -p  [/path/to/conf_file]

  • 查看所有生效参数

Sysctl  -a

 

常用的几个参数:

net.ipv4.ip_forward

net.ipv4.icmp_echo_ignore_all

vm.drop_caches

 

/sys目录:

sysfs:为用户使用的伪文件系统,输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的设定信息;有些参数是可以修改的,用于调整硬件工作特性

udev通过此路径下输出的信息动态为各设备创建所需要设备文件,udev是运行用户空间程序

专用工具:udevadmin, hotplug

udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d及/usr/lib/udev/rules.d目录下

 

编译安装内核

  • 模块之间存在依赖性

 

 

 

内核组成部分:1、放在vmlinuz-版本号-release中

2、放在/lib/modules/版本号-内核架构中

 

运行中的内核命令:uname

Uname  -r :显示内核版本

-n:显示节点号

-a:显示所有信息

lsmod命令:

显示由核心已经装载的内核模块

显示的内容来自于: /proc/modules文件

vmodinfo命令:

显示模块的详细描述信息 

modinfo [ -k kernel ] [ modulename|filename… ]

-n: 只显示模块文件路径

-p: 显示模块参数

-a: author 作者

-d: description 描述

-l: license 许可证

lsmod |grep xfs;modinfo xfs

 

装载或卸载内核模块

modprobe命令:

 

vmodprobe [ -C config-file ] [ modulename ] [ module parame-ters… ]

v配置文件:/etc/modprobe.conf, /etc/modprobe.d/*.conf

vmodprobe [ -r ] modulename. 

 

depmod命令:

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

装载或卸载内核模块:

vinsmod命令:指定模块文件,不自动解决依赖模块

insmod [ filename ] [ module options… ]

insmod `modinfo –n exportfs`

lnsmod `modinfo –n xfs`

vrmmod命令:卸载模块

rmmod [ modulename ]

rmmod xfs

rmmod exportfs

本文来自投稿,不代表Linux运维部落立场,如若转载,请注明出处:http://www.178linux.com/90780

(0)
燕李鹏燕李鹏
上一篇 2018-01-02 09:21
下一篇 2018-01-02 18:42

相关推荐

  • Redis高可用架构(1)—Keepalive+VIP

    最近整理一下Redis高可用架构的文档,也准备分享出来,虽然这些架构也不是很复杂。Redis的高可用方案目前主要尝试过5种方式,其中2种方式已经在线上使用。 1)Redis Master-Slave + Keepalive + VIP。这是很经典的db架构,也可以用与mysql的主从切换。基本原理是:Keepalive通过脚本检测master的存活,然后通过…

    Linux干货 2016-04-13
  • 网卡别名和bonding——让你的网络接口更加稳定

    网卡配置文件: 1、IP/NETMASK/GW/DNS等属性的配置文件:/etc/sysconfig/network-scripts/ifcfg-IFACE     IFACE:接口名称 2、路由的相关配置文件(默认无此文件):/etc/sysconfig/network-scripts/route-IFACE 3、配置文件/etc/sy…

    Linux干货 2016-09-05
  • 正则表达式简述

    正则表达式简述 什么是正则表达式: 正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些符合某个模式的文本。 正则表达式分类: 标准正…

    Linux干货 2016-04-05
  • Linux文本处理及用户组管理命令练习

    一.文本处理基础命令 (1).  列出当前系统上所有已经登录的用户的用户名。           完成命令:who  |  cut  -d’ ‘  -f1  |  uniq  -u 示例: (2).取出最后登录到当前系统对的用户的相关信息。         完成命令:w  |  tail -1 示例: (3).取出当前系统上被用户当作…

    2018-03-11
  • nginx

    Linux干货 2016-10-30
  • 马哥教育网络班22期第二周课程练习1-未闻花名

    1、Linux管理文件和目录的命令 命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touch 创建文件 mv 移动文件 rm 删除文件 rmdir 删除目录 1.1 pwd命令 该命令的英文解释为print working directory(打…

    Linux干货 2016-08-22