• PXE | 开关机


    PXE | 开关机流程

    主要阶段
    引导的主要6个阶段

    1. 从MBR中读取引导加载程序boot loader
    2. 加载并初始化内核;
    3. 检测和配置设备;
    4. 创建内核进程;
    5. 系统管理员干预(单用户模式)
    6. 执行系统启动脚本

    boot squene
    boot squene

    1.1 BIOS

    SMPS(Switching Mode Power Supply)即开关变换器,即服务器电源,当电压检查没问题后,SMPS会发送POWER GOOD信号给主板计数器。一旦主板收到该信号则会停止向CPU发送reset信号。CPU就开始工作了。然后ROM上有个代码固定跳转到启动区。

    1. 按下开机后执行POST(Power-On Self-Test)对硬件进行自检,确保所有硬件工作正常。按F12F2进入BIOS设置。主要检测如下硬件:
      • Timer IC计数器
      • DMA controller
      • CPU
      • Video ROM

    而完整自检则还会检测如下信息:
    - 主板
    - 键盘
    - 打印机口
    - 硬盘灯

    冷重启和热重启区别:
    当进行热重启时,将会跳过完整自检,冷重启会执行完整检测

    1. 检查服务器是cord boot还是warm boot
    2. CMOS里接收存储的时间、日期和一些重要系统信息。
    3. BIOS检查都是好的后开始在MBR上搜寻可用的操作系统启动字段
    4. 一旦BIOS找到可用MBR后,开始执行启动并执行磁盘或CD等设备的第一段512字节启动字段(sector 0),找不到第一个会找第二个启动项,如果找完也无法找到,则会使用告警“No boot device found”

    初始化代码主要从BIOS中加载,一旦BIOS确定从哪些设备上引导系统,它就会加载设备上开头512字节的数据段,即MBR。MBR里有个程序会告诉计算机从哪个分区加载第二阶段的引导程序。

    1.2 MBR

    1. 在BIOS执行可用的MBR后,MBR开始查找可用的主分区(primary parition)并标记为可启动项,一般是/dev/hda或sda等

    2. MBR找到可用主分区后开始执行该分区的第一个512字节,即第二级MBR,在LINUX上这个第二级MBR主要指LILOGRUB。MBR只要有3部分

      • 446字节主分区信息
      • 64字节分区表信息
      • 2字节MBR检查信息(Magic number)
    3. 由于分区表只有64bytes,而每个分区大小为16bytes,因此我们最多创建4个主分区(primary partition)。且扩展分区(extended)分区最多有一个。因此要么4个全是主分区,要么(1,2,3)个主分区+一个扩展分区。

    1.2.1 LILO(老系统)

    因为其太大,512字节无法装下,因此LILO分成了两部分:installerruntime模块,

    • installer:改模块存放在MBR上,而runtime模块则包含系统信息。
    • 当runtime模块执行时,它选择操作系统并转换内核

    LILO不关心文件系统和boot镜像,所以会原生态的加载他们。

    1.2.2 GRUB

    1. GRUB MBR包含446字节的主引导部分和64字节的分区表
    2. GRUB会列出所有已安装系统的引导界面并让用户选择
    3. 用户选择系统后,GRUB会开始加载内核
    4. grub的配置文件为/boot/grub/grub.conf,而/etc/grub.conf文件做了个链接到改配置文件。
    #boot=/dev/sda
    default=0
    timeout=5
    splashimage=(hd0,0)/boot/grub/splash.xpm.gz
    hiddenmenu
    title CentOS (2.6.18-194.el5PAE)
              root (hd0,0)
              kernel /boot/vmlinuz-2.6.18-194.el5PAE ro root=LABEL=/
              initrd /boot/initrd-2.6.18-194.el5PAE.img

    1.3 Kernel

    内核在grub配置文件中用root=标识的。
    一旦GRUB或LILO移交控制权给内核后,内核将会执行下列任务:

    1. 初始化设备和加载initrd模块。(Initrd ramdisk或者initrd是指一个临时文件系统,它在启动阶段被Linux内核调用。initrd主要用于当“根”文件系统被挂载之前,进行准备工作。包含一些编译后的驱动),类似WIN PE系统,比如大白菜装机
    2. 挂载根分区文件系统
    3. 如果kernel挂载文件系统失败,则会出现“kernel panic”。
    4. 内核越小越好,因此内核首先是个压缩文件,其次大部分驱动和工具然间由initrd提供。一般文件名为initramfs
    5. /boot目录下存放内核和initrd文件

    grub默认从/boot/grub/menu.lst/boot/grub/grub.conf中读取配置,引导时修改grub、内核的配置不保留,而修改grub.conf文件则会保留

    内核执行步骤:
    1. 配置硬件和内存
    2. 解压initrd镜像并挂载和加载必须的驱动
    3. 利用insmod和rmmod等加载内核模块
    4. 查找硬盘如LVM或raid
    5. 卸载initrd镜像并释放内存
    6. 内核通过只读方式读取grub.conf文件来挂载指定的root parition
    7. 运行init程序

    1.4 Init

    1. 内核加载后,开始在/sbin/init中查找init并执行.
    2. 所以linux第一个开始执行的进程是init进程。
    3. init会开始读取/etc/inittab文件并开始设置路径、swap、检查文件系统等。
    4. 运行所有启动项脚本(/etc/rd.d/,/etc/rc.boot/
    5. 读取/etc/inittab文件中的运行级别并启动系统。

    inittab一般按照如下顺序执行:
    - 1. 根据/etc/sysconfig/network判断系统是否网络启动
    - 2. 挂载/proc并判断驱动程序状态
    - 3. 设置系统时间
    - 4. 启用虚拟内存,激活和挂载swap分区,/etc/fstab
    - 5. 设置主机名和认证信息、网络服务
    - 6. 判断根系统并挂载
    - 7. 根据/etc/fstab信息挂载文件系统
    - 8. 挂载一些可插拔设备和声卡等设备
    - 9. 判断磁盘信息和raid信息
    - 10. 挂载所有特定分区/etc/fstab
    - 11. 执行其他系统任务

    1.5 创建内核进程

    init进程号始终为1.
    ps aux命令中可以看到一些用[]的进程,这些都是内核进程
    [watchdog/2]进程后面有数字的标识在哪个处理器上运行。

    1.6 启动脚本

    脚本一般保存在/etc/init.d下,运行级别在/etc/inittab文件中定义

    drwxr-xr-x 2 root root 4096 Apr 20  2018 init.d
    drwxr-xr-x 2 root root 4096 Apr 19  2018 rc0.d
    drwxr-xr-x 2 root root 4096 Apr 19  2018 rc1.d
    drwxr-xr-x 2 root root 4096 Apr 19  2018 rc2.d
    drwxr-xr-x 2 root root 4096 Apr 19  2018 rc3.d
    drwxr-xr-x 2 root root 4096 Apr 19  2018 rc4.d
    drwxr-xr-x 2 root root 4096 Apr 19  2018 rc5.d
    drwxr-xr-x 2 root root 4096 Apr 19  2018 rc6.d
    -rwxr-xr-x 1 root root  619 Apr 21  2018 rc.local

    rclevel.d表示不同的运行级别所读取的脚本。而里面的脚本启动和关闭顺序不同

    lrwxrwxrwx 1 root root 20 Apr 25 13:06 K50netconsole -> ../init.d/netconsole
    lrwxrwxrwx 1 root root 17 Apr 25 13:06 S10network -> ../init.d/network

    init从低级别向高级别过渡时,按照递增的顺序start所有带S开头的脚本,而从高级别向低级别过渡时,则按照数字递减的顺序stop所有带K的脚本

    引导过程中大部分配置文件是调整/etc/sysconfig/文件来实现。常用的有

    • clock:调整时钟
    • console:总为空
    • crond:传给cron这个守护进程的参数
    • i18n:系统的本地设置,日期、语言等
    • init:配置启动脚本发出消息的显示方式
    • keboard:设置键盘
    • mouse:设置鼠标
    • network:设置网络,主机名、网关、转发机制等
    • network-scripts:网络补充脚本和网络配置文件
    • sendmail:邮件设置

    1.7 关机

    shutdown -h = halt
    shutdown -r = reboot

    enter description here
    enter description here

  • 相关阅读:
    Oracle block 格式
    oracle用户解锁
    如何扩大重做日志(redolog)文件的大小
    Oracle重建临时表空间
    ORA-32004: obsolete and/or deprecated parameter(s) specified
    oracle分布式事务总结(转载)
    spring注解 @Scheduled(cron = "0 0 1 * * *")实现定时的执行任务
    IDEA启动Tomcat报错1099 is already in use
    js中const,var,let区别
    mysql笔记
  • 原文地址:https://www.cnblogs.com/hbgzy/p/10270578.html
Copyright © 2020-2023  润新知