linux开机启动加载顺序

由于我日常开发使用的是fedora9,所以,就已fedora9为例。

[cpp] view plain copy

  1. [root@feiyinzilgd rc.d]# pwd  
  2. /etc/rc.d  
  3. [root@feiyinzilgd rc.d]# ls  
  4. init.d  rc0.d  rc2.d  rc4.d  rc6.d     rc.sysinit  
  5. rc      rc1.d  rc3.d  rc5.d  rc.local  

其中,x.d为目录,其他的均为脚本可执行文件。

在讲述这几个目录以及文件的作用及关系之前,我们需要了解linux(RedHat系列)的启动顺序。

系统上电之后,会进行硬件自检,然后初始化启动bootloader,加载内核,内核被加载到内存中之后,就开始运行启动。一旦内核启动,就可以初始化硬件设备,加载根文件系统。内核转载根文件系统,初始化设备驱动以及相关数据结构之后,就会启动一个init用户级程序,完成引导进程。那么,这个init进程就回去读取/etc/inittab文件中的系统运行级别。

[cpp] view plain copy
  1. [root@feiyinzilgd rc.d]# cat  /etc/inittab  
  2. # inittab is only used by upstart for the default runlevel.  
  3. #  
  4. # ADDING OTHER CONFIGURATION HERE WILL HAVE NO EFFECT ON YOUR SYSTEM.  
  5. #  
  6. # System initialization is started by /etc/event.d/rcS  
  7. #  
  8. # Individual runlevels are started by /etc/event.d/rc[0-6]  
  9. #  
  10. # Ctrl-Alt-Delete is handled by /etc/event.d/control-alt-delete  
  11. #  
  12. # Terminal gettys (tty[1-6]) are handled by /etc/event.d/tty[1-6] and  
  13. # /etc/event.d/serial  
  14. #  
  15. # For information on how to write upstart event handlers, or how  
  16. # upstart works, see init(8), initctl(8), and events(5).  
  17. #  
  18. # Default runlevel. The runlevels used are:  
  19. #   0 - halt (Do NOT set initdefault to this)  
  20. #   1 - Single user mode  
  21. #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)  
  22. #   3 - Full multiuser mode  
  23. #   4 - unused  
  24. #   5 - X11  
  25. #   6 - reboot (Do NOT set initdefault to this)  
  26.   
  27. id:5:initdefault:  

系统运行级别有0~6共7个运行级别:

[cpp] view plain copy
  1. # Default runlevel. The runlevels used are:  
  2. #   0 - halt (Do NOT set initdefault to this)  
  3. #   1 - Single user mode  
  4. #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)  
  5. #   3 - Full multiuser mode  
  6. #   4 - unused  
  7. #   5 - X11  
  8. #   6 - reboot (Do NOT set initdefault to this)  
  9.   
  10. id:5:initdefault:  

#0 ——停机(不能使用)

#1——单用户模式

#2——多用户模式,但是没有NFS

#3——完全多用户模式

#4——没有使用

#5——图形界面模式

#6——重启模式(不能使用)

id:5:initdefault(运行模式设置)。那么,init进程就会读取这个系统运行级别设置,然后运行/etc/rc.d/rc脚本。通过这个脚本,然后进入rcx.d。启动相应的程序。其中rcx.d为/etc/rc.d/rcx.d(x为对应的系统运行级别)/etc/rc.d/rcx.d/下的文件均为符号链接,最终绝大部分都是都是链接到/etc/rc.d/init.d下面。到这里,我们可以知道,/etc/rc.d/init.d目录下面的都是开启启动脚本文件,用来启动相应的程序。


POST加电自检-->BIOS(Boot Sequence)-->加载对应引导上的MBR(bootloader) -->主引导设置加载其BootLoader-->Kernel初始化-->initrd—>/etc/init进程加载/etc/inittab从加载BootLoader(RHEL下为Grub)开始,会发生以下事情.
1. 藉由Grub的管理,读取Kernel内核文件(/boot/vmlinuz),解压至主内存,利用内核的功能,进行第二次硬件检测(第一次发生在POST开机自检时)
2. 加载Initial RAM Disk(/boot/initrd),使之在内存中解压缩为根目录,kernel藉此完成驱动程序的加载,,最终释放虚拟文件系统,并挂载实际的根目录文件系统.
3. 在核心加载完毕,进行完硬件侦测与驱动程序加载后,内核会启动第一个进程/sbin/init, init进程将会读取/etc/inittab,在/etc/inittab中,大致规定了以下动作:
  1. 取得 runlevel 亦即默认运行等级的相关等级.
  2. 使用 /etc/rc.d/rc.sysinit 进行系统初始化
  3. 根据runlevel调用相关启动脚本,以启动相应的系统服务
  4. 其他一些系统设置,最终完成系统启动.

/sbin/init 最主要的功能就是准备软件运行的环境,包括系统的主机名称、网络配置、语系处理、文件系统格式及其他服务的启动等,而所有的动作都根据在/etc/inittab中的配置.

/etc/rc.d, 里面存放了rc.local, rc.sysinit, init.d, rcX.d (X包括0-6对应相对runlevel)

/etc/rc.d/init.d, 存放了各种系统服务的启动关闭的管理脚本,/etc/init.d是他的一个目录链接.

/etc/rc.d/rcX.d, 里面存放了一些脚本,脚本名字以K开头的,表示STOP动作,名字以S开头,表示Start动作,名称中的数字表示执行次序,数字越小表示越先执行.
/etc/rcX.d是他的目录链接,但事实上rcX.d下文件本身就是指向/etc/rc.d/init.d下脚本的链接文件.

/etc/rc.d/rc.local, 有一个链接文件,路径在/etc/rc.local,
系统根据runlevel启动完rcX.d中的脚本之后,会调用rc.local脚本,如果你有一个脚本命令不论在3和5都想开机启动,那么就添加与此,免去rc3.d和rc5.d分别增加启动脚本工作量.


版权申明:
转载文章请注明原文出处http://blog.csdn.net/feiyinzilgd/archive/2010/07/20/5750168.aspx

并请联系谭海燕本人或者前往谭海燕个人主页留言

你可能感兴趣的:(linux)