本人在最近一两年的工作中经常要部署OpenStack,所以经常需要用PXE的方式部署系统。之前对PXE也是一知半解,后来查阅了一些资料,对PXE有了一些简单的理解。今天就来跟大家分享一下。本人也是才疏学浅,如有错误,欢迎指正。

首先问大家几个问题:

  1. 谁搞出来的PXE?

  2. 这哥们儿把PXE做出来是想搞什么事情?

  3. 我的电脑能做PXE吗?

  4. PXE的原理是什么?

请自己在心里默默揣摩一下,上面的问题你知道几个?如果少于三个,那么别犹豫了,快上车。

PXE是什么?

PXE全称Preboot eXecution Environment,也叫预启动执行环境。由Intel 和 Systemsoft于1999年9月20日发布。

PXE提供了一种通过网络启动计算机的机制。这种机制让计算机的启动可以不依赖本地数据存储设备(如硬盘)或本地已安装的操作系统。

为什么要用PXE?

很多情况下,我们需要给几十台甚至上百台服务器装操作系统。比如我目前的工作,部署OpenStack环境,一次部署几十台服务器那是家常便饭,这时候如果让你手动一台台去装,那么这种大量重复的劳动会让你崩溃,而且很多时候时间也不允许。所以为了把人从这种繁重的重复性工作中解放出来,PXE就应运而生了。

PXE是什么原理?

首先PXE只是一个框架,他的工作需要几种底层协议的支持,分别是:UDP/IP, DHCP, TFTP。

严格来说,PXE 并不是一种安装方式,而是一种引导方式。进行 PXE 安装的必要条件是被安装的计算机必须有一个 支持PXE 的网卡,也就是说在网卡的ROM中要有一个PXE client程序。PXE的工作模式是client/server模式。它的大致工作流程是这样的:

  1. 当计算机引导时,BIOS 把 PXE Client 调入内存中执行

  2. Client端广播一个DHCPDISCOVER消息,其中包含一个DHCP扩展字段,用来表示该条消息来自一个PXE client。

  3. Server端收到以后,会给客户端回一个消息,告诉它TFTP server的地址和TFTP server上bootstrap文件的存放位置。

  4. PXE Client 从TFTP服务器上下载bootstrap文件。centos中该文件叫pxelinux.0 。pxelinux.0文件是一个二进制文件,本质上是一个bootloader(grub就是一种BootLoader)程序。通过它来引导kernel和initrd,实现网络启动。

  5. 客户端收到pxelinux.0文件后执行文件。执行完以后客户端就知道下一步该干什么了。pxelinux.0首先会让客户端去pxelinux.cfg文件夹下找一个文件,叫default,并按照这个菜单文件的指导继续往下进行,default就是菜单文件。菜单文件可以在系统启动的时候如果有多个系统给我们一个选择的机会。pxelinux.cfg这个文件夹的存放位置后面会提到。

  6. 客户机读取default文件,等待用户选择安装指定系统后,客户端向tftp.server发出提供内核文件vmlinuz和根文件系统initrd.img的请求。

  7. tftp.server收到客户端请求,提供vmlinuz和initrd.img。

  8. 客户端收到文件,加载内核文件,内核文件根据bootstrap的配置文件pxelinux.0向PXE sever请求提供自动安装脚本和源文件,PXE Server通过ftp/http/nfs中的一个向客户端传送相关脚本和源文件,客户端获得后进行自动安装。

下面我们一起看一下大致的配置,通过配置更好的理解上面的步骤。注意下面的配置只是截取了关键部分方便大家理解PXE的过程。在生产环境中,真正的PXE基本都是自动化实现的。

客户端配置

客户端基本上不需要做什么操作,只需要配置一个支持PXE的网卡,然后在BIOS中将系统启动方式设置为PXE即可。这里要注意,如果使用ipv6网络,那么BIOS的启动模式要设置为UEFI模式。

服务端的配置

Step1:安装服务

安装DHCP,TFTP,FTP/HTTP/NFS服务。随后开启服务并设置服务开机启动。

Step2:配置并重启DHCP服务

# dhcpd.conf ddns-update-style interim; ignore client-updates; allow booting; allow bootp; class "pxeclients" {match if substring(option vendor-class-identifier,0,9)="PXEClient"; next-server 192.168.1.250;  #如果PXE client的DHCP discovery字段中包含PXEClient字段 filename "pxelinux.0";      #则TFTP server和pxelinux.0文件如左边所示 } subnet 192.168.1.0 netmask 255.255.255.0 { option broadcast-address 192.168.1.255; option routers 192.168.1.250; #网关信息 option subnet-mask 255.255.255.0; range 192.168.1.205 192.168.1.249; #可用地址池   default-lease-time 8640000; }

这个配置文件告诉我们PXE server端会判断收到的DHCP discover报文是不是来自PXE client,如果是,那么会告诉client TFTP server的地址和bootstrap文件在TFTP server上存放的相对路径。

注意:filename后面跟的是相对路径,路径的前一部分在下面TFTP的配置文件中。

Step3:配置TFTP服务并重启

# default: off # description: The tftp server serves files using the trivial file transfer protocol. service tftp {     socket_type     = dgram     protocol        = udp     wait            = yes     user            = root     server          = /usr/sbin/in.tftpd     server_args     = -s /tftpboot  ##存放操作系统镜像文件的文件夹,可以修改     disable         = no     per_source      = 11     cps         = 100 2     flags           = IPv4     }

注意:这里-s指的是将后面的/tftpboot作为根路径,如果这里不加-s,那么上面dhcp的配置文件中filename后面就必须要跟绝对路径/tftpboot/pxelinux.0

Step4:配置nfs服务并重启

/tftpboot *(rw,no_root_squash)  ##将该文件下的所有文件共享给任意用户

Step5:将所需文件放到/tftpboot路径下

主要是四个文件:pxelinux.0,vmlinuz,initrd.img和default文件,其中default文件需要新建一个文件夹叫pxelinux.cfg,然后把default文件放进去。

Step6:配置default文件

default vesamenu.c32

prompt 1 ###prompt 值为“0”时表示自动执行ks.cfg文件(无人值守),为“1”时表示手动配置(有人值守)

timeout 600

display boot.msg
menu background 1.jpg
menu title Welcome!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000

label install
menu label ^1)Install rhel7.4 in /dev/sda
menu default

kernel rhel7.4/vmlinuz biosdevname=0 ##指定vmlinuz的路径

append initrd=rhel7.4/initrd.img ks=nfs:192.168.1.250:/tftpboot/rhel7.4/ks/ks.cfg ##指定initrd和Kickstart应答文件的位置

注意这里只保留了一个label install,实际可以定义多个,每个label install就是一种选择。当你选则某种启动方式以后,系统就会到相应的路径下找所需的文件。

Step7:配置无人值守kickstart文件

#platform=x86, AMD64, or Intel EM64T...

kickstart是干嘛的呢?大家装过系统的都知道,手动装系统的时候需要不断地手动设置各种参数。如果同时大量部署服务器,这显然不显示,kickstart文件就是一个已经定义好各种参数的文件,系统安装的时候会自动按照该文件中的参数配置系统,避免了大量的手动干预。

当系统按照kickstart文件制定的参数安装好以后,我们就通过PXE的方式成功装了一个系统。

最后我们简单总结一下关键步骤:系统启动以后加载BIOS -> 如果启动方式是PXE,BIOS将网卡中的PXE client程序加载进内存 -> 系统获取bootstrap文件 -> 通过bootstrap文件找到菜单文件default -> 通过菜单文件default找到内核和根文件系统 -> 加载内核和根文件系统 -> 按照kickstart文件的设置安装系统 -> 系统安装完成。

pxe安装系统 ip获取错误_聊聊PXE的那点东西相关推荐

  1. pxe安装系统 ip获取错误_【图说】消防系统安装典型错误举例

    消火栓栓口向上 安装错误判据: [消规]7.4.8 建筑室内消火栓栓口的安装高度应便于消防水龙带的连接和使用,其距地面高度宜为1.1m:其出水方向应便于消防水带的敷设,并宜与设置消火栓的墙面成90º角 ...

  2. PXE安装系统,tftp open timeout

    问题描述 1.pxe客户机,dhcp获取ip成功,报错tftp open timeout 2.虚拟机linux系统防火墙,selinux已关闭,windows主机防火墙也关闭了 最后我把windows ...

  3. pxe装机dhcp获取不到_通过PXE安装系统失败后的解决办法

    用户如无法正常为服务器在线安装操作系统,请参考下列解决办法. 一. 提示:Media test failure,check cable 故障现象:1. 看到PXE启动,并提示 Media test f ...

  4. linux系统在pe下查看ip地址,pe下查看原系统ip的方法_网站服务器运行维护

    linux查看php环境是否安装_网站服务器运行维护 linux查看php环境是否安装的方法:1.执行[find / -name php.ini]命令,查看系统是否有php的配置文件:2.执行[net ...

  5. ubuntu16 kickstart pxe 安装系统

    环境 PXE网段:172.25.151.0/24 PXE网关:172.25.151.1 PXE服务器地址:172.25.151.254 PXE服务器系统 : ubuntu 16.04 DHCP地址池: ...

  6. cad安装日志文件发生错误_安装软件提示“打开安装日志文件时发生错误”解决办法...

    最近有朋友在安装loadrunner时发生报错,windows installer报错:打开安装日志文件时发生错误.请检查指定的日志文件位置是否存在并且可以写入. 造成报错的原因就是他之前安装过一次l ...

  7. Centos7超级无敌简单的PXE安装系统手动与自动化

    手动PXE网络装机 查看防火墙,内核关了没有 一定要关掉虚拟机设置的自带的dhcp服务 mount /dev/cdrom /mnt       #挂载光盘 yum环境最基本的设置 mkdir -p / ...

  8. 联想服务器pxe安装系统,PXE下无人值守配置阵列及安装CentOS7

    2020-04-13 576 次阅读 客户采购200台联想服务器,现在需要安装系统, 一台一台的用优盘安装,显然不是最佳办法,PXE安装肯定是首选,但是还是得一台一台配置阵列,这样,明显效率不高.我百 ...

  9. 安装系统7-zip数据错误

    今天安装系统报7-zip数据错误,在网上下了好几个系统镜像,都是这个错误,百思不得其解,最终在淘宝花30块钱买了个教训,原来网上的系统镜像不是原版的自带一些驱动,存在驱动兼容问题,原版镜像是不带驱动的 ...

最新文章

  1. 【Android 安装包优化】使用 lib7zr.a 静态库处理压缩文件 ( 交叉编译 lib7zr.a 静态库 | 安卓工程导入静态库 | 配置 CMakeLists.txt 构建脚本 )
  2. docker 安装mysql_docker学习4docker安装mysql环境
  3. DCMTK:各种“字符串值”方法的测试程序
  4. sqoop数据倾斜_北京卓越讯通大数据岗位面试题分享
  5. Taro+react开发(29)引入固定地址的方式
  6. Shell 脚本案例实战 [4]
  7. Redis五大基本数据类型及其相关命令及常用用途
  8. linux服务器调优列表,2018-10-24(linux服务器常见的各种参数调优)
  9. 微信小程序-测试游戏生成六边多边形
  10. 设计模式之单例模式浅谈
  11. java 图片水印旋转,Java实现 图片水印或者文字水印详解
  12. html中c b和b s,Web开发中B/S架构和C/S架构的区别
  13. 使用Easy CHM工具对文件生成API文档
  14. 24种不同的ITF条形码字体Interleaved 2 of 5 Barcode Font Advantage Package
  15. c语言printf分析,C语言 printf详解
  16. 修炼你的《九阳神功》行走江湖
  17. 你真的会冲奶粉吗?3步正确冲泡奶粉,合理避开4个常见的误区
  18. JavaScript------常用JS方法(utils.js)骨灰级总结
  19. 微信服务器带宽是多少?使用大带宽服务器有什么好处?
  20. nvidia显卡的Exclusive Process模式

热门文章

  1. jQuery Mobile中头部栏header的data-*选项
  2. -创建日期和时间数组--提取年月日-显示格式
  3. 【paper and code】AC-GAN
  4. 过程定义伪指令proc和宏命令伪指令macro
  5. 前端传递给后端且通过cookie方式,尽量传递id
  6. golang中值类型/指针类型的变量区别总结
  7. (1)封装 (2)static关键字 (3)继承
  8. 2287: 【POJ Challenge】消失之物
  9. 【Xamarin挖墙脚系列:Xamarin的核心】
  10. php提交字符串中有加号(+)时会后台得到空格的问题