Linux 網(wǎng)絡(luò)文件系統(tǒng)的數(shù)據(jù)備份及恢復(fù)機(jī)制實(shí)現(xiàn)
Linux 網(wǎng)絡(luò)文件系統(tǒng)簡介
本文引用地址:http://m.butianyuan.cn/article/201609/304200.htm網(wǎng)絡(luò)文件系統(tǒng)(NFS)協(xié)議是由 Sun MicroSystem 公司在 20 世紀(jì) 80 年代為了提供對共享文件的遠(yuǎn)程訪問而設(shè)計(jì)和實(shí)現(xiàn)的,它采用了經(jīng)典的客戶機(jī)/服務(wù)器模式提供服務(wù)。為了達(dá)到如同 NFS 協(xié)議通過使用 Sun 公司開發(fā)的遠(yuǎn)在本機(jī)上使用本地文件系統(tǒng)一樣便捷的效果,NFS 通過使用遠(yuǎn)程過程調(diào)用協(xié)議(RPC Protocol)來實(shí)現(xiàn)運(yùn)行在一臺(tái)計(jì)算機(jī)上的程序來調(diào)用在另一臺(tái)遠(yuǎn)程機(jī)器上運(yùn)行的子程序。同時(shí),為了解決不同平臺(tái)上的數(shù)據(jù)交互問題,它提供了外部數(shù)據(jù)表示(XDR)來解決這個(gè)問題。為了靈活地提供文件共享服務(wù),該協(xié)議可以在 TCP 協(xié)議或者是 UDP 協(xié)議上運(yùn)行,典型的情況是在 UDP 協(xié)議上運(yùn)行。在此基礎(chǔ)上,NFS 在數(shù)據(jù)的傳送過程中需要 RPC 命令得到確認(rèn),而且在需要的時(shí)候會(huì)要重傳,這樣既可以通過 UDP 協(xié)議獲得較高的通信效率,也能通過 RPC 來獲得較高的通信可靠性。
由于 NFS 基于 C/S 模式提供服務(wù),所以它的核心組件主要包括客戶機(jī)和服務(wù)器兩部分。圖 1 詳細(xì)說明了 NFS 的主要組件以及主要的配置文件。在服務(wù)器端,portmap、mountd、nfsd 三個(gè)監(jiān)控程序?qū)⒃诤笈_(tái)運(yùn)行。portmap 監(jiān)控程序用來注冊基于 RPC 的服務(wù)。當(dāng)一個(gè) RPC 的監(jiān)控程序啟動(dòng)的時(shí)候,它告訴 portmap 監(jiān)控程序它在哪一個(gè)端口進(jìn)行偵聽,并且它在進(jìn)行什么樣的 RPC 服務(wù)。當(dāng)一個(gè)客戶機(jī)向服務(wù)器提出一個(gè) RPC 請求,那么它就會(huì)和 portmap 監(jiān)控程序取得聯(lián)系以確定 RPC 消息應(yīng)該發(fā)往的端口號。而 Mountd 監(jiān)控程序的功能是來讀取服務(wù)器端的/etc/exportfs 文件并且創(chuàng)建一個(gè)將服務(wù)器的本地文件系統(tǒng)導(dǎo)出的主機(jī)和網(wǎng)絡(luò)列表,因而客戶機(jī)的掛接(mount)請求都被定位到 mountd 監(jiān)控程序(daemon)。當(dāng)驗(yàn)證了服務(wù)器確實(shí)具有掛接所請求的文件系統(tǒng)的權(quán)限以后,mountd 為請求的掛接點(diǎn)返回一個(gè)文件句柄。而 nfsd 監(jiān)控程序則被服務(wù)器用來處理客戶機(jī)端發(fā)送過來的請求。由于服務(wù)器需要同時(shí)處理多個(gè)客戶機(jī)的請求,所以在缺省情況下,操作系統(tǒng)將會(huì)自動(dòng)啟動(dòng)八個(gè) nfsd 線程。當(dāng)然,如果 NFS 服務(wù)器特別忙的時(shí)候,系統(tǒng)有可能根據(jù)實(shí)際情況啟動(dòng)更多的線程。
圖 1 網(wǎng)絡(luò)文件系統(tǒng)簡圖
NFS 的客戶機(jī)與服務(wù)器之間通過 RPC 進(jìn)行通信,通信過程如下所示:
用戶將 NFS 服務(wù)器的共享目錄掛載到本地文件系統(tǒng)中。
客戶訪問 NFS 目錄中的文件時(shí),NFS 客戶端向 NFS 服務(wù)器端發(fā)送 RPC 請求。
NFS 服務(wù)端接收客戶端發(fā)來的 RPC 請求,并將這個(gè)請求傳遞給本地文件訪問程序,然后訪問服務(wù)器主機(jī)上的一個(gè)本地的磁盤文件。NFS 服務(wù)器可以同時(shí)接收多個(gè) NFS 客戶端的請求,并對其進(jìn)行并發(fā)控制。
NFS 客戶端向服務(wù)器主機(jī)發(fā)出一個(gè) RPC 調(diào)用,然后等待服務(wù)器的應(yīng)答。NFS 客戶端收到服務(wù)器的應(yīng)答后,把結(jié)果信息展現(xiàn)給用戶或應(yīng)用程序。
NFS 下的數(shù)據(jù)備份、恢復(fù)的主要功能
對數(shù)據(jù)進(jìn)行備份與恢復(fù)是保證數(shù)據(jù)安全和業(yè)務(wù)連續(xù)性的非常成熟的做法。在 Linux 下的本地文件系統(tǒng)(例如 Ext2、Ext3 等)中,數(shù)據(jù)備份和恢復(fù)一般采用常規(guī)的辦法來進(jìn)行操作,例如使用 Tar、Archive 等。而對于 NFS 來說,其數(shù)據(jù)備份需要采用量身定制的方法來進(jìn)行。
為了保證數(shù)據(jù)在災(zāi)難環(huán)境中的可用性和業(yè)務(wù)連續(xù)性,針對它的數(shù)據(jù)備份、恢復(fù)方案應(yīng)具備如下重要功能:
通過對系統(tǒng)重要數(shù)據(jù)的快速備份,切實(shí)保證系統(tǒng)數(shù)據(jù)的安全;
可以根據(jù)指令完成備份系統(tǒng)的實(shí)時(shí)切入,保證服務(wù)不被中斷,保持系統(tǒng)持續(xù)運(yùn)行的能力;
通過實(shí)時(shí)記錄所有文件的操作日志,系統(tǒng)管理員能夠在發(fā)生災(zāi)難的情況下對日志進(jìn)行分析和取證,從而發(fā)現(xiàn)入侵者的蛛絲馬跡。
NFS 多版本備份技術(shù)
為了保證服務(wù)器出現(xiàn)故障后能迅速恢復(fù),要求系統(tǒng)數(shù)據(jù)能快速恢復(fù)到一個(gè)最近的正確狀態(tài),所有這些都需要多版本技術(shù)的支持,通過同步記錄文件的在某些時(shí)刻的狀態(tài),在整個(gè)系統(tǒng)范圍內(nèi)建立起類似于數(shù)據(jù)庫系統(tǒng)的”檢查點(diǎn)”,以保證上述目標(biāo)的實(shí)現(xiàn)。
對于多版本系統(tǒng)而言,需要較好地解決兩個(gè)方面的問題:性能和空間利用率。對于前者,最主要的是保證在生成版本的時(shí)候能夠快速完成,同時(shí)恢復(fù)時(shí)也具有較好的性能。此外,系統(tǒng)引入多版本造成的整體開銷也應(yīng)該比較理想。對于第二點(diǎn),主要考慮是節(jié)約磁盤空間,雖然隨著硬件技術(shù)的不斷發(fā)展,磁盤空間越來越大,性價(jià)比也越來越高,但是當(dāng)版本較多而且文件數(shù)量較多、較大時(shí),引入多版本增加的開銷也可能相當(dāng)可觀,同時(shí),較大的空間也意味著版本生成時(shí)可能需要更多的寫操作,這樣也必將影響總體性能。
為了保證引入多版本特性后文件系統(tǒng)仍具有較好的性能,以及保證較高的空間利用率,我們開發(fā)了一種高效的惰性版本生成算法。主要思想是:生成版本時(shí)不進(jìn)行文件的復(fù)制,僅復(fù)制目錄結(jié)構(gòu),在新版本生成后到下一版本生成前,如果有文件需要修改,則第一次修改時(shí)對該文件進(jìn)行復(fù)制,從而保證該文件狀態(tài)與對應(yīng)的版本保持一致。
在一般情況下,目錄結(jié)構(gòu)的數(shù)據(jù)量遠(yuǎn)遠(yuǎn)小于文件的數(shù)據(jù)量,因而這種方法可以大大降低版本生成時(shí)需要復(fù)制的數(shù)據(jù)量,因而具有較高的性能。同時(shí),這種把單個(gè)文件版本生成的實(shí)際操作推后到非做不可的時(shí)候,并且任意文件在兩次版本之間最多生成一次版本,因此這種惰性策略可以使需要實(shí)際生成版本的文件數(shù)量達(dá)到最少,同時(shí)還可以把多個(gè)文件版本生成操作分散到具體的文件操作中,從而避免了集中的一次性版本生成方法可能造成的服務(wù)暫時(shí)停頓的問題。
版本生成后的結(jié)構(gòu)如圖 2 所示。
圖 2 多版本生成示意圖
具體算法包括兩個(gè)部分,即版本生成算法和文件第一次修改處理算法,版本生成算法主要完成版本生成工作,主要過程如下:
找到需要形成版本的最高層目錄作為原目錄;
利用文件系統(tǒng)提供的函數(shù),生成新的目錄節(jié)點(diǎn),稱為新目錄;
評論