Welcome 微信登录

首页 / 操作系统 / Linux / Linux系统启动过程详解

Linux系统启动流程:POST --> BIOS(Boot Sequence引导次序) --> MBR(bootloader,446byte) --> Kernel --> initrd(initramfs) --> (ROOTFS) --> /sbin/init(/etc/inittab)内核设计风格:单内核:所有功能都在一个内核中。Linux采用单内核,但是采用了微内核的设计思想。LWP(轻量级进程 light weight pprocess)。核心:/boot/vmlinuz-verison动态加载ko(kernel object 内核专用模块)。内核模块(ko):/lib/modules/KERNELVERISON/常见的装载内核模块命令:#insmod#modprobe微内核:把其他功能做成子内核。Windows Solaris。真正意义上的多线程。内核提供的功能:文件系统进程管理内存管理网络管理安全功能驱动程序内核初始化过程:1.设备探测。2.驱动初始化可能从initrd(initramfs(RHEL6))件中装载驱动模块。3.以只读模式挂载根文件系统(rootfs)。4.装载用户空间内第一个进程init(PID=1)initrd:一个中间层系统,在系统启动是提供必要的基本驱动,生成一个临时根,为内核提供访问真正根文件系统所需要的基本驱动程序。待内核成功挂载根文件系统后,会把临时根下的 /proc、 /sys、/dev移动到真的根下。ramdisk --> initrd RHEL5 把内存模拟成磁盘使用。ramfs --> initramfs RHEL6 把内存模拟成磁盘使用。#chroot TEMPROOTDIR [COMMAND] 临时切换为根目录例如:#chroot /tmp/virroot /bin/csh#ldd FILE 显示二进制文件所依赖共享库。init:系统启动的第一个进程。bin文件路径:/sbin/init/etc/init/bin/init内核将会依次按以上目录顺序查找init,若都无法找到init,则内核会执行/bin/sh。配置文件:/etc/inittab每一行记录一个要启动或运行的服务(进程)。设定的任务:1.设定默认运行级别。2.运行系统初始化脚本。/etc/rc.d/rc.sysinit3.按照以下顺序运行指定运行级别对应目录下的下的服务类脚本。/etc/rc.d/init.d/etc/rc.d/rcNUM.d/etc/rc.d/rc.local4.设定ctrlaltdel组合键的动作。5.定义ups电源在电源故障或恢复是执行的操作。6.启动虚拟终端(level为2345)。1:2345:respawn:/sbin/mingetty tty1...6:2345:respawn:/sbin/mingetty tty67.启动图形终端(level为5)。x:5:respawn:/etc/X11/perfdm-nodaemon每行结构如下:id:runlevels:action:processid:服务参数的标示,1~4个字符。id 默认RUNLEVELsi 系统初始化l0~l6 指定RUNLEVELca 拦截到ctrl+alt+delpf 电源失效pr 电源恢复NUM 配置NUM号虚拟终端x 启动x服务runlevels:在哪个级别下运行。action:在某个事件下执行的动作。initdefault 设定默认运行级别。sysinit 系统初始化。wait 级别切换至此级别时执行。ctrlaltdel 重启。powerfail 电源失效。powerokwait 电源失效后至关机前电源恢复。respawn 一旦程序终止会重新启动。process:要运行的程序,定义使用绝对路径。/etc/init/*.conf该目录下的文件是把inittab文件进行切片后产生的许多.conf文件。都是基于事件驱动编写的。重启init:#init q#telinit q#kill -HUP 1运行级别RUNLEVEL:各个级别区别在于启动的服务不同。0:halt1:single user mode直接怡管理员身份登录,无需验证。2:mulit user mode no NFS不启动NFS等网域功能相关的服务器。3:mulit user mode text mode命令行模式4:reseved保留级别,暂时未定义。5:mulit user mode graphic mode图形模式6:reboot运行级别的设定:修改/etc/inittab查看运行级别:#runlevelLSATLEVEL CURRENTLEVEL其中LASTLEVEL表示上一个级别,N表示没切换过。CURRENTLEVEL表示当前级别。切换运行级别:#init [OPTION] LEVEL[OPTION]LEVEL0 关机1 单用户模式2 命令行模式(不启用NFS)3 命令行模式4 保留模式5 图形界面6 重启S 单用户模式s 单用户模式/etc/rc.d/rc.sysinit设置系统的基本环境,完成以下任务:1.激活udev和selinux。2.根据/etc/sysctl.conf文件来设定内核参数。执行sysctl -p。3.设定系统时钟。4.装载键盘映射。5.启用swap分区。执行swapon -a -e。6.设置主机名,从/etc/sysconfig/network中读取HOSTNAME参数。7.文件系统检测,根据/etc/fstab,检查并挂载其他文件系统。并且在无错误以后,将根以读写方式重新挂载。8.初始围硬件设备。定义在/etc/modprobe.conf中的模块ISA、PnP的设备USB设备9.启动RAID和LVM10.如有必要,卸载initrd11.初始化串行设备。根据/etc/rc.serial进行初始化。默认无此脚本,需要自行建立。12.清理过期的锁文件(/var/lock/subsys/*)和IPC文件。13.重新设置磁盘参数,根据/etc/sysconfig/harddisk DEVICE。/etc/rc.d/init.d/*服务类脚本,SysV风格,存放在/etc/rc.d/init.d下。有一个链接文件/etc/init.d --> /etc/rc.d/init.d。配置文件:/etc/sysconfig/服务脚本同名脚本至少接受以下参数:start|stop|restart|status|reload|condrestart(有条件重启,已启动的重启,未启动的不重启。)脚本共有特性:#chkconfig: RUNLEVELS SS KKRUNLEVELS 启动级别RUNLEVELS可以用-表示没有级别默认为SNUM开头的链接,即全部都是KNUM开头的链接。SS 启动的优先级KK 关闭的优先级当使用chkconfig命令为此脚本在rcNUM.d目录创建链接时,RUNLEVEL表示默认创建为SNUM开头的文件,除此之外的级别均默认创建为KNUM开头的链接。S后边的启动优先级为SS所表示的数字,K后边的关闭优先级次序为KK所表示的数字。一般SS+KK=99。#description: DESCRIPTIONS描述信息,用户说明此脚本的简单功能。可以使用进行续行。/etc/rc.d/rc.local/etc/rc.d/rcNUM.d/S99local --> /etc/rc.d/rc.local/etc/rc.local --> /etc/rc.d/rc.local在系统启动最后执行的服务,准确说应该是脚本。不方便定义为服务等的命令都可以在其中写入,在用户登录前执行。例如命令行模式登陆式的显示的欢迎内容等。GRUB:GRand Unified Bootloadergrub启动流程:stage1:装在MBR中。目的是为了引导stage2。stage1.5:用来识别常见的文件系统。stage2:位于内核所在分区。/boot/grub/。/etc/grub.confgrub配置文件。是链接文件,指向/boot/grub/grub.conf主要内容如下:default=0设定默认启动的title编号,编号从0开始。timeout=5等待选择超时时间。单位是秒。splashimeage=(hd0,0)/grub/palash.xmp.gz指定grub背景图片。hidenmenu是否隐藏菜单。password --md5 PASSWORD设定GRUB的编辑的密码。可以使用grub-md5-crypt来生成加密的密码。title TITLENAME内核标题或者是OS的名称,可自由修改。root (hdDISKNUM,PARTNUM)指定内核文件所在的设备和分区。对grub而言,所有硬盘一律显示为为hd。DISKNUM表示磁盘序号,PARTNUM表示分区序号。kernel KERNEL CMDLINE指定kernel路径即传递给内核的参数。参数文件可以在/proc/cmdline中看到。initrd INIDRD指定initrd路径。password --md5 PASSWORD 启动内核或OS的密码。安装grub:#fdisk DEVICE/dev/PART1 用来做boot/dev/PART2 用来做sysroot#mkdir /DIR/boot#mount /dev/PART1 /DIR/boot#grub-install --root-directory=/DIR DEVICE此种方式要保证把内核文件所在分区挂载在/boot上。grub只要指定/boot所在的父目录就能自动找到/boot。#vim /DIR/boot/grub.conf修复grub:安装grub stage1:#grubgrub> root (hdDISKNUM,PARTNUM) 指定内核所在的磁盘和分区。grub> setup (hdDISKNUM) 在指定的硬盘上安装grub。grub> quitgrub.conf文件丢失:开机进入grub后操作。grub> find (hdDISKNUM,PARTNUM)/按tab键会显示出相关文件。grub> root (hdDISKNUM,PARTNUM)grub> kernel /KERNELgrub> initrd /INITRDgrub> boot#mingetty [OPTION] 启动终端[OPTION]--loginprog=/bin/login 启动中断后执行的程序。默认为/bin/login。#agetty [OPTION] PROT BAUDRATE  替代getty命令。[OPTION]-l LOGIN PROGRAME 指定登陆程序-n 不需要用户输入用户名。不需要用户输入登录信息。配合-l一起使用。例如:#agetty -l /bin/bash 38400  登陆bash并将波特率设定为38400。#stty [OPTION] DEVICE SETTING 改变和显示终端设备。[OPTION]-F --file=DEVICE 打开并使用指定的设备SETTING:size 显示行(rows)列(columns)数。speed 显示终端速率。例如:#stty -F /dev/console size 物理终端25 80 25行80列。#stty -F /dev/console speed38400 每秒38400个字符#chkconfig [OPTION]指定SysV风格脚本,自动在/etc/rcNUM.d下创建链接。[OPTION]--list SERVICE  列出所有独立守护进程的启动设定。不加参数显示所有设定。--add SERVICE自动创建链接,将SERVICE添加到chkconfig控制的服务列表中。下次系统启动生效。--del SERVICE删除SERVICE所有链接文件。--level [RUNLEVELS] SERVICE on|off指定级别为RUNLEVELS,SERVICE启动或关闭。对于瞬时守护进程不需要指定RUNLEVLES。RUNLEVELS可以省略,省略默认为2345级别。linux常见的关机和重启命令:shutdownhalt-p 切断电源需要配合exec命令使用。rebootpoweroffinit 0init 6#exec 执行文件,并以子进程替换父进程。例如:#exec halt -p守护进程的类型:独立守护进程瞬时守护进程不需要关联至运???级别。xinetd:超级守护进程。管理所有瞬时守护进程。需要关联运行级别。本文永久更新链接地址