Note For Linux By Jes(14)-启动流程、模块管理与 Loader

Linux的启动流程分析

启动流程一览

  1. 加载BIOS 的硬件资讯与进行自我测试,并依据配置取得第一个可启动的装置;

  2. 读取并运行第一个启动装置内MBR boot Loader (亦即是grub, spfdisk 等程序)

  3. 依据boot loader 的配置加载Kernel Kernel会开始侦测硬件与加载驱动程序;

  4. 在硬件驱动成功后,Kernel会主动呼叫init 程序,而init 会取得run-level 资讯;

  5. init 运行/etc/rc.d/rc.sysinit 文件来准备软件运行的作业环境(如网络、时区等)

  6. init 运行run-level 的各个服务之启动(script 方式)

  7. init 运行/etc/rc.d/rc.local 文件;

  8. init 运行终端机模拟程序mingetty 来启动login 程序,最后就等待使用者登陆啦;



BIOS, boot loader kernel 加载:

BIOS, 启动自我测试与MBR

Boot Loader 的功能



  • 提供菜单:使用者可以选择不同的启动项目,这也是多重启动的重要功能!

  • 加载核心文件:直接指向可启动的程序区段来开始操作系统;

  • 转交其他loader:将启动管理功能转交给其他loader 负责。


加载核心侦测硬件与initrd 的功能


第一支程序init 及配置档/etc/inittab runlevel

Run level:运行等级有哪些

  • 0 - halt (系统直接关机)

  • 1 - single user mode(单人维护模式,用在系统出问题时的维护)

  • 2 - Multi-user, without NFS(类似底下的runlevel 3,但无NFS 服务)

  • 3 - Full multi-user mode(完整含有网络功能的纯文字模式)

  • 4 - unused (系统保留功能)

  • 5 - X11 (runlevel 3 类似,但加载使用X Window)

  • 6 - reboot (重新启动)

/etc/inittab 的内容与语法

[配置项目]:[run level]:[init 的动作行为]:[命令项目]



init 的处理流程

  1. 使用/etc/rc.d/rc.sysinit 进行系统初始化

  2. 由於runlevel 5 ,因此只进行『l5:5:wait:/etc/rc.d/rc5』,其他行则略过

  3. 配置好[ctrl]+[alt]+[del] 这组的组合键功能

  4. 配置不断电系统的pf, pr 两种机制;

  5. 启动mingetty 的六个终端机(tty1 ~ tty6)

  6. 最终以/etc/X11/perfdm -nodaemon 启动图形介面啦!



init 处理系统初始化流程(/etc/rc.d/rc.sysinit)

取得网络环境与主机类型:
读取网络配置档/etc/sysconfig/network ,取得主机名称与默认通讯闸(gateway) 等网络环境。

  1. 测试与挂载内存装置/proc U盘装置 /sys
    除挂载内存装置/proc 之外,还会主动侦测系统上是否具有usb 的装置,若有则会主动加载 usb 的驱动程序,并且尝试挂载usb 的文件系统。

  2. 决定是否启动SELinux
    我们在第十七章谈到的SELinux 在此时进行一些检测,并且检测是否需要帮所有的文件重新编写标准的SELinux 类型(auto relabel)

  3. 启动系统的乱数产生器
    乱数产生器可以帮助系统进行一些口令加密演算的功能,在此需要启动两次乱数产生器。

  4. 配置终端机(console) 字形:

  5. 配置显示於启动过程中的欢迎画面(text banner)

  6. 配置系统时间(clock) 与时区配置:需读入/etc/sysconfig/clock 配置值

  7. 周边设备的侦测与Plug and Play (PnP) 参数的测试:
    根据核心在启动时侦测的结果(/proc/sys/kernel/modprobe ) 开始进行ide / scsi / 网络/ 音效等周边设备的侦测,以及利用以加载的核心模块进行PnP 装置的参数测试。

  8. 使用者自订模块的加载
    使用者可以在/etc/sysconfig/modules/*.modules加入自订的模块,则此时会被加载到系统当中

  9. 加载核心的相关配置:
    系统会主动去读取/etc/sysctl.conf 这个文件的配置值,使核心功能成为我们想要的样子。

  10. 配置主机名称与初始化电源管理模块(ACPI)

  11. 初始化软件磁盘阵列:主要是透过/etc/mdadm.conf 来配置好的。

  12. 初始化LVM 的文件系统功能

  13. fsck 检验磁碟文件系统:会进行filesystem check

  14. 进行磁碟配额quota 的转换(非必要)

  15. 重新以可读写模式挂载系统磁碟:

  16. 启动quota 功能:所以我们不需要自订quotaon 的动作

  17. 启动系统虚拟乱数产生器(pseudo-random)

  18. 清除启动过程当中的缓存文件:

  19. 将启动相关资讯加载/var/log/dmesg 文件中。



启动系统服务与相关启动配置档(/etc/rc.d/rc N & /etc/sysconfig)

使用者自订启动启动程序(/etc/rc.d/rc.local)

根据/etc/inittab 之配置,加载终端机或X-Window 介面

启动过程会用到的主要配置档:/etc/modprobe.conf/etc/sysconfig/*

Run level 的切换:init[0-6]







核心与核心模块

  • 核心:/boot/vmlinuz /boot/vmlinuz-version

  • 核心解压缩所需RAM Disk/boot/initrd (/boot/initrd-version)

  • 核心模块:/lib/modules/version/kernel /lib/modules/$(uname -r)/kernel

  • 核心原始码:/usr/src/linux /usr/src/kernels/ (要安装才会有,默认不安装)

核心模块与相依性:

/lib/modules/$(uname -r)/kernel

lib/modules/$(uname -r)/modules.dep

depmod

核心模块的观察:

多少模块:lsmod

  • 模块名称(Module)

  • 模块的大小(size)

  • 此模块是否被其他模块所使用(Used by)

模块的资讯:modinfo

核心模块的加载与移除:

insmod 则完全由使用者自行加载一个完整档名的模块

rmmod 移除模块

核心模块的额外参数配置:/etc/modprobe.conf





Bootloader: Grub

boot loader 的两个stageStage1:运行boot loader 主程序,Stage2:主程序加载配置档

grub 的配置档/boot/grub/menu.lst 与菜单类型

grub 对磁碟的代号配置与Linux 不同,主要透过侦测的顺序来给予配置。如(hd0) (hd0,0) 等。

menu.lst 内每个菜单与titile 有关,而直接指定核心启动时,至少需要kernel initrd 两个项目

menu.lst 内配置loader 控制权移交时,最重要者为chainloader +1 这个项目。

若想要重建initrd ,可使用mkinitrd 处理

重新安装grub MBR boot sector 时,可以利用grub shell 来处理。





启动过程的问题解决

忘记root 口令的解决之道:

重新启动!一定要重新启动!怎么重开都没关系;

  1. 在启动进入grub 菜单后,(1)在你要进入的菜单上面点'e' 进入详细配置;(2)将光棒移动到kernel 上方并点'e' 进入编辑画面;(3)然后出现如下画面来处理:

    grub edit> kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet single

    重点就是那个特殊字体的咚咚啦!按下[enter] 再按下b 就能够启动进入单人维护模式了。

  2. 进入单人维护模式后,系统会以root 的权限直接给你一个shell ,此时你就能够运行『passwd 』这个命令来重建root 的口令啦!然后直接『init 5 』就可以切换成为X 窗口介面罗!就是这么简单。

init 配置档错误:

grub edit> kernel /vmlinuz-2.6.18-92.el5 ro root=LABEL=/ rhgb quiet init=/bin/bash



BIOS 磁碟对应的问题(device.map)

因文件系统错误而无法启动:/etc/fstab

利用chroot 切换到另一颗硬盘工作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值