当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > 并行启动服务加快系统启动速度

Unix/Linux
Linux 备份 恢复方法
Linux玩CS反恐精英的方法
在一个ISO镜像中集成多个不同的linux发行版,可刻盘,可引导
Linux 快捷键使用
Linux DHCP 服务器配置方法介绍
Linux 22端口的修改方法
Linux 记录会话过程的命令
Linux 后台执行程序如何操作?
linux Wget命令来浏览网页的方法
Linux tail命令的巧妙应用
Wine 中文存在很多的乱码怎么解决方法
linux 新手教程之创建锁文件的方法
配置Linux 保证其系统的安全
Linux DHCP协议实现过程
Linux系统下破解SAM密码
linux/unix vi 编辑器用法详解
Linux 误删文件的解决方法
Linux系统下的历史记录删除方法
Red Hat Linux 安全设置指南
Linux基本命令-注销、关机、重启

Unix/Linux 中的 并行启动服务加快系统启动速度


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 29 ::
收藏到网摘: n/a

今天无意间看到一篇使系统服务并行运行加快系统启动速度的文章,于是尝试了下,感觉办法很不错,同时让我对lfs的系统引导脚本有了更深的理解现在系统从加载内核到login只要5秒,飞一样的感觉 ^_^
Ok ! Let`s Go ! 因为要修改系统启动的脚本,很可能让系统启动不正常,所以最好有双linux系统,即使修改错误了还可以从另一个系统引导修复。如果很不幸,没有的话,可以先学下这招,紧急救护系统也有用 :p 紧急救援模式: grub菜单中选择linux,按e,e,进入编辑模式,kernel......那一行最后加上init=/bin/bash,这样引导系统可以得到一个bash shell这样进入的系统会是read-only的,首先先使用fsck检查系统fsck -a /dev/hdaX 处理根分区fsck -R -A -a 处理其他分区如果系统在上次重启,是正常重启的,文件系统是正常卸载的,可以不用fsck检查直接把系统挂载成read-write的mount / -o remount,rwmount /procswap on -a 打开所有的交换分区在修复好系统后将系统重新挂载成ro的,就可以安全重启了。mount / -o remount,ro 简单的说一下linux系统的启动过程。 当grub加载内核后,内核执行/sbin/init,init程序读取/etc/inittab内容,开始系统的初始化。 init读取initdefault字段,取得系统运行级别 id:3:initdefault: 这里启动级别是3,通常是多用户字符登陆模式 init读取sysinit字段,开始系统基本的初始化 si::sysinit:/etc/rc.d/init.d/rc sysinit这一行表示init会去执行/etc/rc.d/init.d/rc这个文件,sysinit是传入的参数,这里要做的是:挂载proc系统拉,检查根分区拉,开启swap拉。等等但是在不同的发行版可能不同,比如在Mandrakelinux中是:si::sysinit:/etc/rc.d/rc.sysinit这样初始化的脚本就成了/etc/rc.d/rc.sysinit init读取wait字段,开始系统服务初始化 l3:3:wait:/etc/rc.d/init.d/rc 3经过基本初始化后,init读取run-level中的脚本,这些脚本位于/etc/rc.d/rcX.d目录下。X是当前的运行级别.这里是系统启动的服务,比如network,alsa,httpd....等/etc/rc.d/init.d/rc接收一个运行级别作为参数,然后逐一的开启/关闭/etc/rc.d/rcX.d目录下的脚本。wait表示init会等待它结束再去执行其他程序。 有些发行版在执行rcX.d之后去执行/etc/rc.d/rc.local 最后就看到可爱的login拉在/etc/rc.d/rcX.d中的脚本都是以"SXX+服务名"或者"KXX+服务名"组成的并且都是到/etc/rc.d/init.d中相应脚本的符号链接,有的发行版是/etc/init.d,只是位置不同而已。其中XX是0-9的数字,数字越小,则启动的时间越早。以S开头的表示系统启动时传递start参数的服务,就是开启拉。K开头的就是传递stop参数。/etc/rc.d/rc3.d:S10sysklogd@ S20network@ S25random@ S30httpd S40alsa@ S85numlock@可以看出,我的系统进入rc3.d时首先启动的服务是sysklogd,最后是numlock很明显,httpd服务必须要在network之后运行,不然没有网络哪来的web服务?在lfs中是通过ls -v 列出它们,然后逐一的执行它们,这样就会使系统启动的速度很慢,服务越多越明显现在希望做的就是:让那些相互之间没有依赖关系的服务可以同时开启,而不是逐一的执行这样系统启动的速度就会大大的提高了。make 就是实现这个功能的工具。相互有依赖关系的服务,让make去解决它们的依赖性。再使用make -j 参数使服务可以并行启动。在makefile中写入服务之间的相依赖关系:httpd : network这样就表示httpd依赖network,当network启动完毕,就可以立刻启动httpd而其他不相依赖的服务列在makefile中,同时开启。原理就是这样,下面是我的实际做法:首先是写make的配置文件,该文件的样例在本文的结尾可以找到./etc/rc.d/runlevel.mk######################################################################### Description : Gnu Makefile to control the services in the specified# runlevel. It will run the required services, and log# the output of the services to the file# /var/log/initd.start (for service startup) and# /var/log/initd.stop (for service shutdown).## This controlling program is designed to be invoked by# the "/etc/rc.d/rc" script.## Author : [email protected]## Notes :## - Run as,## make [-n] -j -f runlevel.mk \# RUNLEVEL= \# JOB=## - $(JOB) is not validated - that is left to the service program.# - $(RUNLEVEL) is not validated - that is left to the calling program# (usually /etc/rc.d/rc).# - It wouldn't take too much effort to auto-generate this Makefile.########################################################################## passed as a parameterRUNLEVEL =# passed as a parameter (start, stop, status, etc)JOB =# set to a value to enable debug outputDEBUG =######################################################################### START CONFIGURATION# system commands used by this facilityCAT = /bin/catRM = /bin/rmECHO = /bin/ec