Linux开机启动过程浅析

Introduction

开机启动过程分为以下6个步骤,分别是BIOS, MBR, GRUB, Kernel, Init, RunLevel, RunDefinition

BIOS

按下电源开关那一刻,开始加载BIOS,并且执行MBR(Master Boot Record)

BIOS表示基本输入输入系统(Basic Input/Output System),完成一些系统的完整性检查、搜索、

加载并且执行引导程序(boot loader), 它在软盘,CD-ROM或者硬盘上寻找引导程序。你可以在

系统启动时按下键盘(通常是F12或者F2,但是因系统而异)来修改启动顺序

一旦引导程序被检测到并且加载到内存,BIOS会将控制权移交给它

MBR

MBR表示主引导记录(Master Boot Record)

用于加载并执行GRUB

GRUB

GRUB是多重引导管理器(GRand Unified Bootloader)

执行 /etc/grub.conf, 加载内核镜像

vim /etc/grub.conf

default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS 6 (2.6.32-504.el6.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/vg_ddz-lv_root rd_NO_LUKS rd_NO_MD rd_LVM_LV=vg_ddz/lv_root crashkernel=128M LANG=zh_CN.UTF-8 rd_LVM_LV=vg_ddz/lv_swap KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
initrd /initramfs-2.6.32-504.el6.x86_64.img

Kernel

执行内核首个进程 /sbin/init, 进程号为1, 是接下来所有其它进程的父进程

initrd表示Initial RAM Disk

initrd被内核用作临时的根目录,直到内核启动完成并且真正的根目录挂载成功。

它也包括一些编译好的必要的驱动程序,这些程序有助于它访问硬盘和其他硬件

Init

  1. 执行 /etc/inittab, 来确定启动级别

    vim /etc/intttab
# Default runlevel. The runlevels used are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode (终端模式)
# 4 - unused
# 5 - X11(图形用户界面)
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:
  1. 执行 /etc/rc.d/rc.sysinit, 来启动系统进程,比如说NetWork

RunLevel

执行启动级别相对应的一系列系统服务

对应启动级别的目录如下

ll /etc/rc.d/

drwxr-xr-x. 2 root root  4096 11月 29 09:49 rc0.d
drwxr-xr-x. 2 root root 4096 11月 29 09:49 rc1.d
drwxr-xr-x. 2 root root 4096 3月 10 17:18 rc2.d
drwxr-xr-x. 2 root root 4096 3月 10 17:18 rc3.d
drwxr-xr-x. 2 root root 4096 3月 10 17:18 rc4.d
drwxr-xr-x. 2 root root 4096 3月 10 17:18 rc5.d
drwxr-xr-x. 2 root root 4096 11月 29 09:49 rc6.d

RunDefinition

最后执行 /etc/rc.d/rc.local, 来运行自定义的服务

vim /etc/rc.d/rc.local

  1 #!/bin/sh
2 #
3 # This script will be executed *after* all the other init scripts.
4 # You can put your own initialization stuff in here if you don't
5 # want to do the full Sys V style init stuff.
6
7 touch /var/lock/subsys/local
8 if test -f /sys/kernel/mm/transparent_hugepage/enabled; then
9 echo never > /sys/kernel/mm/transparent_hugepage/enabled
10 fi
11 if test -f /sys/kernel/mm/transparent_hugepage/defrag; then
12 echo never > /sys/kernel/mm/transparent_hugepage/defrag
13 fi
14
15 /bin/bash /usr/local/apps/kylin/bin/kylin.sh start

其中第15行为自定义启动脚本

Final

进入登录界面

参考文献

http://blog.csdn.net/napolunyishi/article/details/18710971

http://blog.chinaunix.net/uid-26495963-id-3066282.html

Linux入门——开机启动过程浅析的更多相关文章

  1. linux的开机启动过程:

    简单视图 按下电源开关 开机自检(BIOS)弹笔记本logo的时候,检查cpu 硬盘 这些硬件问题 MBR引导 一般是通过硬盘启动系统 GRUB的菜单 黑底白字有个倒数计时 可以选择内核 yum命令可 ...

  2. Linux系统入门---开机启动流程

    目录 Linux系统入门---开机启动流程 一.centos6 二.systemd管理进程 1.查看级别 三.centos7实践案例: 1.案例1:centos7系统,单用户修改root密码 案例2: ...

  3. LINUX开机启动过程

    LINUX开机启动过程 启动第一步--加载BIOS当你打开计算机电源,计算机会首先加载BIOS信息,BIOS信息是如此的重要,以至于计算机必须在最开始就找到它.这是因为BIOS中包含了CPU的相关信息 ...

  4. 探索 Linux 系统的启动过程

    引言 之所以想到写这些东西,那是因为我确实想让大家也和我一样,把 Linux 桌面系统打造成真真正正日常使用的工具,而不是安装之后试用几把再删掉.我是真的在日常生活和工作中都使用 Linux,比如在 ...

  5. 走进Linux之systemd启动过程

    Linux系统的启动方式有点复杂,而且总是有需要优化的地方.传统的Linux系统启动过程主要由著名的init进程(也被称为SysV init启动系统)处理,而基于init的启动系统被认为有效率不足的问 ...

  6. Linux系统的启动过程

    Linux 系统启动过程 Linux系统的启动过程可以分为5个阶段: BIOS自检 内核的引导. 运行init. 系统初始化. 用户登录系统. BIOS自检: BIOS是英文"Basic I ...

  7. 跟踪分析Linux内核的启动过程小解

    跟踪分析Linux内核的启动过程 “20135224陈实  + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029 ...

  8. [中英对照]Booting Process in Linux RHEL 7 | Linux RHEL 7启动过程

    Booting Process in Linux RHEL 7 | Linux RHEL 7启动过程 In this post, I will guide you booting process in ...

  9. 20135239 益西拉姆 linux内核分析 跟踪分析Linux内核的启动过程

    回顾 1.中断上下文的切换——保存现场&恢复现场 本节主要课程内容 Linux内核源代码简介 1.打开内核源代码页面 arch/目录:支持不同CPU的源代码:其中的X86是重点 init/目录 ...

随机推荐

  1. "_OBJC_CLASS_$_MAMapServices", referenced from: 的问题修复

    今天将高德地图集成到ios模拟器编译出现了一个错误 Undefined symbols for architecture x86_64: "_OBJC_CLASS_$_MAMapServic ...

  2. 使用Python的requests库进行接口测试——session对象的妙用

    from:http://blog.csdn.net/liuchunming033/article/details/48131051 在进行接口测试的时候,我们会调用多个接口发出多个请求,在这些请求中有 ...

  3. 二维码开源库ZBar-实现中文解码

    中文乱码 上篇<ZBar-windows下编译和使用>已经成功解析了条形码,但目标是二维码,经测试二维码中文会出现乱码.下图二维码的内容是"http123测试456", ...

  4. win8 -telnet安装

    控制面板->程序-> 启动或关闭windows功能->选择telnet服务器和telnet客户端->确定 为了安全起见,我们可以设置为手动器用telnet,右键计算机-> ...

  5. 如何用vue-cli初始化一个vue项目

    单文件组件和vue-loader 解析打包.vue文件 vue为了能够使我们在项目开发中对组件进行更好的维护,提供了一个单文件组件系统,vue把每一个独立的组件放在一个.vue的文件中,在这个文件中提 ...

  6. laravel服务容器-----深入理解控制反转(IoC)和依赖注入(DI)

    首先大家想一想什么是容器,字面意思就是盛放东西的东西,常见的变量,对象属性都是容器,一个容器能够装什么东西,完全在于你对这个容器的定义.有的容器不仅仅只是存文本,变量,而是对象,属性,那么我们通过这种 ...

  7. Go语言获取命令行参数

    package main import ( "os" "fmt" ) func main() { args := os.Args //获取用户输入的所有参数 { ...

  8. angularjs 控制器、作用域、广播详解

    一.控制器 首先列出几种我们平常使用控制器时的几种误区: 我们知道angualrJs中一个控制器时可以对应不同的视图模板的,但这种实现方式存在的问题是: 如果视图1和视图2根本没有任何逻辑关系,这样& ...

  9. Python后端(一)——客户端/服务端

    网址组成(四部分) 协议      http, https(https 是加密的http) 主机      g.cn zhihu.com之类的网址 ,因此一般不用填写 路径      下面的「/」和「 ...

  10. 在Angular中利用trackBy来提升性能

    在Angular的模板中遍历一个集合(collection)的时候你会这样写: <ul> <li *ngFor="let item of collection"& ...