Linux基础

Linux 启动


******************************************************************
1.bios找到磁盘上的mbr主引导扇区
2.进入grub界面选择相应的启动内核
3.读取kernel内核文件-/boot/vmlinuz-*
4.读取init的镜像文件-/boot/initrd-*
5.init去读取/etc/inittab
  设置运行级别 0关机 3字符界面 5图形界面 6重启
6.读取启动级(id:3:initdefault)
7.读取/etc/rc.d/rc.sysinit,
  读取系统主机名  识别加载硬件驱动
  读取selinux防火墙  设置系统字体  
  进入一个简单的小欢迎页面  设置系统时钟  
  设置文件和目录权限  加载映射分区
8.读取/etc/rc.d/rc脚本,通过该脚本吸收3级别,然后启动/etc/rc.d/rc3.d下所有以S开头的服务,不启动该目录下以K开头的服务
9.进入登录界面
*****************************************************************

/***********************************************************************************
一.BIOS 加电自检
  当你按电源开关开机时,电脑会首先去启动BIOS(基本输入输出系统),BIOS一般是集成在主板上的.
  BIOS 的工作
         1.检测连接硬件,比如显卡,内存,磁盘等等,检测的目的是以后把这些设备信息提供给操作系统
         2.寻找启动磁盘,每一种BIOS都会有开机启动菜单,可以在菜单里设置以哪个设备启动系统
           比如:光驱,硬盘,网络等等,这个菜单可以设置多个选项,依照设置次序在设备上寻找启动信息
         3.找到了启动硬盘,接着BIOS就会在磁盘上寻找第一个启动扇区,也就是主引导记录MBR(Master Boot Record)
           但是MBR中,存储操作系统的空间只有446字节;MBR总共是512字节(=stage1)(其中引导程序占446字节+分区表占64字节,每16个字节记录一个分区,标识符占2个字节,以55.aa结尾)
         如果没有在MBR中找到操作系统的内核,那么BIOS就无法继续启动工作.
         而我们的内核往往会大于446个字节,存放在磁盘的其他位置上,既然446装不下内核,又为了能顺利的找到放在其他位置上的内核,人们想出了一个办法就在446字节里写了一个小程序,当BIOS试着启动操作系统时就会执行这个小程序,然后再由小程序来载入位于其他位置的内核.这个小程序就是启动载入器(boot loader)

二.BOOT Loader
  linux的boot loader(上文提到的小程序) 常见的有两种:lilo grub
         因为lilo存在着一个1024柱面的限制,并且更改了磁盘上的启动信息文件后需要重新启动系统才能同步446字节的内容,因为lilo的缺陷,已经被grub所取代.现在的绝大多数类linux系统都采用grub做boot loader;
         grub则没有了lilo各种限制,而且方便到能修改系统文件的启动内容就可以立刻与446内容同步.
         那么我们就看看grub的内容 它存在于 /boot/grub中
         GRUB有几个重要的文件,STAGE1、STAGE1.5、STAGE2
         STAGE1:它只有512字节,通常放在MBR中,它的作用很简单,就是在系统启动时用于装载STAGE2并将控制权交给它。
         STAGE2:GRUB的核心,所有的功能都是由它实现。
         STAGE1.5:介于STAGE1和STAGE2之间,是它们的桥梁,因为STAGE2较大,通常都是放在一个文件系统当中的,但是STAGE1并不能识别文件系统格式,所以才需要STAGE1.5来引导位于某个文件系统当中的STAGE2。根据文件系统格式的不同,STAGE1.5也需要相应的文件,如:e2fs_stage1_5,fat_stage1_5,分别用于识别ext和fat的文件系统格式。它存放于1-63的柱面之间.
         引导顺序如下:STAGE1->;STAGE1.5->;STAGE2,
         主要的配置文件时 grub.conf
         里面选项含义:
         title:一个操作系统引动的标头,可以使多个
         root :指明所需文件存在于哪个磁盘哪个分区上 (hd0,0)表示第一个硬盘,第一个分区
         kernel:内核文件的名字,并且会有一些加载内核时的参数
         initrd:包含一些附加的驱动程序
         _____________________
          #cat /boot/grub/grub.conf           grub配置文件
         default=0                             默认启动项,选择启动条目第一个为0号
         timeout=5                                    默认超时时间
         splashimage=(hd0,0)/grub/splash.xpm.gz      登陆时默认图片
         hiddenmenu                                 隐藏菜单

         title CentOS (2.6.32-220.el6.x86_64)   启动菜单名字
         root (hd0,0)                           hd0代表第一块硬盘,0代表第一个分区
         kernel /vmlinuz-2.6.32-220.el6.x86_64        内核文件名
         initrd /initramfs-2.6.32-220.el6.x86_64.img  

三.内核启动   
         内核启动后会向bios查询电脑的所有硬件信息,然后自己接手下来管理这些设备,以便提供给linux使用
         内核会试着驱动这些设备,这些设备的驱动一部分包含在内核中,叫做静态驱动,一部分以模块的方式(动态)存放文件系统中,由于此时还未挂载任何文件系统,因此还不能使用文件系统中的模块,这里只能驱动在内核中存在的硬件驱动程序的对应设备.想驱动内核中未包含的硬件驱动就需要加载文件系统.
         
四.启动INIT服务
         顺利的挂载了根文件系统后,就会启动init服务,init内核启动的第一个用户级进程
         内核会按 /sbin/init /etc/init /bin/init 顺序寻找init程序,
         如果找不到则内核报错
        启动init的目的就是为了初始化系统环境,启动了init就证明了内核已经顺利启动,接下来就由init服务来建立linux使用环境
         init做了什么?它会读取 /etc/inittab 文件,根据这个文件的信息来进行初始化工作.
         会执行三个脚本 /etc/rc.d/rc.sysinit /etc/rc.d/rc[0-6]/* /etc/rc.d/rc.local(万能配置文件,系统启动完毕后,最后运行此文件内的命令)
         rc.sysinit 主要的功能用来建立系统的基本环境,比如:
                   启动udev selinux子系统
                   udev负责产生 /dev中的文件,selinux负责增强系统的安全性
                   设定核心参数 sysctl -p 加载 /etc/sysctl.conf
                   设定系统时间 将硬件时间设定为系统时间
                   加载键盘和交换分区 swapon -a -e
                   设置主机名,挂载文件系统,并将根重新挂载为可读写的.
                   加载动态驱动模块
                   USB设备与RAID & LVM
                  
         rc 脚本设置启动级别 linux中有许多不同的启动级别,不同的启动级别会制定不同的服务
         根据指定rc的参数会对应执行 /etc/rc.d/rc[0-6].d/ 中的连接脚本文件 以S开头的则启动,K开头的不随机自启动
         rc.local 前两个脚本都是系统至关重要的脚本,如果我们想在启动过程中放置一些其他程序
         应该使用rc.local脚本中
         三个RC脚本执行完毕后,就会建立虚拟主控制台 执行 /bin/login 就提供了用户登陆界面了
         如果是图形 L5级别的话,会启动X window登录界面
       所有的启动就都已经完毕
  
     初始化/sbin/init
         #vime/etc/inittab 初始化配置文件

         # Default runlevel. The runlevels used by RHS are:
         #   0 - halt (Do NOT set initdefault to this)                      关机
         #   1 - Single user mode                                              单用户模式
         #   2 - Multiuser, without NFS (The same as 3, if you do not have networking)   多用户模式,无网络模式,也就是不能远程登录
         #   3 - Full multiuser mode                                         全部都用户模式
         #   4 - unused                                                                 保留参数
         #   5 - X11                                                              图形界面模式
         #   6 - reboot (Do NOT set initdefault to this)                          重起模式
         #
         id:3:initdefault:                                                       定义默认启动级别
#ls /etc/rc.d
         init.d  rc0.d  rc2.d  rc4.d  rc6.d     rc.sysinit(启动初始化)
         rc      rc1.d  rc3.d  rc5.d  rc.local          (rc0~6为运行级别脚本,启动或关闭的控制文件,S启动,K关闭,启动或关闭顺序S后面的数字越小、优先级越高)
         
五.登陆,加载用户环境变量
         输入用户名和密码系统验证,然后会执行
         /etc/profile         
         /etc/bashrc
         $HOME/.bash_profile
         $HOME/.bashrc  
查看当前启动级别
         # runlevel
         N 5
         N是上次的级别,5是当前级别 也就是说64机器开机就是5级别
************************************************************************************************/

运行级别

        0表示关机,
        1表示单用户,
        2表示没有网络的命令行级别,
        3命令行级别(大多服务器都用这个级别),
        4为保留级别,
        5为图形化级别,
        6为重启。