中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > Linux 網(wǎng)絡文件系統(tǒng)的數(shù)據(jù)備份及恢復機制實現(xiàn)

        Linux 網(wǎng)絡文件系統(tǒng)的數(shù)據(jù)備份及恢復機制實現(xiàn)

        作者: 時間:2016-09-12 來源:網(wǎng)絡 收藏

        while(!rqstp->rq_copy->done){

        本文引用地址:http://www.antipu.com.cn/article/201609/304200.htm

        schedule_timeout((HZ+99)/100);

        ……

        }

        }

        該文件是在 nfs 服務器端執(zhí)行 nfs 客戶機發(fā)送過來的修改文件或者是目錄的原函數(shù)。在這里,我們可以通過添加自己的代碼,來將創(chuàng)建的目錄和文件名存入一個磁盤文件當中,以備后面的備份和恢復操作。

        圖 6 NFS 文件細粒度恢復日志產(chǎn)生示意圖

        圖 6 NFS 文件細粒度恢復日志產(chǎn)生示意圖

        獲得了操作日志信息,然后就可以進行精確恢復和選擇性恢復時。首先由用戶利用數(shù)據(jù)查詢、瀏覽工具確定需要恢復的文件操作集,然后利用相應的日志數(shù)據(jù)按記錄產(chǎn)生順序逐條生成恢復請求,發(fā)送給文件服務器端的代理程序,由它通過 proc 文件請求 NFS 文件系統(tǒng)恢復模塊進行恢復,恢復模塊收到請求后,取出相關數(shù)據(jù),然后通過調(diào)用底層 ext3 文件系統(tǒng)基本操作完成該次文件操作的”重放”,最后返回執(zhí)行結(jié)果,通過 proc 文件通知代理程序,代理程序再通知管理端,管理端再發(fā)送下一條恢復請求,及到所有選中的操作全完成為止。具體實現(xiàn)模式請參看圖 7:

        圖 7 恢復流程示意圖

        圖 7 恢復流程示意圖

        數(shù)據(jù)快速同步技術

        在系統(tǒng)中,各文件服務器之間的數(shù)據(jù)需要及時同步更新,這樣才能保證服務遷移后到新的環(huán)境后相關數(shù)據(jù)環(huán)境的一致性,從而保證服務遷移在語義上的正確性。在本方案中,每個文件服務器均采用 NFSv3 協(xié)議向外提供文件服務,當系統(tǒng)開始工作時,管理員會指定一臺主服務器,由該服務器負責向外提供服務,其他文件服務器為備份服務器,接收同步數(shù)據(jù),進行數(shù)據(jù)的同步更新,并不對外提供服務,只有當系統(tǒng)決定遷移后,選定的遷移目標對應的文件服務器才成為主文件服務器。

        由于主文件服務器負責對外的文件服務,因此,數(shù)據(jù)同步的發(fā)起者應該是主文件服務器,而所有的備份服務器均為被動的同步數(shù)據(jù)接收者。因此,數(shù)據(jù)的快速同步包含兩方面的工作:主文件服務器產(chǎn)生同步數(shù)據(jù)和備份文件服務器接收同步數(shù)據(jù)完成同步。具體的數(shù)據(jù)流向如圖 8 所示:

        圖 8 同步數(shù)據(jù)的產(chǎn)生與流動示意圖

        圖 8 同步數(shù)據(jù)的產(chǎn)生與流動示意圖

        為了達到數(shù)據(jù)快速同步的目的,我們采用了記錄文件寫操作(包括創(chuàng)建、修改、刪除、改名、屬性修改等所有的改變文件或目錄屬性、內(nèi)容的操作)的具體參數(shù)的方法來生成同步數(shù)據(jù),這樣每次生成的數(shù)據(jù)量比較少,而且可以滿足及時更新的目的。同步數(shù)據(jù)的格式及相關代碼段如下:

        struct Log {

        int length; //整個數(shù)據(jù)包的長度

        int ops; //操作的類型

        char* data; //與操作相關數(shù)據(jù)

        };

        //下面代碼段從內(nèi)核將同步數(shù)據(jù)包發(fā)往其他文件服務器

        long send(struct socket* sock, void * buff,size_t len)

        {

        int err;

        mm_segment_t oldfs;

        struct msghdr msg;

        struct iovec iov;

        static int total = 0;

        down(log_sem);

        iov.iov_base=buff;

        iov.iov_len=len;

        msg.msg_name=NULL;

        msg.msg_iov=iov;

        msg.msg_iovlen=1;

        msg.msg_control=NULL;

        msg.msg_controllen=0;

        msg.msg_namelen=0;

        total += len;

        msg.msg_flags = MSG_SYN;//DONTWAIT;

        oldfs=get_fs();

        set_fs(KERNEL_DS);

        err = sock_sendmsg(sock, msg, len);

        set_fs(oldfs);

        if(err0){

        dprintk(send err(errNo=%d len = %d)n,err,len);

        netbroken = 1;

        }

        ……

        up(log_sem);

        return(err);

        }

        同步數(shù)據(jù)產(chǎn)生后,先放入一個緩沖區(qū)中,而不是立即發(fā)送到備份文件服務器,這樣可以較大程度改善系統(tǒng)的總體性能。緩沖區(qū)中的數(shù)據(jù)由同步管理進程管理,當達到一定數(shù)據(jù)量時,同步管理程序負責把緩沖區(qū)中的數(shù)據(jù)發(fā)送到備份文件服務器上,并根據(jù)返回的應答結(jié)果決定是否需要把重發(fā)數(shù)據(jù),當確認某個服務器無法響應后,自動把同步數(shù)據(jù)定期寫入一個僅可追加的文件,以便于隨后可能需要的恢復階段同步的需要,當這個寫入的文件數(shù)據(jù)量超出一定限制時,并且系統(tǒng)確認已經(jīng)至少有一個新的版本生成,可以把該文件清空。

        當數(shù)據(jù)到達備份文件服務器時,由獨立的接收進程負責把數(shù)據(jù)放入接收緩沖區(qū),經(jīng)核對數(shù)據(jù)無誤后給主服務器發(fā)送確認信號,另一個獨立進程即更新管理進程把接收緩沖區(qū)作為輸入,從中解析出一個個的順序的操作日志,從每個日志中得到操作類型,然后在剩余的數(shù)據(jù)中按照特定的操作類型提取所需的參數(shù),利用文件系統(tǒng)調(diào)用完成相應操作。

        總結(jié)

        系統(tǒng)已經(jīng)為企業(yè)在和共享領域得到了廣泛應用。如何保證其多版本備份、實時恢復是一個非常關鍵的問題,本文將詳細介紹針對該系統(tǒng)的、恢復及同步機制在內(nèi)核的具體實現(xiàn),給廣大系統(tǒng)管理員和研發(fā)人員提供技術參考。


        上一頁 1 2 3 4 5 6 下一頁

        評論


        相關推薦

        技術專區(qū)

        關閉