zoukankan      html  css  js  c++  java
  • Linux引导流程解析

    一、 Linux引导流程
    1、系统引导流程
    固件firmware (CMOS/BIOS) -> POST加电自检

    自举程序 BootLoader (GRUB) ->载入内核

    载入内核 ->驱动硬件

    启动进程init

    读取执行配置文件 /etc/inittab

    2、常用固件设置
    ①安全设置
    ②可引导介质列表
    ③可引导介质搜索顺序
    ④电源管理
    ⑤启动细节显示

    3、固件设置实例
    hwclock 显示与设定硬件时钟(hardware clock)

    4、主引导记录
    Bootloader | partition table | Magic number
    446bytes | 64bytes | 2bytes = 512 bytes

    BootLoader 自举程序(引导装载程序)
    Partition table 分区表,记录磁盘分区信息

    5、内核
    内核源码位置:/usr/src/linux
    内核是整个操作系统的核心部分,负责最核心的文件系统管理、进程调度、网络通信等

    二、Linux运行级别
    Linux运行级别有7个,分别是:
    0 关机
    1 单用户
    2 无NFS的多用户
    3 多用户
    4 不使用
    5 X11
    6 重启

    三、Linux启动服务管理
    1、init的工作
    init读取inittab文件,执行缺省运行级别,从而继续引导过程。在UNIX系统中,init是第一个可以存在的进程,它的PID恒为1,但它也必须向一个更高级的功能负责:PID为0的内核调度器(Kernel scheduler),从而获得CPU时间。

    2、inittab文件解析
    ①查看当前的运行级别
    直接输入命令runlevel
    ②运行级别的切换
    init [0123456Ss] 或 telinit[0123456Ss]
    如 : init 3代表切换到运行级别3

    Inittab文件描述了系统默认运行级别,已经相应的级别应该执行的初始化
    在inittab中,所有条目采用以下格式:
    Id: run-levels: action : process
    Id 标识符,一般为两位
    Run-levels 指定运行级别,可以指定多个
    Action 指定运行状态
    Process 指定要运行的脚本/命令

    3、启动服务
    Action常用取值:
    Inittdefault:指定系统缺省启动的运行级别
    Sysinit:系统启动执行process中指定的命令
    Wait:执行process中指定的命令,并等其结束再运行其他命令
    Once: 执行process中指定的命令,不等待其结束
    Ctrlaltdel:按下ctrl + alt + del 时执行process指定的命令
    Powerfail: 当出现电源错误时执行process指定的命令,不等待其结束
    Powerokwait:当电源恢复时恢复process指定的命令
    Respawn:一旦process指定的命令中止,便重新运行该命令

    /etc/rc.d/init.d 该目录下包含各个运行界别的服务程序脚本
    如l3:3:wait:/etc/rc.d/rc 3,表示当运行级别切换为3时,会执行目录/etc/rc.d/rc 脚本,这个脚本会执行/etc/rc.d/rc3.d目录下的服务程序脚本的符号链接,链接到init.d目录中的相应脚本,完成相应级别的初始化设置

    id:3:initdefault: 这一句描述了默认的运行级别,3代表多用级别,5代表X windows级别

    si::sysinit:/etc/rc.d/rc.sysinit
    启动脚本/etc/rc.d/rc.sysinit,完成系统服务程序启动,如系统环境变量设置、设置系统时钟、加载字体、检查加载文件系统、生成系统启动信息日志文件等。

    4、设置自启动程序
    Ln – s 设置符号链接
    Chkconfig 检查、设置系统的各种服务
    Ntsysv 以图形化界面程序设置当前运行级别的自启动服务

    5、相关命令及日志
    ①Dmesg 命令可以检查引导期间的错误
    ②检查系统日志/var/log/messages,查找可能被dmesg忽略的应用程序错误

    四、GRUB配置与应用
    1、Grub的配置
    配置文件默认为/boot/grub/grub.conf
    default=0 表示 启动时默认选择的title
    timeout=5 表示启动延时
    splashimage表示grub菜单背景图片
    hidemenu是隐藏菜单
    title定义菜单名称
    root设置grub的根设备即内核所在的分区
    kernel定义内核文件所在位置
    initrd命令加载镜像文件

    2、GRUB命令
    e 编辑当前启动菜单项
    c 进入GRUB的命令行方式
    b 启动当前的菜单项
    d 删除当前行
    Esc 返回GRUB启动菜单界面,取消对当前单项所做的任何修改

    五、启动故障分析与解决
    1、单用户模式应用
    ①单用户模式可以不用密码登陆系统,并且拥有root权限。
    ②登录方式:开机进入GRUB界面,按e进入行编辑模式,在kernel按e键,在后面加上1或s ,即可进入单用户模式
    ③单用户模式可以用于重新设置root密码

    2、GRUB密码
    为了防止其它用户随意修改root密码,可以给GRUB加一个密码
    ①使用GRUB自带的grub-md5-crypt命令将明文密码转换为MD5密文 或 在grub交互命令行界面中使用md5crypt命令,即直接键入grub,再键入md5crypt
    ②编辑GRUB配置文件,加入行password –md5 密文

    3、GRUB修复
    若开机后没有进入GRUB界面,但是无法成功启动,可能是GRUB配置文件出现了问题(如文件路径写错),根据错误提示直接修改GRUB配置文件即可。在GRUB界面可以查看配置文件 cat /grub/grub.conf

    4、Linux修复模式
    ①将安装盘放入光驱,重新启动机器,在BIOS中设置为光驱引导
    ②按F5进入linux rescue模式说明,在boot提示符下输入linux rescue回车进入修复模式

  • 相关阅读:
    2017 ACM-ICPC西安网赛B-Coin
    Codeforces389D(SummerTrainingDay01-J)
    Codeforces672D(SummerTrainingDay01-I)
    VS2017.滚动条选项
    VS.自动调试
    ffmpeg.mp4.格式资料
    vs2017.unresolved external symbol __imp__fprintf&__imp____iob_func
    vs2017."const char *"的实参与"char *"的形参不兼容_goto跳过类型声明
    vue项目开发时怎么解决跨域
    vue奇怪的知识点又增加了
  • 原文地址:https://www.cnblogs.com/hlb430/p/2613053.html
Copyright © 2011-2022 走看看