基于Linux的嵌入式網(wǎng)絡(luò )存儲器設計
關(guān)鍵詞:Linux 網(wǎng)絡(luò )存儲器 Samba NFS
隨著(zhù)現代信息社會(huì )的高速發(fā)展,各種類(lèi)型的數據也呈幾何指數級地增長(cháng),如何更有效、更方便、更完全地存取管理這些數據,成為人們關(guān)注的一個(gè)問(wèn)題。新的網(wǎng)絡(luò )存儲技術(shù)的出現,給了人們一個(gè)很好的解決方案。它把存儲設備直接連接到網(wǎng)絡(luò )上,作為一個(gè)瘦的網(wǎng)絡(luò )客戶(hù)終端設備給用戶(hù)提供網(wǎng)絡(luò )存儲服務(wù),而且,Web技術(shù)的發(fā)展也為其方便、可靠的管理提供了技術(shù)保障。
1 硬件設計
硬件設計方框圖如圖1所示。
從圖1可看到,除CPU單元以外,網(wǎng)絡(luò )存儲器的實(shí)現主要包括兩個(gè)部分:I/O接口和存儲器接口。下面以CPU為中心,說(shuō)明這兩個(gè)接口的主要功能。
①I(mǎi)/O接口。這里指CPU與Ethernet的接口(以太網(wǎng)接口)。它采用PCI的方式與以太網(wǎng)相連,是進(jìn)入LAN(Local Area Network)的通道,在整個(gè)系統中負責發(fā)送或接收網(wǎng)絡(luò )上的數據包。
②存儲器接口。包括兩個(gè)方面:一是RAM接口,主要存儲數據,采用PCI接口方式;二是Flash接口,主要存儲操作系統及應用軟件,采用并口形式與CPU相連。
③磁盤(pán)冗余陣列卡(RAID)接口。包括與CPU的接口和與磁盤(pán)陣列的接口。磁盤(pán)陣列主要用來(lái)存儲網(wǎng)絡(luò )用戶(hù)資料,CPU通過(guò)磁盤(pán)陣列卡對磁盤(pán)陣列進(jìn)行管理操作,允許一定的冗余來(lái)保證用戶(hù)數據的安全。
2 軟件設計
在整個(gè)軟件設計中,應選擇一個(gè)合適的操作系統。整個(gè)操作系統要求體積比較小、網(wǎng)絡(luò )功能比較強、適于裁減、能被嵌入到Flash中,并且有網(wǎng)絡(luò )管理和磁盤(pán)管理功能。針對這些要求,我們選擇Linux操作系統作為軟件平臺,對其內核進(jìn)行裁減,從而實(shí)現嵌入式網(wǎng)絡(luò )存儲器的功能。整個(gè)軟件實(shí)現可分為以下幾個(gè)部分。
2.1 Linux內核的裁減
(1)Linux內核簡(jiǎn)介
Linux內核主要由五部分構成:進(jìn)程調度、內存管理、虛擬文件系統、網(wǎng)絡(luò )接口以及進(jìn)程間通信。進(jìn)程調度負責控制進(jìn)程對CPU的訪(fǎng)問(wèn),調度程序使用一種策略確保所有的進(jìn)程都能公平地訪(fǎng)問(wèn)CPU,并且確保內核在任意時(shí)刻能執行必要的硬件操作。內存管理負責管理系統的物理內存,實(shí)現多進(jìn)程安全地共享計算機的內存;另外內存管理支持虛擬內存,使進(jìn)程可以使用大于實(shí)際物理內存的內存地址空間,不用的內存址空間被導出到文件系統中,并在需要使用時(shí)再導回到物理內存中。虛擬文件系統通過(guò)將各種設備抽象為一種公共接口,屏蔽了各種硬件設備的細節。網(wǎng)絡(luò )接口實(shí)現了對各種網(wǎng)絡(luò )標準網(wǎng)絡(luò )硬件的訪(fǎng)問(wèn)。進(jìn)程間通信子系統實(shí)現了系統內進(jìn)程間的多種通信機制。
(2)Linux內核的配置
Linux系統的內核采用單塊結構,可以動(dòng)態(tài)地加載和卸載模塊。系統利用內核模塊的可動(dòng)態(tài)裝載和卸載功能,可靈活地在內核中添加新的組件或卸載不再需要的內核組件。因此在具體實(shí)現過(guò)程中,可以針對要實(shí)現的功能對其內核進(jìn)行裁減,以縮小體積。根據網(wǎng)絡(luò )存儲器的硬件實(shí)現框圖可以知道,整個(gè)系統的硬件接口只包括PCI和IDE兩種接口。在對Linux內核進(jìn)行配置時(shí),可把Floppy、SMP、MTRR、SCSI及所有的Block Device和Character Device移除,只留下old IDE Device、PCI。另外,文件系統在內核中占了相當大的比例,VFS簡(jiǎn)化了檔案系統的設計,Buffer cache、Directory cache增加了系統的效率;但這些對嵌入式系統用處不大,可以移除,內核會(huì )減小20KB左右,或者跳過(guò)整個(gè)VFS,直接將文件系統寫(xiě)成一個(gè)Driver的型式,這樣文件系統可由230KB縮減至50KB左右。在配置Linux內核時(shí),網(wǎng)絡(luò )協(xié)議的支持是必不可少的?,F在,大多數網(wǎng)絡(luò )都是以TCP/IP協(xié)議為基礎的,并且一般的工作站所選用的操作系統為Windows或Linux系統,因此,要實(shí)現其網(wǎng)絡(luò )功能,并能夠在不同平臺下實(shí)現文件共享,應該選擇對TCP/IP協(xié)議、NFS以及Samba協(xié)議的支持。
2.2 不同平臺下文件共享的實(shí)現
現代PC機中廣為流行的操作系統有兩種:Windows和Linux。這兩種操作系統是依賴(lài)于完全不同的技術(shù)來(lái)提供網(wǎng)絡(luò )服務(wù)的:Linux操作系統是以傳輸控制協(xié)議/網(wǎng)絡(luò )協(xié)議(TCP/IP)、網(wǎng)絡(luò )文件系統(NFS)以及網(wǎng)絡(luò )信息服務(wù)(NIS)為基礎,提供網(wǎng)絡(luò )服務(wù)的;而Microsoft則依賴(lài)于NetBIOS和服務(wù)信息塊(SMB)來(lái)提供把數據從服務(wù)器傳輸至客戶(hù)機的服務(wù)。因此,我們選用Samba工具來(lái)實(shí)現這兩種不同平臺下的文件共享。
(1)Samba簡(jiǎn)介
Samba從根本上消除了Windows與Linux之間的屏障,可以提供以下4個(gè)方面的服務(wù):共享資源和打印機、名字解析、瀏覽、用戶(hù)身份認證。通過(guò)讓NetBIOS(Windows網(wǎng)絡(luò )鄰居的通信協(xié)議)和SMB(Server Messege Block)兩個(gè)協(xié)議運行于TCP/IP通信協(xié)議之上實(shí)現文件共享,并且使用NetBEUI協(xié)議,可以讓W(xué)indows通過(guò)網(wǎng)絡(luò )鄰居看到Linux服務(wù)器。
①NetBIOS協(xié)議。NetBIOS是一個(gè)對話(huà)層通信服務(wù),通過(guò)一種公共的方法為訪(fǎng)問(wèn)提供應用程序,并且對整個(gè)網(wǎng)絡(luò )提供服務(wù)。它是一個(gè)針對如何訪(fǎng)問(wèn)數據的規范,依靠更低一級的協(xié)議,如NetBEUI或TCP/IP等,提供實(shí)際傳輸服務(wù)的。NetBIOS規范把協(xié)議分成三種服務(wù):名字服務(wù)、對話(huà)服務(wù)、數據報服務(wù)。名字服務(wù)主要校驗該NetBIOS名字是唯一的,刪除不再需要的NetBIOS名字,在NetBIOS名字基礎上確定服務(wù)器的網(wǎng)絡(luò )地址;對話(huà)服務(wù)在兩個(gè)應用程序之間,提供橫跨NetBIOS網(wǎng)絡(luò )的實(shí)現通信通道;數據報服務(wù)提供廣播信息或在應用程序之間發(fā)送信息而無(wú)需應答。
由于NetBIOS和TCP/IP在主機命名方面使用的是完全不同的系統,前者以字符為基礎,后者以數據為基礎,所以必須把每個(gè)NetBIOS名字與IP地址進(jìn)行匹配。Samba使用TCP/IP協(xié)議來(lái)傳輸NetBIOS,把NetBIOS名字解析或IP地址,通常通過(guò)三種匹配方式:第一種是把每個(gè)對IP地址的請求廣播到節點(diǎn)名字解析的原始NetBIOS,依賴(lài)于每個(gè)客戶(hù)機和服務(wù)器,通過(guò)網(wǎng)絡(luò )去尋找對方;第二種使用本地文件,并加載進(jìn)入高速緩沖存儲器,以便每個(gè)客戶(hù)機可以了解哪個(gè)名字解析成哪個(gè)IP地址;第三種使用NetBIOS名字服務(wù)(NBNS),一個(gè)NBNS是一個(gè)中央主機,它為一個(gè)工作組存儲NetBIOS名字以及與其相對應的IP地址列表,因此,每個(gè)工作組上的NetBIOS節點(diǎn)都可以向NBNS請求為它們把名字解析成IP地址。
②SMB協(xié)議。SMB協(xié)議是一個(gè)通過(guò)網(wǎng)絡(luò )提供并獲得資源的協(xié)議,依賴(lài)于NetBIOS進(jìn)行名字解析,為網(wǎng)絡(luò )上使用資源提供一個(gè)標準的接口。SMB協(xié)議對服務(wù)器定義了兩種安全模式:共享級和用戶(hù)級。
共享級服務(wù)器在硬盤(pán)設備上建立了一些可被訪(fǎng)問(wèn)的目錄,用戶(hù)需要一個(gè)密碼來(lái)獲得訪(fǎng)問(wèn)權。因此,網(wǎng)絡(luò )上的任何用戶(hù)只要知道服務(wù)器的名字、資源的名字以及密碼就可以訪(fǎng)問(wèn)資源了。共享級服務(wù)器通過(guò)對同一個(gè)資源設定不同的密碼,控制用戶(hù)的訪(fǎng)問(wèn)權限。
用戶(hù)級服務(wù)器在硬盤(pán)設備上建立可被訪(fǎng)問(wèn)的目錄,需要用戶(hù)提供用戶(hù)名及相應的密碼來(lái)獲得訪(fǎng)問(wèn)權。NT服務(wù)器和LM/U服務(wù)器采用這種方式而不支持共享級訪(fǎng)問(wèn)。相對共享級模式,用戶(hù)級更容易管理用戶(hù)。
(2)Samba的配置
一個(gè)Samba服務(wù)器實(shí)際包含了兩個(gè)服務(wù)器程序:smbd和nmbd。Smbd是Samba的核心,負責建立對話(huà)進(jìn)程、驗證用戶(hù)身份、提供對文件系統和打印機的訪(fǎng)問(wèn)機掉;nmbd實(shí)際網(wǎng)絡(luò )瀏覽服務(wù)器的功能,作用是對外發(fā)布Samba服務(wù)器可以提供的服務(wù)。Nmbd可以使Samba服務(wù)器出現在Windows95或WindowsNT的“Network Neighborhood”(網(wǎng)絡(luò )鄰居)中,并且客戶(hù)機可瀏覽到Samba服務(wù)器所共享的資源。啟動(dòng)Samba服務(wù)器進(jìn)程時(shí),可以完全不運行nmbd,這樣客戶(hù)只能看到Samba服務(wù)器的NetBIOS名字,看不到Samba服務(wù)器所提供的些服務(wù)。
在Samba的軟件包中存在一個(gè)smb.conf配置文件,其結構類(lèi)似于Windows的*.ini文件。RedHat和Debian中,smb.conf文件的缺省位置是在/etc/下,所有的Samba程序都要參照這個(gè)配置文件。整個(gè)配置文件分為三節:[global]、[home]、[printers]。[global]節設置全局選項和一些缺省的服務(wù)選項;[home]節用來(lái)動(dòng)態(tài)地映射到每個(gè)用戶(hù)的home目錄下;[printers]節用來(lái)設置將按照系統printcap文件配置的打印機共享至指定用戶(hù)。其中每一節中的配置參數都是一個(gè)全局參數或是一個(gè)服務(wù)參數,全局參數影響或控制整個(gè)服務(wù)器,服務(wù)參數影響或控制服務(wù)器提供的某項服務(wù)。Samba的配置文件見(jiàn)網(wǎng)絡(luò )補充版。
管理員可通過(guò)Samba的一些命令來(lái)管理用戶(hù)及用戶(hù)的訪(fǎng)問(wèn)權限,如添加用戶(hù)、刪除用戶(hù)、改變目錄的訪(fǎng)問(wèn)權限,也中直接修改smb.conf進(jìn)行管理。
2.3 不同結構網(wǎng)絡(luò )之間文件共享的實(shí)現
(1)NFS協(xié)議簡(jiǎn)介
NFS網(wǎng)絡(luò )文件系統是由Sun Microsystems公司最早實(shí)現的,用于在不同的操作系統、不同的網(wǎng)絡(luò )結構及不同的傳輸協(xié)議之間共享文件。NFS協(xié)議組包括NFS、RPC、XDR。NFS本身沒(méi)提供其它程序可調用的過(guò)程,它通過(guò)遠程過(guò)程調用和通用外部數據表示來(lái)實(shí)現。遠程過(guò)程調用為遠程服務(wù)提供一個(gè)接口,包括主機地址、程序號及一個(gè)遠端進(jìn)程的進(jìn)程號,而外部數據表示提供了一套通過(guò)網(wǎng)絡(luò )描述數據類(lèi)型的方法。
在不同的操作系統中,文件系統的管理方式不同,對于目錄樹(shù)的深度、名字的使用以及路徑的表示方法也都有不同的規定。有些操作系統的文件系統處于特定的目錄下面,而有些操作系統用mount操作使所有的文件系統看起來(lái)在一個(gè)單獨的目錄下。盡管目錄和文件在很多方面都比較類(lèi)似,但是訪(fǎng)問(wèn)它們卻須調用不同的程序,因此,NFS假定文件系統是分等級的,并且文件處于最低等級,NFS為目錄提供一個(gè)標準的網(wǎng)絡(luò )格式以便訪(fǎng)問(wèn)。在遠程調用中,每次調用只返回一個(gè)目錄,這樣解決了不同文件系統之間結構不同的問(wèn)題。
(2)NFS服務(wù)的配置
NFS服務(wù)器使用了5個(gè)守護進(jìn)程來(lái)提供NFS服務(wù)。最基本的提供NFS服務(wù)的系統至少要運行nfsd用于處理NFS協(xié)議,而mountd用于處理客戶(hù)的mount請求。此外,由于NFS使用RPC遠程調用,其它三個(gè)RPC守護進(jìn)程portmap、rpc_lockd、rpc_statd可以用來(lái)幫助提供更高效的服務(wù)。為了使其它系統也能使用Linux系統上的硬盤(pán)空間,在系統啟動(dòng)時(shí),應載入NFS的守護進(jìn)程。這需要在rc.conf中更改相應關(guān)的參數:nfs_server_enable、rpc_statd_enable、rpc_lockd.enable和portmap_enable,這些參數對應相應的守護進(jìn)程。這樣,系統啟動(dòng)之后就具備了能共享文件的能力 ,接下來(lái)的工作是通過(guò)更改/etc/exports文件來(lái)設置需要共享的目錄以及這些目錄的訪(fǎng)問(wèn)權了,以保證其安全性。Exports文件的設置如下:
/usr/src/sys-maproot=guest1 ns host2
/usr/ports-ro-network 202.114.1.0
在這里我們使用絕對路徑的方式定義了兩個(gè)共享目錄―/usr/src/sys和/usr/ports,并且對這兩個(gè)目錄的訪(fǎng)問(wèn)權限分別作了不同的限制,以保證其安全性。對于第一個(gè)目錄,限制了客戶(hù)機上的root用戶(hù)等價(jià)于本機上的guest1用戶(hù),以避免客戶(hù)機上的root用戶(hù)擁有這個(gè)服務(wù)器上的root權力,進(jìn)行非法操作,此后的ns和host2參數是主機名,只有ns和host2才能共享這個(gè)/usr/sys/src目錄。第二行設置共享了/usr/ports目錄,限制為只允許讀取,并且也只有202.114.1.0網(wǎng)絡(luò )上的計算機才能訪(fǎng)問(wèn)這個(gè)共享目錄。在更改了exports文件之后,向mountd進(jìn)程發(fā)送一個(gè)SIGHUP信號,使其重讀exports文件的內容,這樣關(guān)于exports文件的設置才開(kāi)始生效。
結語(yǔ)
本文提出了一個(gè)網(wǎng)絡(luò )存儲器的基本解決方案,實(shí)現了網(wǎng)絡(luò )存儲器的基本功能。整個(gè)系統易于安裝,具有可靠性較高,跨平臺、跨網(wǎng)絡(luò )的優(yōu)點(diǎn);同時(shí)也存在著(zhù)一些不足的地方,比如對用戶(hù)、磁盤(pán)的管理不太方便,這些可通過(guò)數據庫技術(shù)加以改進(jìn)。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論