Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3115216
  • 博文数量: 685
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5303
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-19 14:17
个人简介

文章分类

全部博文(685)

文章存档

2015年(116)

2014年(569)

分类: LINUX

2015-03-12 10:59:32

原文地址:http://blog.sina.com.cn/s/blog_66fb0c830100xms2.html

我的前面的博文已经提到了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://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


阅读(1467) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~