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

本文为鸟哥中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程序
Linux的启动和关机的流程、引导加载程序


  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修复磁盘