PXE启动原理以及与普通Linux启动的对比

PXE启动原理以及与普通Linux启动的对比关于PXE部署的详细配置的文章已经有不少了,这篇文章主要讲一下PXE启动的原理以及PXE启动和普通Linux启动的对比。

大家好,又见面了,我是你们的朋友全栈君。

关于PXE部署的详细配置的文章已经有不少了,这篇文章主要讲一下PXE启动的原理以及PXE启动和普通Linux启动的对比。

一、PXE启动原理:

原理图如下:
PXE启动原理以及与普通Linux启动的对比

DHCP的用途是:提供client network参数和TFTP服务器的地址,最初的bootstrap程序(即DHCP或BootP等)和所需的程序。
首先,PXE client端(BIOS里面的PXE固件)广播一个DHCPDISCOVER的包,它询问所需的网络配置以及网络启动的参数。标准DHCP服务器(非PXE enabled)将回复一个普通的DHCPOFFER包,其中包含网络信息(如IP地址),但并不能提供PXE相关参数,因此PXE Client并不能启动。而PXE enabled的DHCP服务器所回复的DHCPOFFER包里则包含PXE相关信息。
在解析一个PXE enabled的DHCP服务器返回的DHCPOFFER包后,PXE client就能够设置自己的IP地址、IP Mask等等,并且指向网络上的启动资源,比如TFTP服务器上的vmlinuz文件和initrd文件。
然后PXE client就通过TFTP下载这些启动资源到自己的内存中;如果是UEFI Secure Boot(而不是Legacy的BIOS)则还会检验一下这些启动资源。下载完成后就会用这些资源来启动了。
这些启动资源其实就是最小的操作系统(比如WindowsPE,又比如一个basic Linux kernel+initrd)。这个最小操作系统在装载了网络驱动和TCP/IP协议栈之后,就会开始boot或者install完整的操作系统了。而这个boot或install的过程,就不再通过TFTP来做,而是通过更加健壮的网络传输协议(如HTTP、CIFS、iSCSI或NFS)来做。而boot或者install所用到的实体,比如磁盘或者CD-ROM,是位于远端的,因此需要通过网络传输协议来做。

二、PXE启动过程和普通的Linux系统启动过程的对比:

1. 内核引导之前的不同:
普通的从硬盘启动Linux系统最初是BIOS将MBR加载入内存,然后将控制权交给MBR中的bootloader程序(如GRUB),bootloader程序经过几个stage的加载后,最后将vmlinuz加载入内存,开始内核引导;
而PXE的启动过程在内核引导之前,是由BIOS中的PXE固件开启NBP程序(比如DHCP的网络通信),然后下载vmlinuz和initrd,之后再进入内核启动过程。

2. 内核引导之后的不同:
vmlinuz和initrd运行得差不多了之后,普通的硬盘Linux启动就从本地硬盘加载/sbin/init并运行为1号进程,以及启动系统服务等等,而PXE的启动在内核引导完成之后,仍然会通过网络的方式(但不是TFTP协议,而是其他更加健壮的协议如NFS、iSCSI等),加载真正的完整操作系统,如/sbin/init应该就是位于网络远端的硬盘上。

以iSCSI为例,网络远端的硬盘以iSCSI协议挂载到了当前机器,就好像是本地磁盘一样。这就是PXE+iSCSI的启动方式了。

参考文献: 

1. https://en.wikipedia.org/wiki/Preboot_Execution_Environment

2. http://blog.csdn.net/nirendao/article/details/75949536

3. http://backreference.org/2013/12/23/diskless-iscsi-boot-with-pxe-howto/

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147785.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • httpclient访问https

    httpclient访问https

    2022年3月6日
    153
  • keil中debug的使用_keil 多线程

    keil中debug的使用_keil 多线程在点这个之前要先烧写一次程序,不然这一次修改后的程序没有烧进单片机里然后在debug模式下点运行,然后再点停止如果代码有问题就会停在有问题的地方不断循环多试几次如果都停在同一个地方就是那里的代码有问题…

    2022年10月15日
    2
  • java子窗口获取父窗口句柄_java获得窗口句柄[通俗易懂]

    java子窗口获取父窗口句柄_java获得窗口句柄[通俗易懂]学会用按键精灵获取子窗口句柄来源:按键学院【按键精灵】电脑的桌面是最顶级的…Windows通过句柄(Handle)识别每个窗体、控件、菜单和菜单项,当程序运行时,它所包含的每个部件都有一个惟一确定的句柄同其他的部件相区别句柄在WindowsAPI中具有举足……其实呢,“抓抓”抓句柄的功能,实现起来是很容易的,我们一起来操作看看。实现功能点击图片控件之后鼠标不松开,到了需要…

    2022年7月14日
    18
  • performSelector 注意问题及原理

    performSelector 注意问题及原理1 首先使用 performSelec 是要特别注意内存泄漏问题 下面代码演示 创建一个控制器 ZWWTestThrea 从上个控制器 push 到该控制器 ZWWLog 的宏定义 ifdefDEBUG defineZWWLog fmt NSLog s Line d fmt PRETTY FUNCTION

    2025年6月22日
    5
  • 中国知网爬虫

    中国知网爬虫中国知网爬虫一、知网介绍提起中国知网,如果你曾经写过论文,那么基本上都会与中国知网打交道,因为写一篇论文必然面临着各种查重,当然翟博士除外。但是,本次重点不在于写论文跟查重上,而在于我们要爬取知网上一些论文的数据,什么样的数据呢?我们举一个例子来说,在知网上,搜索论文的方式有很多种,但是对于专业人士来说,一般都会使用高级检索,因为直接去查找作者的话,容易查找到很多重名作者,所以我们本次的爬…

    2022年7月26日
    13
  • jenkins安装与配置centos_centos7单用户模式修改密码

    jenkins安装与配置centos_centos7单用户模式修改密码CentOS7修改Jenkins用户

    2022年4月21日
    85

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号