Linux 启动详解1

在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为:

     1. /sbin/init

     2. /etc/inittab

     3. /etc/rc.d/rc.sysinit

     4. /etc/rc.d/rcN.d //这是几个文件夹N代表数字1,2,3,4..

     5. /etc/fstab

文件介绍:

1.关于/sbin/init与/etc/inittab

关于/sbin/init ,它是一个二进制可执行文件,为系统的初始化程序,而/etc/inittab是它的配置文件,我们可以通过/etc/inittab来一睹 它的功能, 里面的内容是一种固定的文本格式,id:runlevels:action:process

我们来通过它的内容来学习它之前,先了解写运行级别的分类(0-6):

     0: 关机 half

     1: 单用户模式 singel user

     2: 多用户模式 multi user , 不提供nfs服务 without nfs

     3: 完全多用户字符模式 full multiuser text mod

     4: 系统预留 officially undefined

     5: 图形登录界面 graphical login

     6: 重启 reboot

2. 关于etc/rc.d/rc.sysyinit 和 /etc/rc.d/rc.Nd

在inittab文件中,我们了解到rc.sysinit是系统运行的第一个脚本,那么它的作用都有哪些呢?如果有shell脚本基础的话可以用vim打开这个文件来看看,它有900多行...是linux里最牛的脚本,总结下它的作用,有如下几点:(一定要牢记,必要时我们要重写它!

1. 激活udev和selinux

2. 通过读取/etc/sysct1.conf来设置内核参数

3. 设置系统时钟

4. 设置键盘映射

5. 启动交换分区。

6. 设置主机名

7. 检查跟文件系统,并且如果没有错误,以读写的方式来重新挂载文件系统 (重要)

8. 激活raid和lvm设备

9. 启动磁盘限额

10 挂载其他/etc/fstab里定义的尚未被挂载的设备

11. 清理过时的文件锁和PID文件

12. 启动服务/etc/rc.d/rcN.d

/etc/rc.d/rcN.d 是一个存放了系统启动是加载的服务的文件夹,通过inittab,我们知道了,它的编号对应相应的启动运行级别。

需要说明的是,它里面的文件,以我的为例 以K开头的代表stop,以S开头的代表启动start,数字越小,有限级别越高

3./etc/fstab文件

它定义了系统初始化挂载的设备,对系统的启动至关重要,rc.sysinit通过读取它来实现系统分区的挂载

简单的流程图

linux开机的基本流程:

1. 加载 BIOS 的硬件信息; 
2. 读取 MBR 的 Kernel Loader (亦即是 lilo, grub, spfdisk 等等)开机信息; 
3. 加载 Kernel 的操作系统核心信息; 
4. Kernel 执行 init 程序并取得 run-level 信息; 
5. init 执行 /etc/rc.d/rc.sysinit 档案; 
6. 激活核心的外挂式模块 (/etc/modules.conf); 
7. init 执行 run-level 的各个批次档( Scripts ); 
8. init 执行 /etc/rc.d/rc.local 档案; 
9. 执行 /bin/login 程序;

流程详解:

1--查询BIOS的基本信息,了解整个系统的硬件状态,比如CPU,内存,显卡,网卡等。

2--读取主机MBR(硬盘的第一个扇区)的boot loader. Windows不支持linux的分区格式.所以,用windows的boot.ini是查不到linux的系统的.一般我装系统都是先装windows再装linux,然后用grub来做boot loader

3--加载核心信息,在GRUB中选择LINUX系统之后,主机就会跑到LINUX所在的硬盘下面加载LINUX的核心信息。通常都在目录/boot下面,

4--执行Init程序,也就是 sbin/init程序,这个程序会调用/etc/inittabd的信息并获得run-level等级,(等级分类上面已经介绍过了)

init进程是系统所有进程的起点,它的进程号为1,init进程是所有进程的发起者和控制者。如果init进程出现了问题,那么系统将不可用。init的进程的作用有两个,一是扮演进程之父,系统中任何进程都作为它的子进程并以它作为参照;二是通过inittab文件管理run-level运行级别。

5--执行/etc/rc.d/rc.sysinit脚本,/etc/rc.d/rc.sysinit是init程序执行的第一个脚本,它的作用是初始化linux系统、配置环境,例如

   (1)设置网络环境,/etc/sysconfig/network,比如主机,网关,DNS

   (2)挂载/proc,此文件是一个特殊的文件,大小为0,因为它的位置是在内存中。

   (3)设定时间,设置字体等。。。

6--由于我们的核心越来越聪明,所以呢,我们可以选择使用模块的型态 ( 这个在后面也会继续说明 ) 来进行驱动程序的加载!那么如果系统原本找不到的模块 ( 例如早期的 via-rhine 芯片组 ) 就可以在这个档案里面 /etc/modules.conf 写入呢!(不一定非要单独列出)

7--init执行相应的run-level等级的脚本,rcx.d中的脚本有的是以S开头,有的是以K开头,脚本执行的顺序是从小到大首先终止以K开头的服务,然后启动以S开头的服务。到/etc/rc.d目录中,不同的level会有不同的目录.如启动3模式,会有个rc3.d目录,里面就保存着服务.其中,S(start)开头的表明开机启动,K(kill)开头的表明开机不启动.数字表示启动顺序.数字越小,启动越早.

8--执行rc.lcoal脚本,一般情况下,/etc/rc.d/rc.local是作为初始化脚本的最后一个文件,所以在开机的时候,如果我们想启动某个服务,我们可以在这个文件中添加一些执行的脚本命令,比如说crond服务、httpd服务随机器启动时而启动等

9--执行/bin/login程序

    login程序会提示用户输入用户名和密码,并会检查输入的正确与否,正确将为使用者初始化环境,并将控制权交给shell。
有兴趣的可以了解更详细的过程:linux启动详解2  http://blog.csdn.net/hepeng597/article/details/8230388

你可能感兴趣的:(Linux 启动详解1)