摘要:在实际工作中,我们经常会遇到这样的情况:想要安装Linux但是计算机不带光驱或软驱,或者是笔记本配置的非标准的软驱和光驱,如1394接口,USB接口等,在Linux安装时所引导的Linux内核一般都不会带这些接口的驱动,所以也无法通过本地安装Linux,此外,在一些场合,如机房,IT实验室,工厂生产线,有大量的计算机需要同时安装Linux,如果通过光驱的方式一个个安装,不仅效率低,也不利于维护。这是时候你就需要PXE的强大功能了。本文将就PXE的基本原理和工作方式进行简要介绍。具体的时间过程需要比较丰富的网络知识。

本文来源:http://blog.csdn.net/trochiluses/article/details/11736119

1.操作系统安装的流程

通用流程:首先,bios启动,选择操作系统的启动(安装)模式(此时,内存是空白的),然后根据相关的安装模式,寻找操作系统的引导程序(不同的模式,对应不同的引导程序当然也对应着不同的引导程序存在的位置),引导程序加载文件系统初始化(initrd)程序和内核初始镜像(vmlinuz),完成操作系统安装前的初始化;接着,操作系统开始安装相关的系统和应用程序。

硬盘安装的流程:bios启动——MBR寻找grub——grub程序读取menu.list等配置文件,找到内核启动镜像和相关初始化程序,安装(或者启动)。

PXE(Pre-boot Execution Environment)是由Intel设计,可以使计算机通过网络启动的协议。协议分为client和server两端,PXE client在网卡的ROM中,当计算机启动时,BIOS把PXE client调入内存执行,并显示出命令菜单,经用户选择后,PXE client将放置在远端的操作系统通过网络下载到本地运行。

pxe网络安装的流程:bios启动——pxe client中的程序进入内存,显示命令菜单——此程序开始寻找网络引导程序(bootstrap文件,这个文件的名字随着发行版的不同而不同,在centos中,它是pxelinux.0)——引导程序读取配置文件pxelinux.cfg,获得系统初始化的相关文件信息——系统启动,开始进行安装。

2.pxe模式安装操作系统的原理

2.1安装流程

       客户机从自己的PXE网卡启动,向本网络中的DHCP服务器索取IP,并搜寻引导文件的位置
       DHCP服务器返回分给客户机IP以及bootstrap文件的放置位置(该文件一般是放在一台TFTP服务器上)
       客户机向本网络中的TFTP服务器索取bootstrap文件
       客户机取得bootstrap文件后之执行该文件
       根据bootstrap的执行结果,通过TFTP服务器加载内核和文件系统
       进入安装画面, 此时可以通过选择FTP,HTTP,NFS方式之一进行安装


2.2流程小结

总结就是:
1)网卡的client              网卡rom                         寻找dhcp服务器,由/etc/dhcp.conf得到ip和引导程序所在地点
2)有dhcp.conf(引导程序文件名)和tftp的配置(tftp跟路径,里面有引导程序和系统初始化程序),得到引导程序pxelinux启动文件的绝对路径,运行引导程序,读取启动配置文件pxelinux.cfg/default,得到操作系统初始化的两个相关文件
3)选择安装方式 
客户端广播dhcp请求——服务器相应请求,建立链接——由dhcp和tftp配置得到ip还有引导程序所在地点——客户端下载引导程序并开始运行——引导程序读取

2.3.相关文件位置与内容:


dhcp配置文件/etc/dhcpd/dhcp.conf——ip管理与引导程序名称
tftp配置文件/etc/xinetd.d/tftp——tftp根目录,和上面的引导程序名称组成完整路径
引导程序读取的配置文件/tftpboot/pxelinux.cfg/default——启动内核其他

3.实战过程

3.1安装前的准备:

软硬件配置:网卡要支持pxe启动,操作系统也要支持pxe启动,另外有ftp服务器用于存储操作系统的安装文件,dhcp服务器用于分配ip

3.2服务器配置

1)配置dhcp服务器

由于PXE客户机通常是尚未装系统的裸机,因此为了如服务器取得联系并正确下载相关引导文件,需要预先配置好DHCP服务来自动分配地址并告知引导文件的位置。

[root@localhost /]#yum -y install dhcp

[root@localhost /]#vim /etc/dhcp/dhcp.conf

ddns-update-style none;

default-lease-time 21600;

max-lease-time 43200;

option domain-name         "benet.com";

option domain-name-servers 8.8.8.8;

subnet 192.168.122.0 netmask 255.255.255.0 {

option routers 192.168.122.1;

option subnet-mask 255.255.255.0;

range 192.168.122.100 192.168.122.200;

next-server 192.168.122.1;   #指定TFTP服务器的地址

filename "pxelinux.0";     #指定PXE引导程序的文件名

}

[root@localhost /]#service dhcpd start

注明:filename这一个选项很重要,它的作用是指明bootstrap所在的位置,一般是指向一个TFTP服务器的某个目录下。这里是相对路径,其中路径的上半部分在的一个配置文件之中。

2)配置tftp服务器

TFTP服务的配置文件是/etc/xinetd.d/tftp,RedHat9 默认安装已经生成了该文件

service tftp
{
        disable        = no
        socket_type                = dgram
        protocol                = udp
        wait                        = yes
        user                        = root
        server                        = /usr/sbin/in.tftpd
        server_args        = -s /tftpboot
        per_source                = 11
        cps                                = 100 2
        flags                        = IPv4
}
注明:这个文件基本上不用改动,但是需要注意的的是server_args= -s /tftpboot这一行,它的含义是将/tftpboot作为root目录,这样在dhcpd.conf中的filename一行就应该写bootstrap的相对路径: filename “pxelinux.0”,这是出于安全方面考虑的.如果你去掉了-s这个参数,那幺就要在filename一行指出bootstrap的绝对路径: filename “/tftpboot/pxelinux.0”.注意,这里-s的内容会因为发行版的内容不同而不同,一般不用改动。

3.3添加引导程序

Bootstrap对于支持网络安装的操作系统,Bootstrap基本上都可以从安装源文件上找到,对于本例来说,centos的bootstrap就是cdrom:/isolinux/pxelinux.0我们把它们都拷贝到tftpboot下.

3.4编辑引导配置文件

把centos第一张安装光盘上images/pxeboot目录下的initr.img和vmlinux也考到tftpboot/目录下。在/tftpboot创建pxelinux.cfg目录,用于放isolinux的配制文件。光盘isolinux/下有一个isolinux.cfg文件,把它拷贝到/tftpboot/pxelinux.cfg/目录下并改名为default.下面为修改后的default文件:

default linux
prompt 1
timeout 30 
label linux
kernel vmlinuz
append initrd=initrd.img
这个Default 文件很容易看懂,就是告诉启动后使用那个内核引导

3.5开始安装

1)确保:服务器端刚才配置的几个服务都处于开启状态;关闭防火墙;bios中选择从网络启动

2)剩下的步骤和从硬盘安装相同

最新文章

  1. NOI 题库 6266
  2. android TCP 客户端(仅接收数据)
  3. 038. asp.netWeb用户控件之六实现日期选择的用户控件
  4. JAVA赋值运算符
  5. Delphi的"Invalid pointer operation"异常的解决办法
  6. [转]Android DPAD not enabled in AVD
  7. python手记(45)
  8. html5 meta标签
  9. Flex的学习资源
  10. java中常见的单例模式详解
  11. WinForm 进程、线程
  12. OAuth2实现单点登录SSO
  13. 给已经存在的项目添加git
  14. mnist全连接层网络权值可视化
  15. odoo 订餐系统之消息提醒
  16. Beta阶段冲刺前计划与安排
  17. Linux查看CPU、内存、IO占用高的进程
  18. JS设置CSS样式的集中方式
  19. Go的方法集
  20. Unity注意事项

热门文章

  1. offsetParent 到底是哪一个?
  2. javascript函数作用域链之词法作用域
  3. 内置的材质包含文件 .cginc
  4. Java反射的小故事
  5. .NET中的IO操作基础介绍
  6. 关于$.ajax的请求格式
  7. php分页实例附代码
  8. C中的正则函数sscanf
  9. 3.PHP 教程_PHP 语法
  10. python自学笔记(十一)关于函数及书写格式