启动流程与内核管理

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
下一篇 2018-01-02

相关推荐

  • 网络班22期学习宣言

    马哥Linux运维学院 学习宣言 亲爱的小伙伴:        欢迎大家报名马哥Linux运维网络学习班,跟随马哥学习Linux技术,成就Linux大牛之梦。在这里,我们不仅可以学习到最优秀的技术课程,还可以跟着追梦的小伙伴们一起学习、一起进步。 为了督促大家一直积极认真努力的学习,请各位同学在评论区写出你的学习宣言。…

    Linux干货 2016-08-03
  • 文件查找与解压缩

    文件查找 脚本文件名的查询 which(寻找执行文件) which [-a] command -a :将所有由PATH目录中可以找到的命令均列出,而不只是第一个被找到的命令名称 文件名的查找 文件查找:实时查找:遍历所有文件进行条件匹配;(find)非实时查找:根据索引查找;(whereis、locate) whereis whereis [-bmsu] […

    Linux干货 2017-04-08
  • N24_jerry 第十二周作业

    1、请描述一次完整的http请求处理过程; 简介 一次完整的HTTP请求过程从TCP三次握手建立连接成功后开始,客户端按照指定的格式开始向服务端发送HTTP请求,服务端接收请求后,解析HTTP请求,处理完业务逻辑,最后返回一个HTTP的响应给客户端,HTTP的响应内容同样有标准的格式。无论是什么客户端或者是什么服务端,大家只要按照HTTP的协议标准…

    Linux干货 2017-03-22
  • Linux文件管理相关命令、bash特性及元数据

    一、 Linux上的文件管理类命令及其常用的使用方法。 1、cp命令:copy     源文件、目标文件         单源复制cp [OPTION]…[-T] SOURCE DEST   &nb…

    2017-07-09
  • 0809作业

    4、如何设置tab缩进为4个字符? 在/etc/vimrc中加入一行 set ts=4 保存退出 5、复制/etc/rc.d/init.d/functions文件至/tmp目录;替换/tmp/functions文件中的/etc/sysconfig/init为/var/log; :%s@/etc/sysconfig/init@/var/log@g 6、删除/t…

    Linux干货 2016-08-11
  • ELK-5.5.1部署

    ELK简介 ELK Stack是软件集合Elasticsearch、Logstash、Kibana的简称,由这三个软件及其相关的组件可以打造大规模日志实时处理系统。 其中,Elasticsearch 是一个基于 Lucene 的、支持全文索引的分布式存储和索引引擎,主要负责将日志索引并存储起来,方便业务方检索查询。 Logstash是一个日志收集、过滤、转发…

    2017-12-04