新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > Linux 網絡文件系統的數據備份及恢復機制實現

        Linux 網絡文件系統的數據備份及恢復機制實現

        作者: 時間:2016-09-12 來源:網絡 收藏

        為了保證引入多版本特性后文件系統仍具有較好的性能,以及保證較高的空間利用率,我們開發了一種高效的惰性版本生成算法。主要思想是:生成版本時不進行文件的復制,僅復制目錄結構,在新版本生成后到下一版本生成前,如果有文件需要修改,則第一次修改時對該文件進行復制,從而保證該文件狀態與對應的版本保持一致。

        在一般情況下,目錄結構的數據量遠遠小于文件的數據量,因而這種方法可以大大降低版本生成時需要復制的數據量,因而具有較高的性能。同時,這種把單個文件版本生成的實際操作推后到非做不可的時候,并且任意文件在兩次版本之間最多生成一次版本,因此這種惰性策略可以使需要實際生成版本的文件數量達到最少,同時還可以把多個文件版本生成操作分散到具體的文件操作中,從而避免了集中的一次性版本生成方法可能造成的服務暫時停頓的問題。

        版本生成后的結構如圖 2 所示。

        圖 2 多版本生成示意圖

        圖 2 多版本生成示意圖

        具體算法包括兩個部分,即版本生成算法和文件第一次修改處理算法,版本生成算法主要完成版本生成工作,主要過程如下:

        找到需要形成版本的最高層目錄作為原目錄;

        利用文件系統提供的函數,生成新的目錄節點,稱為新目錄;

        把原目錄中的結構復制到新目錄;

        在原目錄中找到所有的子目錄,重復 2、3 步;

        把新的子目錄對應的 inode 號替換上一層目錄中的老 inode 號;

        重復上述過程,及到目錄樹中的所有目錄得到復制為止。

        在上述策略中,新版本并沒有復制所有的文件,只是在復制的目錄結構中記錄下了該文件的 inode 號(即復制了目錄的結構,而不是把文件都進行復制,從而節省了存儲和計算資源),因此,當有 NFS 請求需要對文件進行版本生成后的第一次修改時,需要復制該文件,生成新的版本。該實現過程參見如下流程圖:

        圖 3 寫時復制算法示意圖

        圖 3 寫時復制算法示意圖

        這種文件復制策略其實是一種惰性算法,也即我們常說的寫時復制的方法,這個方法在 操作系統的子進程對父進程資源的繼承中有所體現。這個策略一方面可以最大限度減少復制文件的數量,另一方面則可以避免瞬間過大的文件復制工作量,影響文件服務的性能。該算法的過程如下:當文件操作為寫操作時,判斷該文件是否版本生成后的第一次寫操作;若是則利用文件系統提供的底層函數生成一個新的文件,復制源文件的數據到新生成的文件,同時把該文件當前版本的 inode 節點中的版本號置為當前版本號,這樣新文件就成為該文件的最新版本。

        雖然我們采用的算法可以有較好的性能,存儲開銷也是最優,但是,每次版本生成肯定會造成服務性能的下降和空間的占用,而這些代價在一個比較安全可靠的環境中是可以適當降低的,即當系統比較安全的時候,可以選擇讓系統以更低的頻率進行版本生成,相反,當系統安全狀況比較糟糕的時候,可以通過提高版本生成頻率適當降低服務性能來獲得更高的數據安全性能,當系統處于緊急狀態時,甚至可以要求立即進行版本生成。

        基于這些考慮,我們采用了自適應的備份策略,災情評估系統可以動態評估系統的災情程度,然后可以立即修改版本生成策略,以適應當時的安全要求。

        NFS 數據恢復技術

        企業應用 NFS 的一個重要目標就是要保證系統的高可用性,即使在出現嚴重災難、故障、攻擊等情況下能具有較好的生存能力。因此,當一個系統出現故障時,如何快速地恢復系統,迅速投入到服務備份中去是相當重要的,所以,對于文件系統數據的恢復而言,也需要專門的考慮和設計。

        本方案被配置成多個站點互為備份的情況,即平時只有一個主站點在服務,其他站點處于同步備份狀態,當某個站點出現故障或災難時,或者是被非法入侵者攻破時,系統可以立即分配新的主站點把被破壞的站點替換下來,進入恢復狀態,其他正常的站點仍可提供正常的服務。

        當然,也存在所有站點均出現故障的情況,但是由于我們采用了多種措施,如動態隨機遷移、災情評估與響應策略等,再配合傳統的防火墻、IDS 等安全系統,可以極大限度地減少這種幾率。因此,我們的數據恢復問題主要考慮上述這種情形,即個別服務器出現故障退出服務而其他系統依然正常的情況。

        首先,我們來分析一下系統退出后數據的情形,主要涉及到退出的服務器和正常的主服務器與備份服務器,如圖 4 所示:

        圖 4 一個系統退出后數據狀態示意圖

        圖 4 一個系統退出后數據狀態示意圖

        在上圖中,退出服務器最后生成的版本號為 i,系統退出后,一方面主文件服務器會察覺到同步數據無法從退出服務器返回結果,這樣的話它就會重發同步請求,經過 3 次重發后,如果依然沒有返回信息,則認為該服務器退出服務,因此會把同步到磁盤文件中,并記錄下該服務器在同步數據文件中的起始位置,這當由多個文件服務器退出時可以分別識別出來。由于退出系統無法繼續保持同步,因此其狀態會與工作的文件服務器不一致,具體表現在以下幾個方面:

        當退出時間很短時,數據不一致僅存在于緩沖區中,這時如果退出服務器能立即重新投入使用,則不需要進行額外的數據恢復,數據同步可以通過主服務器同步請求的重試來達到。

        當主服務器確認退出服務器退出后,會把未同步的數據寫入特定的同步數據文件中,這時的不一致性包括了緩沖區中的數據和同步數據文件中的數據,這時的數據恢復需要做兩方面的工作:

        把同步數據文件中的正確數據一次性發送給退出服務器,退出服務器把它寫入本地的同步數據文件;

        建立本地的緩沖區,建立起同步機制,接收同步數據,同時啟動數據同步進程,先同步數據文件中的數據,當緩沖區數據因沒有處理而達到一定程度時,會自動把部分數據追加到同步數據文件的后面,這時,退出服務器已經恢復了正常工作,實際上也不需要過多的數據恢復工作。



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 舞阳县| 中阳县| 平南县| 江永县| 库伦旗| 教育| 兴山县| 乐至县| 长寿区| 茶陵县| 淮阳县| 满洲里市| 邯郸县| 达孜县| 常山县| 定州市| 左贡县| 讷河市| 论坛| 江北区| 定边县| 宣武区| 钦州市| 临泽县| 大宁县| 开封市| 临武县| 黎城县| 长宁区| 海丰县| 饶平县| 夏河县| 澄城县| 石柱| 册亨县| 衡阳县| 苍南县| 宣化县| 隆子县| 灵宝市| 榆社县|