ubuntu 10.04 启动过程

    我的前面的博文已经提到了linux系统的启动过程,但是由于各distribution的差异,再具体到init进程启动以后OS启动过程会有所差异。据了解Ubuntu9.04以后不再采用/etc/inittab启动,而是采用init和upstart相结合的方式。

 

标准的linux启动顺序是:

(1)init根据/etc/inittab来配置系统-->

(2)执行脚本/etc/rc.d/rc.sysinit初始化-->

(3)然后根据启动等级执行/etc/init.d/rc,执行等级作为参数传入

(4)跳到/etc/rcN.d/(N为执行等级),执行里面的文件,其中大部分为指向/etc/init.d/下面的文件,启动相关服务。

 

    这种串行的启动机制被称为 System V Init 机制,这种机制启动较慢,upstart机制就是其的替代机制,也就是现在ubuntu中所使用的机制。下面这两篇文章对upstart机制做了很详细地说明:

http://www.starfirezhang.com/archives/33

http://blog.csdn.net/vecri/article/details/4735601

 

由于需要和第三方软件兼容,现在的ubuntu中使用的是System V Init 和upstart机制结合的方式。观察ubuntu10.04的文件系统可以发现:

   1 没有标准init进程中的/etc/inittab以及rc.sysinit文件。
   2 没有标准Upstart中初始化用的rc-default文件以及事件触发目录 /etc/event.d。
   3 Ubuntu已经不再严格区分各个启动等级(Runlevel)了。

   在Ubuntu中,和init有关的就是/etc/init /etc/init.d /etc/rcN.d了(N为启动等级Runlevel,S代表单用户模式)。注意。这里的init,指的是基于Upstart的初始化进程。

Ubuntu启动顺序是:

(1)init读取/etc/init/rc-sysinit.conf文件来确定启动等级,关键内容如下:

 # Default runlevel, this may be overriden on the kernel command-line
 # or by faking an old /etc/inittab entry
 env DEFAULT_RUNLEVEL=2

 ......

    # Check for default runlevel in /etc/inittab      ==> 说明ubuntu并没有完全忽视inittab文件的存在

                                                          仍然可以使用inittab文件来自定义运行级别
    if [ -r /etc/inittab ]
    then
        eval "$(sed -nre 's/^[^#][^:]*:([0-6sS]):initdefault:.*/DEFAULT_RUNLEVEL="\1";/p' /etc/inittab || true)"
    fi

......

(2)传递参数给/etc/init.d/rc

(3)根据参数执行/etc/rcN.d/下面的链接文件,这点跟其他的是相同的。注意,根据运行级别来裁剪服务在ubuntu中可能会失效,但是可以改写/etc/rcN.d/下面的脚本来实现。

参考:

http://blog.sina.com.cn/s/blog_40355af20100s4gs.html

你可能感兴趣的:(linux,ubuntu,脚本,OS,System,2010)