王晶,施亮
隨著信息科技的發(fā)展以及計(jì)算機(jī)硬件的普及,現(xiàn)今社會中計(jì)算機(jī)已成為不可或缺的設(shè)備之一。作為管理計(jì)算機(jī)軟硬件資源的程序,操作系統(tǒng)在計(jì)算機(jī)系統(tǒng)中起著基石的作用,其安裝與維護(hù)等方面的研究與優(yōu)化,具有相當(dāng)重要的意義。
傳統(tǒng)的計(jì)算機(jī)操作系統(tǒng)安裝,需要使用安裝光盤將系統(tǒng)安裝文件拷貝到內(nèi)存中,然后展開部署到指定的安裝卷中,并運(yùn)行各個配置文件,將系統(tǒng)安裝成功。在機(jī)器數(shù)量龐大的場合中,采用這種方式進(jìn)行操作系統(tǒng)批量安裝,將耗費(fèi)大量的時間(如OEM廠商在機(jī)器出廠時為機(jī)器預(yù)裝操作系統(tǒng))。
為了提高操作系統(tǒng)批量安裝的效率,本文設(shè)計(jì)了一種基于開源平臺的網(wǎng)絡(luò)鏡像部署方案。該方案充分利用了UDPcast、Partclone以及tftpd32等優(yōu)秀的已有開源項(xiàng)目,基于 c語言和QT編寫了高效的調(diào)度子程序和友好的用戶控制界面。使用該方案的網(wǎng)絡(luò)鏡像備份、網(wǎng)絡(luò)鏡像還原功能,可使得操作系統(tǒng)的批量部署易行、快速、高效。
網(wǎng)絡(luò)鏡像部署方案采用了C/S結(jié)構(gòu),本方案的架構(gòu)示意圖,如圖1所示:

圖1 網(wǎng)絡(luò)鏡像部署方案的架構(gòu)示意圖
其中服務(wù)端運(yùn)行在Windows系統(tǒng)上,分為PXE Server和Image Supervisor兩大部分。PXE Server的作用是將保存的 Linux鏡像安裝到選擇了通過網(wǎng)絡(luò)引導(dǎo)方式啟動的 PXE客戶機(jī);Image Supervisor則提供基于QT的用戶界面以及相關(guān)的管理子程序,在界面上選擇相應(yīng)的功能即可對已通過網(wǎng)絡(luò)引導(dǎo)方式啟動的客戶機(jī)進(jìn)行鏡像備份或還原。
如上所述,客戶端的運(yùn)行操作系統(tǒng)為通過網(wǎng)絡(luò)引導(dǎo)方式啟動的Linux系統(tǒng)上。經(jīng)由這種方式,客戶端就獲得了操作系統(tǒng)以及存在于操作系統(tǒng)的根文件系統(tǒng)中進(jìn)行網(wǎng)絡(luò)鏡像備份/還原所需要的各種小工具。由此可見,本方案僅需要在服務(wù)器端進(jìn)行相關(guān)軟件的手動安裝。
UDPcast是一個開源文件傳輸工具,其功能是在局域網(wǎng)中將數(shù)據(jù)同時傳輸?shù)蕉鄠€指定目的地。由于使用了UDP協(xié)議的多播(Multicast)能力,UDPcast可以在一次發(fā)送中就完成單播(Unicast)多次發(fā)送才能完成的傳輸工作,又避免了廣播(Broadcast)方式將數(shù)據(jù)發(fā)送給非指定目的地的弊端。
UDPcast基于C/S架構(gòu),分成udp-sender(服務(wù)器端)和udp-receiver(客戶端)兩部分。通過參數(shù)設(shè)置,UDPcast可提供半雙工/全雙工、異步/同步、流模式、管道程序連接、前向糾錯等模式和功能的選擇。該軟件的設(shè)計(jì)中,已考慮了跨平臺的需要,可通過相應(yīng)的編譯方式得到Windows/Linux版本,本方案中,在服務(wù)器端使用 Windows版本的udp-sender來完成鏡像多播發(fā)送,在客戶端使用Linux版本的udp-receiver來完成鏡像數(shù)據(jù)的接收。
Partclone軟件是一個GPL 協(xié)議下的開源軟件,該軟件通過獲得用戶輸入的命令行,從而執(zhí)行分區(qū)備份與還原的功能。可在三種模式下工作:
Clone 模式:在clone模式下,Partclone可以將其所支持的文件系統(tǒng)下的磁盤分區(qū)備份成鏡像,達(dá)到壓縮的目的;
Restore模式:在此模式下,鏡像格式Image可以被還原到磁盤分區(qū)上;
DD模式:此模式下,程序可將源分區(qū)中的數(shù)據(jù)復(fù)制到目標(biāo)分區(qū)中。
本方案中,用到Partclone的Clone模式與Restore模式來實(shí)現(xiàn)操作系統(tǒng)鏡像的備份與還原。
分析linux的啟動過程可知,由開機(jī)上電直至系統(tǒng)核心完整載入共歷經(jīng)下面幾個步驟:
1)加載BIOS,獲取第一個啟動設(shè)備的代號;
2)讀取并運(yùn)行第一個啟動設(shè)備中的bootloader;
3)在bootloader的管理下讀取系統(tǒng)內(nèi)核;
4)掛載initrd(initial RAM disk),即虛擬根文件系統(tǒng)。
在 PXE啟動方式下,客戶機(jī)啟動時的 bootloader為PXElinux。PXElinux由兩個文件構(gòu)成:pxelinux.0和位于文件夾pxelinux.cfg中的配置文件(通常使用名為default的文件)。其中pxelinux.0為可運(yùn)行的匯編程序,而default文件存放pxelinux.0的配置信息。
本方案中的default文件如下所示:


客戶機(jī)上運(yùn)行上述pxelinux.0的作用是,請求PXE服務(wù)器發(fā)送內(nèi)核鏡像bzImage和根文件系統(tǒng)鏡像initrd.gz。
由 2.3節(jié)可知,客戶機(jī) linux系統(tǒng)的啟動需要在pxelinux.0的管理下請求并加載內(nèi)核鏡像和虛擬根文件系統(tǒng)鏡像。因此需要在服務(wù)器端提供這兩個文件。
關(guān)于Linux鏡像的生成,互聯(lián)網(wǎng)上已有很完備的資料,在此不作贅述。需要說明得是,由于本方案中,客戶端所運(yùn)行的linux中需要用到諸如udp-receiver、Partclone、IPCClient等自寫或第三方程序,故需要在制作根文件系統(tǒng)鏡像時將這些程序集成進(jìn)去。
DHCP(Dynamic Host Configuration Protocol,動態(tài)主機(jī)設(shè)置協(xié)議)是一個局域網(wǎng)的網(wǎng)絡(luò)協(xié)議,使用UDP協(xié)議工作,主要有兩個用途:1)給內(nèi)部網(wǎng)絡(luò)或網(wǎng)絡(luò)服務(wù)供應(yīng)商自動分配IP地址給用戶;2)給內(nèi)部網(wǎng)絡(luò)管理員作為對所有計(jì)算機(jī)作中央管理的手段。在本方案中,DHCP用于服務(wù)器對各個客戶機(jī)進(jìn)行IP地址的動態(tài)分配。
TFTP是一個基于UDP協(xié)議的傳輸文件簡單協(xié)議,適合對小文件進(jìn)行傳輸。在本方案中,TFTP用于傳輸PXE啟動鏡像。
PXE工作原理示意圖,如圖2所示:

圖2 PXE工作原理示意圖
從中可以看出PXE客戶端啟動過程中各個進(jìn)程之間的交互過程及運(yùn)行時序如下:
1)客戶機(jī)的BIOS設(shè)置從網(wǎng)絡(luò)啟動時,啟動后網(wǎng)卡先做自我測試,然后發(fā)送一個動態(tài)獲得IP地址的廣播包到網(wǎng)絡(luò)上,服務(wù)器收到該廣播包后,就會送回包含分配給客戶機(jī)的 IP地址和bootloader(即 pxelinux.0)所在位置信息的DHCP回應(yīng)包;
2)客戶機(jī)收到 DHCP回應(yīng)之后,請求發(fā)送bootloader文件(即pxelinux.0),服務(wù)器通過tftp發(fā)送該文件。
3)pxelinux.0的運(yùn)行需要配置信息,故客戶機(jī)請求發(fā)送該文件,服務(wù)器響應(yīng)該請求。
4)客戶機(jī)按照pxelinux.cfg中配置文件里的信息,繼續(xù)請求發(fā)送內(nèi)核鏡像和根文件系統(tǒng)鏡像,服務(wù)器予以響應(yīng),接收完成則PXE啟動完成。
本方案使用了開源軟件Tftpd32來提供DHCP和TFTP支持。Tftpd32是一個集成了DHCP、TFTP、SNTP和Syslog等多種服務(wù)的袖珍網(wǎng)絡(luò)服務(wù)器包,同時提供TFTP客戶端應(yīng)用,支持tsize,blocksize 和timeout等等。
為方便系統(tǒng)的集成,具體選擇中選用了 Tftpd32的service版本,該實(shí)現(xiàn)具有圖形化的配置界面,集成進(jìn)網(wǎng)絡(luò)鏡像部署系統(tǒng)后以Windows服務(wù)的形式運(yùn)行于服務(wù)器上。
IPC為使用c語言編寫的進(jìn)程間通信模塊,基于C/S架構(gòu),分為運(yùn)行在服務(wù)器端的 IPCServer和運(yùn)行在客戶端的IPCClient。
IPCServer的功能有:1)接收QT界面程序傳來的控制指令,據(jù)此向IPCClient廣播控制指令;2)執(zhí)行網(wǎng)絡(luò)鏡像還原時啟動udp-sender。
IPCClient的功能為:1)與IPCServer通過網(wǎng)絡(luò)套接口進(jìn)行通信,接收IPCServer的控制指令,向IPCServer報(bào)告客戶機(jī)的運(yùn)行狀態(tài);2)執(zhí)行網(wǎng)絡(luò)鏡像還原時啟動udp-receiver和Partclone子進(jìn)程,并為其建立管道連接;3)執(zhí)行網(wǎng)絡(luò)鏡像備份時,啟動 Partclone子進(jìn)程并為其建立到服務(wù)器上存放鏡像位置的網(wǎng)絡(luò)共享。
本方案的備份/還原原理示意圖,如圖3所示:

圖3 網(wǎng)絡(luò)鏡像部署系統(tǒng)備份/還原原理示意圖
備份工作僅發(fā)生在單臺客戶機(jī)與服務(wù)器之間,而還原工作可能涉及多臺客戶機(jī)(亦可稱之為操作系統(tǒng)批量部署)。還原時,每個客戶機(jī)上均運(yùn)行各自的IPCClient、Partclone、udp-receiver副本,而 IPCServer與 IPCClient、udp-sender與udp-receiver之間為單對多關(guān)系。
一般情況下,GUI 模塊無法單獨(dú)作為一個程序存在,但是我們通過將Qt 提供的API 進(jìn)行一定的包裝,使得GUI模塊能夠作為一個獨(dú)立的程序來運(yùn)行。
在本方案中,QT界面程序完成如下功能:1)讀取用戶操作;2)根據(jù)用戶操作,啟動 IPCServer并使其進(jìn)入備份或還原模式;3)啟動或暫停tftpd32 Windows服務(wù);4)回顯IPCServer送回的客戶端運(yùn)行狀態(tài)信息。
QT界面涉及的進(jìn)程間通信為接收IPCServer回送的狀態(tài)信息,此通信采用共享內(nèi)存方式來實(shí)現(xiàn)。
CIFS(Common Internet File System)即通用Internet文件系統(tǒng),是一個新提出的協(xié)議,它使程序可以訪問遠(yuǎn)程Internet計(jì)算機(jī)上的文件并要求此計(jì)算機(jī)的服務(wù)。
本方案中需要在客戶端Linux系統(tǒng)中添加CIFS支持,以便使得備份操作時產(chǎn)生鏡像文件可以直接存放到服務(wù)器上用于存放鏡像的網(wǎng)絡(luò)共享文件夾里。該支持的實(shí)現(xiàn)可在制作 linux內(nèi)核鏡像時通過設(shè)置相應(yīng)配置文件而很方便地實(shí)現(xiàn)。
ncurses提供字符終端處理庫,包括面板和菜單。本方案里,在linux內(nèi)核中添加了該庫,以便在linux客戶端中構(gòu)建相對友好的操作界面。
BusyBox 是一個集成了一百多個最常用 linux命令和工具的軟件。BusyBox包含了一些簡單的工具,例如ls、cat和echo等等,還包含了一些更大、更復(fù)雜的工具,例如grep、find、mount以及 telnet。
測試場景的網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu),如圖4所示:

圖4 測試場景網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)
其中有2個24口交換機(jī)和1個48口交換機(jī)。24口交換機(jī)通過千兆上行端口與48口交換機(jī)進(jìn)行連接。
測試中所用設(shè)備的規(guī)格,如表1所示:

表1 測試所用設(shè)備一覽表
在上述測試環(huán)境下,對本方案的網(wǎng)絡(luò)鏡像備份/還原功能速度的測試結(jié)果如表2、表3所示:

表2 備份測試結(jié)果

表3 還原測試結(jié)果
可看到,備份操作的平均速度可達(dá) 550MB/min,還原操作的平均速度可達(dá) 750MB/min。這樣的速度在實(shí)際系統(tǒng)批量部署中已比較優(yōu)秀,展示出了很好的實(shí)用價值。
本文介紹了一種基于開源平臺的網(wǎng)絡(luò)鏡像部署方案,對方案中所涉及的各個模塊以及模塊間如何關(guān)聯(lián)做了比較詳實(shí)的介紹,為操作系統(tǒng)的批量部署展示了一種完善的思路。實(shí)際測試表明該方案已有可靠的實(shí)用價值。下一步的工作,將對所用開源模塊做進(jìn)一步研究和改寫,以便在下面兩個方向得到進(jìn)展:1)進(jìn)一步提升系統(tǒng)的執(zhí)行效率;2)在更大規(guī)??蛻魴C(jī)群應(yīng)用中保持執(zhí)行效率。
[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系統(tǒng)引導(dǎo)概述[J].微機(jī)發(fā)展,2003,13(8):69-71.
[3]譚曉東 陳振慶.基于 PXE網(wǎng)絡(luò)克隆技術(shù)的探討與實(shí)現(xiàn)[J].電腦知識與技術(shù),2009,5(21): 5691-5692.
[4]杜曉軍 耿凱 吳秋紅.基于PXE協(xié)議的Linux自動安裝原理分析與應(yīng)用[J].通信技術(shù),2008,41(8):50-73.