linux启动及内核管理

一:Linux 系统系统的组成

Linux由kernel和rootfs组成,那么什么是kernel,什么是rootfs呢?
kernel:操作系统内核,操作系统内核是指大多数操作系统的核心部分。kernel用于进程管理、内存管理、网络管理、驱动程序、文件系统、安全功能
rootfs:程序和glibc。rootfs之所以存在,是因为需要在VFS机制下给系统提供最原始的挂载点。VFS是Linux文件系统实现必须遵循的一种机制,rootfs是一种具体实现的文件系统、Linux下所有文件系统的实现都必须符合VFS的机制(符合VFS的接口);这就是二者的真正关系。
库:函数集合, function, 调用接口(头文件负责描述)
程序:二进制执行文件


二:系统启动过程

操作系统的启动分为两个阶段:引导boot和启动startup。引导阶段开始于打开电源开关,结束于内核初始化完成和 systemd 进程成功运行。启动阶段接管了剩余工作,直到操作系统进入可操作状态

引导boot阶段

1:POST: Power-On-Self-Test,加电自检,是BIOS功能的一个主要部分。负责完成对CPU、主板、内存、硬盘子系统、显示子系统、 串并行接口、键盘、 CD-ROM光驱等硬件情况的检测。
2:读取MBR
1.Stage 1: BIOS 将查找在接入的磁盘中查找引导记录,其通常位于 MBR(主引导记录Master Boot Record),它加载它找到的第一个引导记录中到内存中,并开始执行此代码。引导代码(即阶段 1 代码)必须非常小,因为它必须连同分区表放到硬盘的第一个 512 字节的扇区中。该阶段的主要工作就是查找并加载第二段Bootloader程序(stage2),但系统在没启动时,MBR根本找不到文件系统,也就找不到stage2所存放的位置,因此,就有了stage1_5
Stage 1.5 在该阶段,系统会加载一个存放在分区外的镜像文件initrd。该文件在系统引导过程中挂载的一个临时根文件系统,用来支持两阶段的引导过程。initrd文件中包含了各种可执行程序和驱动程序,它们可以用来挂载实际的根文件系统,然后再将这个 initrd RAM磁盘卸载,并释放内存。

Stage 2 /initramfs-$(uname -r).img,需要挂载/dev/sda2前提是有ext4.ko。 GRUB程序会根据/boot/grub/grub.conf文件查找Kernel的信息,然后开始加载Kernel程序,当Kernel程序被检测并在加载到内存中,GRUB就将控制权交接给了Kernel程序。简单说就是:加载内核挂载根文件系统

练习:删除centos6中的/boot/grub/grub.conf文件,并重启。先使系统临时启动后,再重新编写grub.conf文件,以使下次开机后自动启动。

在删除该文件后发现,机器还能正常运行,但是当我们重启呢?发现机器不能正常启动了。

接下来我们按照如下操作进入系统,再详细讲解该文件的作用。

接下来我们来学习一下这个文件。看它具体是什么功能。


    #boot=/dev/sda

    default=0        #设定默认启动的title的编号,从0开始

    timeout=5       #等待用户选择的超时时间

    splashimage=(hd0,0)/boot/grub/splash.xpm.gz    #GRUB的背景图片

    hiddenmenu     #隐藏菜单

    title CentOS (2.6.18-194.el5PAE)      #内核标题

        root (hd0,0)         #内核文件所在的设备

        kernel /vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/     #内核文件路径以及传递给内核的参数

        initrd /initrd-2.6.18-194.el5PAE.img                            #ramdisk文件路径

2:启动startup阶段 (服务)

init进程是所有Linux进程的父进程,它的进程号为1。init命令是Linux操作系统中不可缺少的程序之一,init进程是Linux内核引导运行的,是系统中的第一个进程。
接下来我们在学习一个文件:/etc/inittab

id:runlevels:action:process

id 用来定义在inittab文件唯一的条目编号,长度为 1-4个字符
runlevels 列出来运行的级别 为空则代表所有级别
action 要执行的动作
process 要执行的程序

id:3:initdefault:

id 就使用id本身来定义
3 就是列出的运行级别
initdefault
这个动作就是设定默认的运行级别,如果前面runlevels不指定运行级别,那么会在启动时在终端询问,这一行不需要process这一段

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

id 是 si 只是用来标识
runlevels 为空则代表的是 所有的运行级别
sysinit 是指在系统启动时执行后面的process(也就是/etc/rc.d/rc.sysinit)
/etc/rc.d/rc.sysinit 这是一个系统初始化脚本,这个脚本里面初始化很多的进程
/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) 清理操作

服务启动管理
chkconfig autofs on
chkconfig autofs off
chkconfig autofs on --level 35
service autofs start
service autofs stop
service autofs status
service autofs reload

/etc/init.d/autofs start|stop|status|reload

通过这些命令可以修改服务在不同模式下的开关状态。图片中显示的是在不同模式下服务的开关状态。
之前讲的那些服务都是频繁用的服务,但是那些不经常用的服务呢?如果让他们一直开着就会很浪费资源,这种情况下就产生了这样一种策略,让这些不经常用的服务睡下去,等到需要她们了再把它们叫醒,那么就要有一个叫醒他们的服务:Xinetd服务。由Xinetd统一去叫醒那些沉睡的服务。下面我们讲一下Xinetd服务
Xinetd自身是一个SysV服务,激活与禁用的方式是:chkconfig daemon on/off等价于修改/etc/xinetd.d/daemon disable = no/yes
使修改生效要重启/etc/init.d/xinetd restart



接下来我们来做几个实验。
1.删除/boot/grub/除grub.conf以外的所有文件,重启,发现还能启动

2.破坏grub,发现启动不了,按如下方式修复。

    dd if=/dev/zero of=/dev/sda bs=1 count=446

 进入rescue
    chroot /mnt/sysimage
    grub-install /dev/sda
 kernel /vmlinuz.... ro root=/dev/sda2 selinux=0
vim /etc/selinux/config
    SELINUX=disabled


3.接着删除 /boot/grub/除grub.conf以外的所有文件,发现无法启动。


这是因为原本的操作系统有stage2的文件,后来grub-install将原来的给覆盖了,所以我们只需要再将stage2 找回来就好了。

4.破坏sda1 ,发现系统直接损坏。

dd if=/dev/zero of=/dev/sda bs=1 count=10240 seek=512
    rescue
    chroot /mnt/sysimage
    grub-install /dev/sda #恢复/boot/grub/stage 文件
    grub
        root(hd0,0)
        setup (hd0)



原文地址:http://blog.51cto.com/13560258/2093512

时间: 2024-11-02 03:29:28

linux启动及内核管理的相关文章

Linux 第20天: (09月12日) Linux启动和内核管理

本章内容 CentOS 5和6的启动流程服务管理Grub管理自制Linux启动排错编译安装内核 Linux组成Linux: kernel+rootfskernel: 进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能rootfs:程序和glibc库:函数集合, function, 调用接口(头文件负责描述)过程调用:procedure,无返回值函数调用:function程序:二进制执行文件内核设计流派:单内核(monolithic kernel):Linux把所有功能集成于同一个程序微内

Linux启动和内核管理

系统启动和内核管理 Linux组成 Linux:kerne+rootfs(应用程序) kernel:进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 roots:程序和glibc 函数:相当于命令的集合 库:函数集合,function,调用接口(头文件负责描述) 过程调用:procedure,无返回值 函数调用:function 程序:二进制执行文件 内核设计: 单内核(monolithic kernel):Linux 把所有功能集成于一个同一个程序 微内核(micro kernel)

Linux入门之内核管理番外篇(4)udev入门(1)

Linux入门之内核管理番外篇(4)udev入门(1) 前言 在上篇中的内核模块管理讲解中,最后或多或少会留下一些疑问,那么这些疑问就是内核模块的参数是怎么和对应的硬件所匹配上的,而硬件又是怎么被内核识别,并且一个个都映射成实际存在的文件,而这些文件之间的关系及作用.当然在最后了解到,这些硬件设备的探测信息是通过一个叫udev的工具来实现的,通过udev中配置的规则可以很有效的识别每一个硬件,并配合sysfs文件系统,将每个探测到的硬件信息导入到/sys目录中,那么与/proc目录对与内核系统信

启动和内核管理

一.启动和内核管理 1)CentOS 5和6的启动流程 2)服务管理 3)Grub管理 4)自制Linux 5)启动排错 6)编译安装内核 二.linux组成   Linux:kernel+rootfs kernel:进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能(selinux) rootfs:程序和glibc    库:函数集合,无返回值 函数调用:function 程序:二进制执行文件 Linux内核特点:支持模块化:.ko(内核对象)如:文件系统,硬件驱动,网络协议等 支持内

Linux 自学笔记——内核管理初步及编译

Linux Kernel: 内核设计体系:单内核.微内核: 内核的组成部分: 1.Kernel:内核核心,一般为bzimage,通常位于/boot目录,名称为vmlinuz-VERSION-release: 2.Kernel object:内核对象,即内核模块,一般放置于/lib/modules/VERSION-release/,maninfo命令通过读取此文件的信息以显示相关信息: 内核模块与内核核心版本一定要严格匹配: []:N: [M]:Module,编译进模块中: [*]:Y,编译进内核

Linux系统管理(一)Linux设备和内核管理

设备和内核管理 一.  设备管理概述 1.Linux设备的分类 字符设备(c):以字符为单位,传输速率较低,无需缓冲区. 块设备(b):以数据块为单位组织和传输数据,需要建立缓冲区 网络设备(s):一种通过SOCKET接口进行主机通信的设备 2.设备文件 (1)功能 用于用户访问设备进行输入和输出操作 (2)常见的设备文件 /dev/hd*   IDE接口的硬盘(IDE接口的设备) /dev/sd*   SCSI/USB设备 /dev/cua*  串口设备 /dev/lp*  并口设备 /dev

Linux-系统启动和内核管理

本章内容 CentOS 5和6的启动流程 服务管理 Grub管理 自制Linux 启动排错 编译安装内核 CentOS7启动流程 Unit介绍 服务管理和查看 启动排错 破解口令 修复grub2 Linux组成 Linux: kernel+rootfs kernel: 进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能 rootfs:程序和glibc 库:函数集合, function, 调用接口(头文件负责描述) 过程调用:procedure,无返回值 函数调用:function 程序:

Linux 0.12 内核管理存储器

其分段,用分段的机制把进程间的虚拟地址分隔开. 每一个进程都有一张段表LDT.整个系统有一张GDT表.且整个系统仅仅有一个总页表. 其地址翻译过程为: 程序中给出的32位地址(实际上被看做段内偏移地址),再依据代码段寄存器CS中的16位段选择子,可在GDT或LDT中查找对应的段描写叙述符.从段描写叙述符中提取段的基地址,与程序给出的32位地址相加.得到结果为线性地址. 依据此线性地址查找系统页文件夹表,再查二级或是多级页表,终于得到物理地址. 此方式系统仅仅有一个4G的线性地址空间由各进程共享(

Linux系统启动和内核管理

Linux组成 由 kernel 和 rootfs 组成 单内核:(进程管理,内存管理,网络管理, 驱动程序,文件系统, 安全功能) /boot/vmlinuz-VERSION-release 辅助的伪根系统 /boot/initramfs-VERSION-release.img            这是一个cpio格式的归档文件,存放的是各种驱动模块 md5sum vmlinuz /boot/vmlinuz       查看两个文件中的内容是否完全一致,只要有一个字符不一样,两个文件的md5