Linux的启动和关机的流程、引导加载程序

来源:互联网 发布:html5shiv.min.js下载 编辑:程序博客网 时间:2024/04/28 18:07
本文为鸟哥中18章笔记
  1. 18.1 启动流程
    1. 不能随意关机,多用户的操作系统,关机导致其他在线用户数据丢失
    2. 后台任务的数据丢失,硬盘损坏
    3. 启动过程
      1. 加载bios,获取第一个启动设备的代号
      2. 读取第一个启动设备的MBR的引导程序grub或lilo的启动信息
      3. 加载操作系统核心,解压缩、尝试驱动所有硬件设备
      4. 核心执行init程序并获取运行信息
      5. init执行/etc/rc.d/rc.sysinit文件
      6. 启动核心的外挂模块/etc/modprobe.conf
      7. 执行各个批处理文件
      8. init执行/etc/rc.d/rc.local文件
      9. 执行login程序
      10. 登陆之后shell控制主机
    4. 引导加载程序与核心载入
      1. MBR (mater boot record)
      2. 第一个启动设备是硬盘,硬盘的MBR中安装了 引导加载程序 ,因为系统核心为加载时无法识别文件系统,引导加载程序就是找到系统的核心文件并加载它到主存储中。
      3. 核心加载过程中,可能会建立initrd虚拟盘RAM disk
      4. 加载核心之后,开始执行init程序



    1. init程序、/etc/inittab与runlevel 运行等级
      1. init根据/etc/inittab的运行等级启动服务和程序
      2. 运行等级
        1. 作用,规定系统启动的服务,让linux的运行环境不同
        2. 0-halt 直接关机
        3. 1-single User mode 单用户模式,用于系统出问题的维护,类似windows安全模式
        4. 2-multi-user ,without nfs 没有nfs服务
        5. 3-full multi-user mode 完整的网路功能的文本模式
        6. 4-unused 系统保留
        7. 5-x11 和3类似但是使用xwindow模式
        8. 6-reboot 重新启动
      3. 0、4、6 不能用于默认的启动模式
      4. 启动模式设置在/etc/inittab文件中,ubuntu不在该文件夹下
      5. 一般用3、5设置启动等级
      6. 接下来启动 sysinit
    2. init处理系统初始化流程sysinit
      1. 获取网络环境和主机类型
      2. 载入内存设备/proc 和usb设备/sys
      3. 决定是否启动SELinux
      4. 监测设备和pnp参数测试
      5. 自定义模块的加载
      6. 。。。。
      7. 。。。
      8. 将启动信息写到dmesg文件
    3. 启动系统服务 /etc/rc.d/rc3,可以打开看看文件的格式
      1. 要在运行等级为3时启动某个服务,要将其写入到rc3.d文件中,该文件
        1. S开头的文件为启动时要启动的服务,K开头的文件为关闭时要关闭的服务
        2. SK后接的时执行顺序
    4. 用户自定义启动程序
      1. /etc/rc.d/rc.local
      2. 将脚本的完整文件名写到该文件中,就可以开机自启动
    5. 切换运行等级
      1. 运行等级不同启动,结果只是启动了/ect/rc.d/rc[0-6]的文件里的服务不同而已
      2. 修改运行等级
        1. 修改默认等级需要修改/etc/initab
        2. 暂时修改 init [0-6]
          1. 执行的过程,将如现在是rc3 执行init 5,系统执行的动作有
            1. 比较rc3与rc5之间的K、S文件不同
            2. 关闭rc3中启动的而rc5中没有的服务
            3. 启动rc5中有二rc3中没有启动的服务
        3. 查看当前运行等级 runlevel
  • 18.2 核心与核心模块
    1. 启动过程中核心 驱动主机的硬件设备
    2. 核心可以读取驱动程序modules
    3. 核心和核心模块的位置
      1. 核心:/boot/vmlinuz,已编译的二进制文件
      2. 核心的解压缩RAM Disk /boot/initrd,
      3. 核心modules:/lib/modules,
      4. 核心源码/usr/src/linux,
    4. 如果要添加一个新硬件,操作系统不支持,需要重新编译核心
    5. 核心modules与依赖性
      1. 核心的文件结构
2. 核心的依赖性保存在 modules.dep文件中

      1. 使用depmod可以建立该文件
      2. 将已编译好的驱动程序放到kernel目录的对应文件夹下,执行depmod就可以更新modules.dep文件,核心就能识别该模块
    • 核心modules的观察 lsmod 、modinfo
      1. 查看modules的信息
    • 核心modules的加载与删除
      1. insmod 手动添加模块
        1. 不会分析模块的依赖性
      2. rmmod删除模块
      3. modprobe处理模块的加载问题
        1. 该命令直接搜索modules.dep文件的依赖性,更方便
        2. modprobe modulename
    • 核心模块的额外参数设置
      1. 在/etc/modprobe.conf
  • 18.3引导加载程序 Grub
    1. MBR的512k不足以安装grub,分阶段安装
      1. stage1:安装grub的最小主程序,并不加载相关设置文件,主程序安装在MBR或者超级块(分区的第一个扇区)
      2. stage2:加载引导加载程序的相关设置文件和相关环境参数,一般在/boot

    2. grub可以完成的功能:
      1. 指定并取用核心文件,加载到主存储器中
      2. 将加载任务交给下一个加载程序
    3. 例如
      1. MBR中安装了windows和linux的grub,/dev/hda2/的超级块安装了linux的grub2,核心文件放在该分区/boot/linuz,/dev/hda1安装了windows的grub1,
        1. mbr可以直接指定核心文件启动
        2. 可以将起交给grub2启动
        3. 交给grub1启动
      2. linux可以将grub的主程序安装在mbr或超级块,windows只能安装在超级块,所以需要先安装windows在安装linux,否则linux的主程序将会被覆盖。
      3. 但是可以修改
  • 18.5 启动过程的问题
    1. 忘记root密码
      1. 以运行等级1进入单用户模式
        1. 修改/etc/shadow 将root的哪一行的第二个字段去掉,root就没密码了

      2. 使用knoppix工具
    2. 设置错误无法进入系统
      1. 例如磁盘配额错误
        1. 进入单用户模式 重新载入根目录,
      2. 没有正常关机
        1. 进入单用户模式运行fsck修复磁盘
0 0
原创粉丝点击