21-Linux-系统启动详解

启动流程


    BIOS
    MBR:Boot Code
    执行引导程序 - GRUB
    加载内核
    执行init
    runlevel


1 - BIOS


    BIOS, Basic Input Output System, 基本输入输出系统, 存在于主板的BIOS芯片上.
    计算机启动首先运行BIOS
    作用: 1, 硬件检查(开机自检); 2, 查找可启动设备
    可启动设备 具有引导程序, 首512个字节的最后两个字节 为 "55AA" (MBR有效标志)
    可启动设备在BIOS中设置顺序, 如 USB(U盘) -> CDROM(光盘) -> HD(硬盘)
    挨个查找这些设备的 是否具有 MBR有效标志, 
    找到第一个就将启动控制权转移给它 (首512个字节的前446个字节, 引导代码)


2 - MBR


    BIOS找到可启动设备, 执行其引导代码 boot code
    引导代码为MBR的前446个字节, 装OS时 由OS写入的
    作用 : 查找并加载 引导程序 grup


3 - GRUB


    grub 是现在Linux使用的主流引导程序, 可用来引导绝大多数OS
    grub相关文件保存于 /boot/grub 目录
        stage1  : 512字节, MBR的镜像
        文件系统驱动
            e2fs_stage1_5
            fat_stage1_5
            ffs_stage1_5
            iso9660_stage1_5
            jfs_stage1_5
            minix_stage1_5
            reiserfs_stage1_5
            ufs2_stage1_5
            vstafs_stage1_5
            xfs_stage1_5
        stage2
    grub配置文件 : /boot/grub/grub.conf
        default=0   默认启动第0个OS
        timeout=5   倒数几秒等待选择启动哪个OS
        splashimage=(hd0,1)/boot/grub/splash.xpm.gz  倒数时的背景图片
        hiddenmenu  隐藏菜单栏
        OS定义
            
            title CentOS (2.6.32-279.el6.i686)  菜单项的名字
            root (hd0,1)    根分区的位置. hd- 硬盘; 0,1 - 第0块硬盘, 第0个分区
            kernel /boot/vmlinuz-version ro root=/dev/sda2  内核,readonly,根目录
            initrd /boot/initramfs-[generic-]version.img 内核模块打包文件
                # man initrd    : boot loader initialized RAM disk
                /boot/initramfs-[generic-]version.img 封装OS所有可能用到的模块(如设备驱动)


4 - Kernel


    MBR的引导代码 根据grub.conf文件 找到并加载 Linux内核
    Linux内核: /boot/vmlinuz-2.6.32-279.el6.i686
    加载内核模块打包文件: /boot/initramfs-2.6.32-279.el6.i686.img
        Linux为保持kernel的精简, 
        将一些不常用的 驱动、功能 编译成模块, 在需要的时候动态加载,
        这些模块被打包成一个 initramfs文件
        早期Linux使用的是initrd文件, initramfs是initrd的替代优化版本
    dmesg命令 可查看本次启动时kernel的输出信息
        # dmesg | less
        # less /var/log/dmesg


5 - INIT


    init 是Linux系统中运行的第一个进程
        
        init进程是所有进程的父进程
    /etc/init目录
        
    作用
        调用 /etc/rc.d/rc.sysinit 对系统进行初始化
        挂载文件系统
        根据运行级别启动相应服务


6 - runlevel


    运行级别(运行模式)
        /etc/inittab 配置默认级别
        0 - 关机
        1 - 单用户(root)模式
        2 - 不带网络的多用户名模式
        3 - 命令行多用户模式
        4 - 未使用
        5 - X11图形化多用户模式
        6 - 重新启动
    每个级别对应的启动脚本保存于: /etc/rc.d目录
        
    init命令 : 切换运行级别
        # init 3    : 切换到命令行界面
        # init 5    : 切换到图形界面
    runlevel命令: 显示上一个运行级别 和 当前运行级别
        $ runlevel
        3 5


    扩展
        单用户模式
            为内核传递参数"1"(数字) 或 "single" 进入单用户模式, 修改root密码
            特点
                不启动任何服务
                直接以root用户登陆, 无需root 密码
                可直接使用 passwd命令 设置新的root密码(无需旧密码)
            步骤
                1. 在启动界面按 上/下方向键 以暂停grub引导
                    
                2. 按 "e" 键 编辑高亮的引导条目
                    
                3. 选择 kernel, 再按 "e"键 进行编辑
                    
                    注: 默认 光标在末尾的, 可以按"Home"  "End"  左/右方向键 移动光标
                4. 在末尾加一个参数"1"(启动级别)即可
                    
                    注: 需要用空格将前面的 隔开
                5. 编辑完后按回车返回, 再按"b"键启动
                    
                6. 修改完root密码, 输入exit命令继续 默认的启动
                    
        grub加密
            1. 生成密码对应的md5码
                [root@wuqinfei ~]# grub-md5-crypt
                Password:
                Retype password:
                $1$harQZ1$I.M/fPAb/Xstl.CZSe7WW1
            2. 编辑 /boot/grub/grub.conf文件
                在第一行添加下面的命令
                password --md5 $1$harQZ1$I.M/fPAb/Xstl.CZSe7WW1
                注: 编辑 /etc/grub.conf文件同样有效
            3. 编辑启动条目时需要输入密码
                


你可能感兴趣的:(linux,系统启动详解)