linux 开机启动流程:
1。按电源按钮
补充:计算机机箱例的主要硬件有:主板、硬盘、光驱、CPU、内存、显卡、声卡、网卡
2。使用BIOS程序初始化和检测硬件
BIOS 基本输入输出系统
CMOS 半导体金属氧化物
检测CPU、内存、显卡、硬盘、和各种芯片并进行设置
查找启动介质(本地硬盘、光驱i、U盘、PXE芯片远程启动)
加载BIOS程序,获取启动顺序,找到第一个启动设备;
一开机,马上按 ‘ Del ‘键(台式机),虚拟机是按 ‘ F2 ‘键,笔记本是按 ‘ F1 ’或‘ F2 ‘键(视机器而定),服务器是按 ‘ ’键
有硬盘引导(HDD)、光盘镜像引导(CD-ROM)、USB设备引导(USB)、网络引导(PXE)
3。装载引导程序MBR(0面0道1扇区,共512字节)和grub引导
引导程序 446字节
磁盘分区 64字节
结束标识 2字节
加载stage1,stage1通常位于MBR中,用于装载stage2
加载stage1.5,用于识别文件系统
加载stage2,grub的核心程序
注意:stage1.5和stage2文件位于/boot/grub目录下
使用/boot/grub/grub.conf 配置文件加载linux内核
读取第一启动设备的MBR区信息,里面有GRUB、LILO引导程序;
MBR里的引导加载程序bootloader会读取分区表,找到(主)引导分区所在的位置,加载linux内核
mbr和superblock的关系?
stage1 --->stage2-->加载文件系统驱动,就可以认识/boot分区里的文件了。
4。内核引导
加载linux内核vmlinuz,vmlinuz是一个gzip压缩文件,加载时需要使用gzip解压
加载initrd*.img,init*.img,通常是加载USB,LVM,RAID,SCSI等设备模块和磁盘接口的驱动程序
system.map,系统参数的对应表
加载核心、核心开始驱动硬件;(linux内核和p_w_picpath镜像)
bios里也有很多驱动的,它会认识很多硬件。如果主板上的电池没有电了,cmos里的参数和数据会丢失,但是每次开机会加载缺省(默认)的设置
加载了grub.conf文件后,找到了内核文件,然后加载vmlinuz-2.6.18-194.el5,内核文件里有一些基本的驱动和程序。
initrd /initrd-2.6.39.4.img
将initrd-2.6.39.4.img ,从内存中拿出一部分空间出来当硬盘使用(ramdisk),然后将initrd-2.6.39.4.img 文件解压缩到ramdisk里,
形成一个临时的根目录,里面包含了/etc,/bin,/lib,/dev,/sbin目录。/lib下有很多的模块驱动。
配置文件:/etc/groub.conf,/etc/fstab,/etc/inittab
5。系统的初始化和引导 (需要运行的一些脚本程序)
运行/sbin/init 程序进行初始化(使用配置文件/etc/inittab和/etc/init目录系下的文件)
/etc/inittab 设置默认启动级别
* 运行/etc/rc.sysinit
@ 获取网络环境
@初始化硬件
@设置主机名
@设备映射器及相关初始化
@初始化LVM
@文件系统检测
@启用磁盘配额和更新配额
@挂载设备(根据/etc/fstab配置文件进行挂载)
@清除开机过程中所产生的垃圾文件
@启用交换分区
@将信息写入/var/log/dmesg文件
* 运行/etc/rc.local \\记录开机时要做的事情
* 按照设定的级别启动相关的服务,使用/etc/rc*.d 目录下的程序启动服务,此处 * 表示0-6的7个启动运行级别
/etc/rc.d/rc*.d 目录下的文件由启动状态(S 表示启动,K 表示不启动)、启动顺序 和启动服务程序三部分组成
用户登录
* 运行/sbin/mingetty 登录程序
用户登录(输入用户名和密码)-->使用/etc/passwd和/etc/shadow检测正确性
-->运行/etc/profile,~/.bash_profile,~/.bashrc,/etc/bashrc
进入用户桌面,运行相应的桌面程序(gdm gnome桌面,kde kde桌面,xdm 启动x windows)
6。执行/sbin/init程序,产生init进程;
7。init执行/etc/rc.d/rc.sysinit文件;
8。启动核心的外挂模块/etc/modeprobe.conf;
9。init执行相应运行级别的scripts;
10。init执行/etc/rc.d/rc.local;
===============
解压查看initrd-2.6.18-194.el5.img文件:
# cd /boot/
# mkdir /tmp/boot
# cp initrd-2.6.18-194.el5.img /tmp/boot
# cd /tmp/boot
# ls
initrd-2.6.18-194.el5.img
# file initrd-2.6.18-194.el5.img
initrd-2.6.18-194.el5.img: gzip compressed data, from Unix, last modified: Thu Jul 12 12:04:10 2012, max compression
# gunzip
]# ls
initrd-2.6.18-194.el5.img initrd.img
# file initrd.img
initrd.img: ASCII cpio archive (SVR4 with no CRC)
# cpio -iv …………………(省略)………………… # ls bin etc initrd-2.6.18-194.el5.img lib sbin sysroot dev init initrd.img proc sys # cd lib # ls 有ext3文件系统的驱动模块 ata_piix.ko dm-mod.ko ext3.ko ohci-hcd.ko dm-log.ko dm-raid45.ko firmware scsi_mod.ko dm-mem-cache.ko dm-region_hash.ko jbd.ko sd_mod.ko dm-message.ko ehci-hcd.ko libata.ko uhci-hcd.ko ======================================= 11。执行/bin/login程序,等待用户登录。 ========================== 当处在字符界面(运行级别 3)时,在终端中输入 init 5 (或输入 start x ),则可以重新进入图形界面(即运行级别 5 ) [root@teacher raid-lvm]# init 5 进入运行级别5(图形界面,前提条件是gnome或者kde图形套件已经安装) init 0 关机 init 6 重新启动 init 3 进入文件界面 [root@teacher raid-lvm]# start x (启动图形界面X程序) [root@teacher raid-lvm]# vim /etc/inittab [root@teacher raid-lvm]# init 5 [root@teacher raid-lvm]# runlevel 查看运行级别 N 5 在/etc/fstab里挂载,用 blkid 命令查看需要挂载的磁盘的UUID号: # blkid /dev/sda3 /dev/sda3: UUID="c91c42d9-bbcb-4d3b-abf1-57943c05ee90" TYPE="swap" 练习: 1)在系统开机时自动设置别名rm=‘rm -fr’ # vim ~/.bashrc alias rm='rm -fr' 2)如果忘记密码,怎么办?要求进入单用户模式将root用户密码删除 e -->选第二项-->e -->1-->b --> # passwd -d root 3)将系统的默认级别设置为3 # vim /etc/inittab id:3:initdefault: 4)将/boot所在的分区挂载从/etc/fstab文件里面删除,然后重启计算机进行恢复 # df -Th # vim /etc/fstab 手动编辑即可 5)将/etc/fstab文件删除,然后重启计算机进行恢复 (下面两种情况,注意要在/etc/selinux/config里面的SELINUX关闭的情况下重启) 在备份了情况下(cp或dd备份) # dd if=/etc/fstab of=/Desktop/fstab.bak bs=512 count=1 # rm -rf /etc/fstab # reboot >插入光驱进入营救模式>…… >: bash-4.1# fdisk -l \\查看磁盘情况,找到/boot所在分区/dev/sda3 # mkdir /back # mount /dev/sd3 /back \\将/boot所在分区/dev/sda3挂载到新建/back目录下 # df -Th # cd /back # cd Desktop # dd if=fstab.conf of=/back/etc/fstab bs=512 count=1 # cd /back/etc # cp fstab /etc/ # exit \\在营救模式下进入其他主目录,需要用exit退出 # reboot 在没有进行备份的情况下: # rm -rf /etc/fstab # reboot >插入光驱进入营救模式>…… >: bash-4.1# fdisk -l \\查看磁盘情况,找到/boot所在分区/dev/sda3 # mkdir /back # mount /dev/sda3 /back \\将/boot所在分区/dev/sda3挂载到新建/back目录下 # df -Th # cd /back/etc # vi fstab \\营救模式中不能够使用vim,只能用 vi 手动编辑里面的内容 :wq退出># blkid /dev/sda3 >>/back/etc/fstab \\查找/dev/sda3的UUID号并追加到/back/etc/fstab 里,其他的磁盘一样的操作 # vi /back/etc/fstab 手动编辑内容,并将刚才追加进的UUID号进行复制,粘贴,如下: UUID=00d6bc1f-da72-4935-a69f-d79416b512fb / ext4 defaults 1 1 UUID=e407d3ee-cf6b-4378-9af7-d64bbb20ce5c /boot ext4 defaults 1 2 UUID=c91c42d9-bbcb-4d3b-abf1-57943c05ee90 swap swap defaults 0 0 :wq # cp fstab /etc/ # exit # reboot lvchange -ay 逻辑卷名 \\激活 # vim /etc/fstab -- 开机自动挂载本地镜像 /root/桌面/king/soft/rhel6-x86_64.iso /yum iso9660 loop 0 0 # mount -a -- 手动挂载/etc/fstab里面的选项