当前位置:文档之家› Linux启动过程详解

Linux启动过程详解

深入浅出:Linux的启动流程刨析Linux的启动过程,是一个Linuxer必须要熟练掌握的。

通过系统的启动过程,可以更深入的理解Linux,假如Linux系统出问题的话,可以通过启动过程来分析原因,解决问题。

而且,在掌握了Linux的启动流程后,还可以借助宿主机来打造自己的Linux。

下面是我画的一张简单的Linux启动流程图在了解启动流程之前,我们应该先知道系统的几个重要脚本和配置文件,他们对应的路径为:1、/sbin/init2、/etc/inittab3、/etc/rc.d/rc.sysinit4、/etc/rc.d/rcN.d //这是几个文件夹N代表数字1,2,3,4..5、/etc/fstab1、关于/sbin/init与/etc/inittab关于/sbin/init ,它是一个二进制可执行文件,为系统的初始化程序,而/etc/inittab是它的配置文件,我们可以通过/etc/inittab来一睹它的功能,里面的内容是一种固定的文本格式,id:runlevels:action:process我们来通过它的内容来学习它之前,先了解写运行级别的分类(0-6):0:关机half1:单用户模式singel user2:多用户模式multi user ,不提供nfs服务without nfs3:完全多用户字符模式full multiuser text mod4:系统预留officially undefined5:图形登录界面graphical login6:重启rebootid:3:initdefault: //这里定义linux的启动时的运行级别,可以看到我的主机的启动级别是3# System initialization.si::sysinit:/etc/rc.d/rc.sysinit //紧接着,运行系统第一个脚本/etc/rc.d/rc/sysinit//它的action:sysyinit指的是定义系统初始化过程l0:0:wait:/etc/rc.d/rc 0l1:1:wait:/etc/rc.d/rc 1l2:2:wait:/etc/rc.d/rc 2 //然后就是加载服务了,他们被定义在/etc/rc.d/rcN.dl3:3:wait:/etc/rc.d/rc 3 //action:waite 这个进程在在对应级别启动一次,知道它结束为止,我的系统启动级别为3,所有执行rc 3对应的服务l4:4:wait:/etc/rc.d/rc 4l5:5:wait:/etc/rc.d/rc 5l6:6:wait:/etc/rc.d/rc 6ca::ctrlaltdel:/sbin/shutdown -t3 -r now //这里定义了一个组合快捷键,熟悉吧,没错就是重启,你可以把它注释掉不用pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"//这里定义了ups电源,powerfail 指的是如果突然断电,它对应的process命令是,提示用户系统电源失效,将要关机,提醒用户把数据都存储好pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"//这里的action,powerokwaite,指的是系统恢复供电,关机取消...<pre style="BACKGROUND-COLOR: rgb(240,240,240); MARGIN: 4px 0px"class="cpp" name="code">1:2345:respawn:/sbin/mingetty tty1 //开启终端,在系统准备工作做好后,就会启动出6个终端,tty1~6 mingetyy就是终端的执行命令2:2345:respawn:/sbin/mingetty tty2 //可以看到他们对应的级别是2345,你也可以注释掉几个,这样启动后,就会开启你指定个数的终端... 3:2345:respawn:/sbin/mingetty tty3 //这里的动作respawn意思是如果用户关闭,那么这个进程会立刻再次执行4:2345:respawn:/sbin/mingetty tty45:2345:respawn:/sbin/mingetty tty56:2345:respawn:/sbin/mingetty tty6x:5:respawn:/etc/X11/prefdm -nodaemon //当一切准备完毕,就会运行守护进程,它是不分运行级别的,同样也是respawn</pre><pre style="PADDING-BOTTOM: 2px; MARGIN: 4px 0px; PADDING-LEFT: 0px; PADDING-RIGHT: 0px; PADDING-TOP: 2px"><span style="font-size:16px;"></span>2、关于etc/rc.d/rc.sysyinit 和/etc/rc.d/rc.Nd在inittab文件中,我们了解到rc.sysinit是系统运行的第一个脚本,那么它的作用都有哪些呢?如果有shell脚本基础的话可以用vim打开这个文件来看看,它有900多行...是linux 里最牛的脚本,总结下它的作用,有如下几点:(一定要牢记,必要时我们要重写它!)1)激活udev和selinux2)通过读取/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,数字越小,有限级别越高[root@server69 rc.d]# cd rc3.d[root@server69 rc3.d]# lsK01dnsmasq K74nscd S08ip6tables S25bluetooth S85gpmK02avahi-dnsconfd K85mdmpd S08iptables S25netfs S90crondK02NetworkManager K87multipathd S08mcstrans S25pcscd S90xfsK05conman K88wpa_supplicant S10network S26acpid S95anacronK05saslauthd K89dund S11auditd S26apmd S95atdK10psacct K89netplugd S12restorecond S26haldaemon S97rhnsdK20nfs K89pand S12syslog S26hidd S97yum-updatesdK24irda K89rdisc S13irqbalance S28autofs S98avahi-daemonK35vncserver K99readahead_later S13portmap S50hplip S99firstbootK35winbind S00microcode_ctl S14nfslock S55sshd S99localK50ibmasm S02lvm2-monitor S15mdmonitor S56cups S99smartdK50netconsole S04readahead_early S18rpcidmapd S56rawdevicesK69rpcsvcgssd S05kudzu S19rpcgssd S58ntpdK73ypbind S06cpuspeed S22messagebus S80sendmail3、/etc/fstab文件它定义了系统初始化挂载的设备,对系统的启动至关重要,rc.sysinit通过读取它来实现系统分区的挂载它的内容如何呢?我们一起来看下要挂载的设备挂载点文件系统类型挂载选项转储频率文件自检次序/dev/sda2 / ext3defaults 0 0/dev/sda1 /boot ext3defaults 0 0sysfs /sys sysfsdefaults 0 0proc /proc procdefaults 0 0我截取了4个系统启动时必须挂载的设备/ 根文件目录,由它你才可以进入linux的世界,它在/dev/sda2里/boot 启动目录,在/下,里面有grub,initrd和系统内核,它在/dev/sda1sysfs 一个虚拟的文件系统,产生包含所有硬件层次视图,和/proc类似proc 这是一个虚拟的目录,它映射内存里的信息对应进程信息,也就是说它对应的是内存而不是硬盘好了,了解了这些文件和目录的作用,我们在回过头来看那张流程图:1)Linux开机从POST加电自检开始,当自检完成,读取第一个硬盘的第0个磁头里的前446个字节,运行里面的bootloader,Linux一般用的是grub。

2)通过grub传递参数给内核,初始化加载内核过程,内核调用initrd(小型内存文件系统,五脏俱全,是一个微型Linux),通过initrd,以只读方式挂载根文件系统3)当根文件系统被挂载后,就会读取并运行/sbin/init来进行初始化工作,这个时候我们刚才讲的几个文件就派上用场了~4)按次序依次执行/rc/sysinit ,这个时候会重新以读写的方式挂载根文件系统5)读取/etc/rc.d/rcN.d/来启动以s开头的服务,停止以k开头的服务6)当一切准备完毕,打印终端,出现熟悉的Login界面!(当然,如果你是以5级别启动的话,Linux就会启动图形界~)好了~系统的启动流程介绍完毕,这些是Linuxer必备的知识,在系统的维护中,发挥至关重要的作用~如果你喜欢,希望能和你多多交流。

相关主题