色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

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

          作者: 時(shí)間:2016-09-12 來(lái)源:網(wǎng)絡(luò) 收藏

          由于主文件服務(wù)器一般需要處理文件的讀寫請(qǐng)求,寫請(qǐng)求僅占一部分,需要同步而執(zhí)行的操作造成的負(fù)載要小于主服務(wù)器,因此可能在較短的時(shí)間內(nèi)完成同步。當(dāng)需要退出服務(wù)器(此時(shí)已經(jīng)進(jìn)入同步階段)成為主服務(wù)器時(shí),則必須等所有同步數(shù)據(jù)同步完成后才能開(kāi)始服務(wù)。

          如果退出服務(wù)器是因?yàn)檩^嚴(yán)重的故障或?yàn)?zāi)難而退出的,則可能需要較長(zhǎng)時(shí)間的處理,如更換硬件、系統(tǒng)重啟、甚至重裝系統(tǒng)等,這時(shí)就可能出現(xiàn)一些困難的情況,一種是如上圖所示的,工作正常的系統(tǒng)已經(jīng)生成了新的版本,如服務(wù)器退出時(shí)的最新版本是 i,經(jīng)過(guò)一段時(shí)間后,正常系統(tǒng)生成了新的版本,這時(shí)主系統(tǒng)會(huì)清空同步數(shù)據(jù)文件,重新從版本生成后進(jìn)行記錄。對(duì)于這種情況,可以有兩種處理辦法:

          基于本地版本的快速恢復(fù):當(dāng)退出文件服務(wù)器本地至少存在一個(gè)版本與其他正常機(jī)器上的版本相同時(shí),可以采用這種恢復(fù)策略。具體而言,先確定一個(gè)最新的正確版本,用本地版本恢復(fù),這一過(guò)程非常簡(jiǎn)單快捷,僅涉及到兩次 inode 的修改;然后選擇一臺(tái)正常服務(wù)器,請(qǐng)求它生成一個(gè)正常系統(tǒng)上最新版本與恢復(fù)版本的增量升級(jí)數(shù)據(jù),這樣的數(shù)據(jù)量不會(huì)很大,而且不需要象基于操作的同步那樣逐步進(jìn)行,同步效率非常高,因此可以大大提高恢復(fù)速度。同步到正常系統(tǒng)的最新版本后,然后就按照上述第 2 條的情況進(jìn)行同步數(shù)據(jù)文件的同步。

          基于分布版本的快速恢復(fù):當(dāng)停頓時(shí)間太長(zhǎng)而不存在一個(gè)相同的版本,或文件服務(wù)器數(shù)據(jù)出現(xiàn)損壞(如磁盤故障造成數(shù)據(jù)損毀)時(shí),需要采用此種方法。具體辦法如下:直接把正常服務(wù)器上的最新版本傳送到退出服務(wù)器,然后按照上述的第 2 種情況進(jìn)行同步數(shù)據(jù)文件的同步。

          正如上面所述,全部服務(wù)器均出現(xiàn)問(wèn)題的概率是很小的,但是,不能簡(jiǎn)單的排除這種情況的出現(xiàn),特別是本方案采用數(shù)據(jù)同步機(jī)制,即多個(gè)站點(diǎn)的數(shù)據(jù)是保持快速同步的,這雖然能保證動(dòng)態(tài)遷移的順利完成,但是也帶來(lái)較大的風(fēng)險(xiǎn),就是會(huì)出現(xiàn)數(shù)據(jù)”污染”的自動(dòng)傳播,當(dāng)主文件服務(wù)器中的文件數(shù)據(jù)因?yàn)槟承┰?主要是對(duì)文件的非法訪問(wèn))造成數(shù)據(jù)非法修改時(shí),會(huì)立即傳播到其他備份節(jié)點(diǎn),這樣的話,不管服務(wù)遷移到哪臺(tái)機(jī)器均會(huì)出現(xiàn)錯(cuò)誤。

          針對(duì)這種情況,我們采取了以下措施:當(dāng)發(fā)現(xiàn)非法修改造成數(shù)據(jù)污染時(shí),系統(tǒng)可以自動(dòng)命令各站點(diǎn)恢復(fù)到指定的版本,如前一版本(可以由管理員配置成前一、二、三個(gè)版本);管理員也可以干預(yù)這一過(guò)程,強(qiáng)制各站點(diǎn)恢復(fù)到同一指定的版本,從而保證全局文件系統(tǒng)使用同一正確版本。

          NFS 文件細(xì)粒度恢復(fù)技術(shù)

          在傳統(tǒng)恢復(fù)技術(shù)中,一方面由于不是實(shí)時(shí)進(jìn)行的,當(dāng)出現(xiàn)事故需要恢復(fù)時(shí),最新的備份數(shù)據(jù)與最新數(shù)據(jù)之間存在一個(gè)時(shí)間差,這樣就造成了該時(shí)間段內(nèi)數(shù)據(jù)的丟失(見(jiàn)圖 5);同時(shí),傳統(tǒng)的是一定時(shí)間段后數(shù)據(jù)的增量備份,是一段時(shí)間內(nèi)所有文件操作疊加后的結(jié)果,因而無(wú)法精確知道在這段時(shí)間內(nèi)實(shí)際數(shù)據(jù)的變化過(guò)程,因而也無(wú)法從所有這些操作中定位非法操作,并進(jìn)行選擇性的恢復(fù),以保證數(shù)據(jù)的正確性。

          圖 5 因非實(shí)時(shí)備份造成恢復(fù)時(shí)的數(shù)據(jù)丟失示意圖

          圖 5 因非實(shí)時(shí)備份造成恢復(fù)時(shí)的數(shù)據(jù)丟失示意圖

          基于上述考慮,我們不但采用了增量方式的多版本備份恢復(fù)技術(shù),同時(shí)還對(duì)文件的修改日志進(jìn)行了實(shí)時(shí)的備份,這樣就可以在事故發(fā)生后進(jìn)行基于文件操作的精確恢復(fù),并支持允許剔除非法操作的選擇性恢復(fù),這樣既能盡量避免因事故造成的數(shù)據(jù)丟失問(wèn)題,又能通過(guò)選擇性恢復(fù)較好保證數(shù)據(jù)的正確性,同時(shí),還可以通過(guò)對(duì)日志的分析,結(jié)合數(shù)據(jù)的精確恢復(fù),達(dá)到發(fā)現(xiàn)犯罪線索、獲得有效證據(jù)的目的,為打擊網(wǎng)絡(luò)犯罪提供有力的技術(shù)手段。在這里,精確性恢復(fù)指的是恢復(fù)某一時(shí)段的所有操作,一般是在某一版本后的所有操作,不由用戶進(jìn)行選擇,而選擇性恢復(fù)則指的是某一時(shí)間段內(nèi)的所有操作構(gòu)成的集合的子集,需要恢復(fù)的操作由用戶通過(guò)查詢、瀏覽等工具來(lái)進(jìn)行選擇。在我們的定義中,實(shí)際上可以認(rèn)為精確恢復(fù)為選擇性恢復(fù)的一個(gè)特例。

          我們首先需要有相關(guān)的解決方法來(lái)記錄下具體的操作信息,形成操作日志文件,從而作為分析的證據(jù)(參見(jiàn)圖 6)。我們使用的策略是通過(guò)修改服務(wù)器操作系統(tǒng)內(nèi)核調(diào)用 nfsd_write()、nfsd_create()……。從中取到調(diào)用處理對(duì)象的文件、目錄的全路徑名,寫進(jìn)文件,在內(nèi)核中截獲相應(yīng)的文件操作請(qǐng)求。下面以 nfsd_rename()系統(tǒng)調(diào)用為例,進(jìn)行擴(kuò)充、修改而實(shí)現(xiàn)記錄操作日志的功能。

          int nfsd_rename(struct svc_rqst *rqstp, struct svc_fh *ffhp, char *fname,

          int flen,struct svc_fh *tfhp, char *tname, int tlen)

          {

          struct dentry *fdentry, *tdentry, *odentry, *ndentry;

          struct inode *fdir, *tdir;

          int err;

          char *name;

          mem_segment_t oldfs;

          int fd;

          err = fh_verify(rqstp, ffhp, S_IFDIR, MAY_REMOVE);

          if (err)

          goto out;

          rqstp->rq_path1 = rqstp->rq_path2;

          err = fh_verify(rqstp, tfhp, S_IFDIR, MAY_CREATE);

          if (err)

          goto out;

          fdentry = ffhp->fh_dentry;

          fdir = fdentry->d_inode;

          tdentry = tfhp->fh_dentry;

          tdir = tdentry->d_inode;

          ……

          //加入的代碼進(jìn)行處理工作

          if((!rqstp->rq_recover)(!S_ISDIR(odentry->d_inode->i_mode))

          (odentry->d_inode->i_nlink>1)){

          rqstp->rq_copy->wait = 1;

          rqstp->rq_copy->done = 0;

          name = get_total_name(dentry,NULL);

          oldfs = get_fs();

          set_fs(KERNEL_DS); //進(jìn)入內(nèi)核模式

          fd = sys_open(/backupserv/changfilename.c,0,31681);

          sys_write(fd,name,strlen(name));

          sys_close(fd);

          set_fs(oldfs); //從內(nèi)核模式返回



          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉