王晶,施亮
随着信息科技的发展以及计算机硬件的普及,现今社会中计算机已成为不可或缺的设备之一。作为管理计算机软硬件资源的程序,操作系统在计算机系统中起着基石的作用,其安装与维护等方面的研究与优化,具有相当重要的意义。
传统的计算机操作系统安装,需要使用安装光盘将系统安装文件拷贝到内存中,然后展开部署到指定的安装卷中,并运行各个配置文件,将系统安装成功。在机器数量庞大的场合中,采用这种方式进行操作系统批量安装,将耗费大量的时间(如OEM厂商在机器出厂时为机器预装操作系统)。
为了提高操作系统批量安装的效率,本文设计了一种基于开源平台的网络镜像部署方案。该方案充分利用了UDPcast、Partclone以及tftpd32等优秀的已有开源项目,基于 c语言和QT编写了高效的调度子程序和友好的用户控制界面。使用该方案的网络镜像备份、网络镜像还原功能,可使得操作系统的批量部署易行、快速、高效。
网络镜像部署方案采用了C/S结构,本方案的架构示意图,如图1所示:
图1 网络镜像部署方案的架构示意图
其中服务端运行在Windows系统上,分为PXE Server和Image Supervisor两大部分。PXE Server的作用是将保存的 Linux镜像安装到选择了通过网络引导方式启动的 PXE客户机;Image Supervisor则提供基于QT的用户界面以及相关的管理子程序,在界面上选择相应的功能即可对已通过网络引导方式启动的客户机进行镜像备份或还原。
如上所述,客户端的运行操作系统为通过网络引导方式启动的Linux系统上。经由这种方式,客户端就获得了操作系统以及存在于操作系统的根文件系统中进行网络镜像备份/还原所需要的各种小工具。由此可见,本方案仅需要在服务器端进行相关软件的手动安装。
UDPcast是一个开源文件传输工具,其功能是在局域网中将数据同时传输到多个指定目的地。由于使用了UDP协议的多播(Multicast)能力,UDPcast可以在一次发送中就完成单播(Unicast)多次发送才能完成的传输工作,又避免了广播(Broadcast)方式将数据发送给非指定目的地的弊端。
UDPcast基于C/S架构,分成udp-sender(服务器端)和udp-receiver(客户端)两部分。通过参数设置,UDPcast可提供半双工/全双工、异步/同步、流模式、管道程序连接、前向纠错等模式和功能的选择。该软件的设计中,已考虑了跨平台的需要,可通过相应的编译方式得到Windows/Linux版本,本方案中,在服务器端使用 Windows版本的udp-sender来完成镜像多播发送,在客户端使用Linux版本的udp-receiver来完成镜像数据的接收。
Partclone软件是一个GPL 协议下的开源软件,该软件通过获得用户输入的命令行,从而执行分区备份与还原的功能。可在三种模式下工作:
Clone 模式:在clone模式下,Partclone可以将其所支持的文件系统下的磁盘分区备份成镜像,达到压缩的目的;
Restore模式:在此模式下,镜像格式Image可以被还原到磁盘分区上;
DD模式:此模式下,程序可将源分区中的数据复制到目标分区中。
本方案中,用到Partclone的Clone模式与Restore模式来实现操作系统镜像的备份与还原。
分析linux的启动过程可知,由开机上电直至系统核心完整载入共历经下面几个步骤:
1)加载BIOS,获取第一个启动设备的代号;
2)读取并运行第一个启动设备中的bootloader;
3)在bootloader的管理下读取系统内核;
4)挂载initrd(initial RAM disk),即虚拟根文件系统。
在 PXE启动方式下,客户机启动时的 bootloader为PXElinux。PXElinux由两个文件构成:pxelinux.0和位于文件夹pxelinux.cfg中的配置文件(通常使用名为default的文件)。其中pxelinux.0为可运行的汇编程序,而default文件存放pxelinux.0的配置信息。
本方案中的default文件如下所示:
客户机上运行上述pxelinux.0的作用是,请求PXE服务器发送内核镜像bzImage和根文件系统镜像initrd.gz。
由 2.3节可知,客户机 linux系统的启动需要在pxelinux.0的管理下请求并加载内核镜像和虚拟根文件系统镜像。因此需要在服务器端提供这两个文件。
关于Linux镜像的生成,互联网上已有很完备的资料,在此不作赘述。需要说明得是,由于本方案中,客户端所运行的linux中需要用到诸如udp-receiver、Partclone、IPCClient等自写或第三方程序,故需要在制作根文件系统镜像时将这些程序集成进去。
DHCP(Dynamic Host Configuration Protocol,动态主机设置协议)是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:1)给内部网络或网络服务供应商自动分配IP地址给用户;2)给内部网络管理员作为对所有计算机作中央管理的手段。在本方案中,DHCP用于服务器对各个客户机进行IP地址的动态分配。
TFTP是一个基于UDP协议的传输文件简单协议,适合对小文件进行传输。在本方案中,TFTP用于传输PXE启动镜像。
PXE工作原理示意图,如图2所示:
图2 PXE工作原理示意图
从中可以看出PXE客户端启动过程中各个进程之间的交互过程及运行时序如下:
1)客户机的BIOS设置从网络启动时,启动后网卡先做自我测试,然后发送一个动态获得IP地址的广播包到网络上,服务器收到该广播包后,就会送回包含分配给客户机的 IP地址和bootloader(即 pxelinux.0)所在位置信息的DHCP回应包;
2)客户机收到 DHCP回应之后,请求发送bootloader文件(即pxelinux.0),服务器通过tftp发送该文件。
3)pxelinux.0的运行需要配置信息,故客户机请求发送该文件,服务器响应该请求。
4)客户机按照pxelinux.cfg中配置文件里的信息,继续请求发送内核镜像和根文件系统镜像,服务器予以响应,接收完成则PXE启动完成。
本方案使用了开源软件Tftpd32来提供DHCP和TFTP支持。Tftpd32是一个集成了DHCP、TFTP、SNTP和Syslog等多种服务的袖珍网络服务器包,同时提供TFTP客户端应用,支持tsize,blocksize 和timeout等等。
为方便系统的集成,具体选择中选用了 Tftpd32的service版本,该实现具有图形化的配置界面,集成进网络镜像部署系统后以Windows服务的形式运行于服务器上。
IPC为使用c语言编写的进程间通信模块,基于C/S架构,分为运行在服务器端的 IPCServer和运行在客户端的IPCClient。
IPCServer的功能有:1)接收QT界面程序传来的控制指令,据此向IPCClient广播控制指令;2)执行网络镜像还原时启动udp-sender。
IPCClient的功能为:1)与IPCServer通过网络套接口进行通信,接收IPCServer的控制指令,向IPCServer报告客户机的运行状态;2)执行网络镜像还原时启动udp-receiver和Partclone子进程,并为其建立管道连接;3)执行网络镜像备份时,启动 Partclone子进程并为其建立到服务器上存放镜像位置的网络共享。
本方案的备份/还原原理示意图,如图3所示:
图3 网络镜像部署系统备份/还原原理示意图
备份工作仅发生在单台客户机与服务器之间,而还原工作可能涉及多台客户机(亦可称之为操作系统批量部署)。还原时,每个客户机上均运行各自的IPCClient、Partclone、udp-receiver副本,而 IPCServer与 IPCClient、udp-sender与udp-receiver之间为单对多关系。
一般情况下,GUI 模块无法单独作为一个程序存在,但是我们通过将Qt 提供的API 进行一定的包装,使得GUI模块能够作为一个独立的程序来运行。
在本方案中,QT界面程序完成如下功能:1)读取用户操作;2)根据用户操作,启动 IPCServer并使其进入备份或还原模式;3)启动或暂停tftpd32 Windows服务;4)回显IPCServer送回的客户端运行状态信息。
QT界面涉及的进程间通信为接收IPCServer回送的状态信息,此通信采用共享内存方式来实现。
CIFS(Common Internet File System)即通用Internet文件系统,是一个新提出的协议,它使程序可以访问远程Internet计算机上的文件并要求此计算机的服务。
本方案中需要在客户端Linux系统中添加CIFS支持,以便使得备份操作时产生镜像文件可以直接存放到服务器上用于存放镜像的网络共享文件夹里。该支持的实现可在制作 linux内核镜像时通过设置相应配置文件而很方便地实现。
ncurses提供字符终端处理库,包括面板和菜单。本方案里,在linux内核中添加了该库,以便在linux客户端中构建相对友好的操作界面。
BusyBox 是一个集成了一百多个最常用 linux命令和工具的软件。BusyBox包含了一些简单的工具,例如ls、cat和echo等等,还包含了一些更大、更复杂的工具,例如grep、find、mount以及 telnet。
测试场景的网络拓扑结构,如图4所示:
图4 测试场景网络拓扑结构
其中有2个24口交换机和1个48口交换机。24口交换机通过千兆上行端口与48口交换机进行连接。
测试中所用设备的规格,如表1所示:
表1 测试所用设备一览表
在上述测试环境下,对本方案的网络镜像备份/还原功能速度的测试结果如表2、表3所示:
表2 备份测试结果
表3 还原测试结果
可看到,备份操作的平均速度可达 550MB/min,还原操作的平均速度可达 750MB/min。这样的速度在实际系统批量部署中已比较优秀,展示出了很好的实用价值。
本文介绍了一种基于开源平台的网络镜像部署方案,对方案中所涉及的各个模块以及模块间如何关联做了比较详实的介绍,为操作系统的批量部署展示了一种完善的思路。实际测试表明该方案已有可靠的实用价值。下一步的工作,将对所用开源模块做进一步研究和改写,以便在下面两个方向得到进展:1)进一步提升系统的执行效率;2)在更大规模客户机群应用中保持执行效率。
[1]Intel Corporation.Preboot Execution environment (PXE)Specification [S/OL].Version2.1,1999-09.http://www.pix.net/software/pxeboot/archive/pxespec.pdf.
[2]董明峰.Linux系统引导概述[J].微机发展,2003,13(8):69-71.
[3]谭晓东 陈振庆.基于 PXE网络克隆技术的探讨与实现[J].电脑知识与技术,2009,5(21): 5691-5692.
[4]杜晓军 耿凯 吴秋红.基于PXE协议的Linux自动安装原理分析与应用[J].通信技术,2008,41(8):50-73.