專利名稱:具有版本控制的網(wǎng)絡(luò)文件系統(tǒng)及方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)領(lǐng)域,尤其涉及一種具有版本控制的網(wǎng)絡(luò)文件系統(tǒng)及方法。
背景技術(shù):
網(wǎng)絡(luò)文件系統(tǒng)(Network File System,NFQ,是指在網(wǎng)絡(luò)上計(jì)算機(jī)之間共享磁盤文件的方法,通過這種方法,文件就如同位于本地硬盤驅(qū)動(dòng)器上一樣方便,能使使用者訪問網(wǎng)絡(luò)上別處的文件就像在使用自己的計(jì)算機(jī)一樣。網(wǎng)絡(luò)文件系統(tǒng)通常會(huì)支持多人在線合作,一份文件可能會(huì)被多人頻繁修改。因此, 網(wǎng)絡(luò)文件系統(tǒng)需要支持版本控制功能,以便在遇到問題時(shí)方便地對(duì)文件進(jìn)行版本回滾或修
Μ. ο
發(fā)明內(nèi)容
本發(fā)明的目的在于提供一種具有版本控制的網(wǎng)絡(luò)文件系統(tǒng)及方法,在文件發(fā)生數(shù)據(jù)損壞、以及用戶誤操作時(shí)可以提供文件的歷史版本恢復(fù),提高網(wǎng)絡(luò)文件系統(tǒng)的容錯(cuò)能力和可用性。為解決上述問題,本發(fā)明提供一種具有版本控制的網(wǎng)絡(luò)文件系統(tǒng),包括監(jiān)控模塊,用于監(jiān)控用戶對(duì)文件請(qǐng)求的文件操作;判斷模塊,用于判斷模塊,用于根據(jù)所述用戶對(duì)文件請(qǐng)求的文件操作的類型判斷是否保存該文件的歷史版本;歷史版本保存模塊,用于根據(jù)所述判斷模塊的判斷結(jié)果進(jìn)行歷史版本的保存,若所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除、修改或重命名,則保存該文件的歷史版本;若所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除、修改或重命名類型以外的操作,則直接執(zhí)行所述文件操作請(qǐng)求;操作日志記錄模塊,用于在每次歷史版本保存時(shí)記錄文件操作日志以用于恢復(fù)歷史版本的文件操作;執(zhí)行文件操作模塊,用于執(zhí)行所述用戶對(duì)文件請(qǐng)求的文件操作。進(jìn)一步的,當(dāng)所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除時(shí),所述歷史版本保存模塊保存一個(gè)只包含指向原始文件地址的指針的歷史版本,并記錄一個(gè)刪除文件的文件操作日志,為文件加入刪除標(biāo)記,若需要恢復(fù)刪除的文件,將所述刪除標(biāo)記去掉。進(jìn)一步的,當(dāng)所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件內(nèi)容的修改,且前后兩次修改文件的時(shí)間差大于一時(shí)間閾值時(shí),所述歷史版本保存模塊保存該文件的歷史版本。進(jìn)一步的,當(dāng)所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件內(nèi)容的修改,且前后兩次修改文件的內(nèi)容差大于一內(nèi)容閾值時(shí),所述歷史版本保存模塊保存該文件的歷史版本。進(jìn)一步的,所述文件操作日志包括用戶名、文件名、文件路徑、文件操作時(shí)間和文件操作類型。
相應(yīng)的,本發(fā)明還提供一種應(yīng)用上述的具有版本控制的網(wǎng)絡(luò)文件系統(tǒng)的方法,包括通過所述監(jiān)控模塊監(jiān)控用戶對(duì)文件請(qǐng)求的文件操作;所述判斷模塊根據(jù)所述用戶請(qǐng)求的文件操作的類型判斷是否保存該文件的歷史版本;若所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除、修改或重命名,則所述歷史版本保存模塊保存該文件的歷史版本,并在每次歷史版本保存時(shí)通過所述操作日志記錄模塊記錄文件操作日志;若所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除、修改或重命名類型以外的操作,則直接通過所述執(zhí)行文件操作模塊執(zhí)行用戶對(duì)文件請(qǐng)求的文件操作。進(jìn)一步的,當(dāng)所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件內(nèi)容的修改,且前后兩次修改文件的內(nèi)容差大于一內(nèi)容閾值時(shí),所述歷史版本保存模塊采用基于鎖機(jī)制的歷史版本保存方法保存該文件的歷史版本。進(jìn)一步的,所述基于鎖機(jī)制的歷史版本保存方法包括將該文件設(shè)置為鎖定狀態(tài),此時(shí)拒絕任何對(duì)文件的修改操作;保存該文件的歷史版本;記錄文件操作日志并將該文件解鎖。進(jìn)一步的,當(dāng)所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件內(nèi)容的修改,且前后兩次修改文件的內(nèi)容差大于一內(nèi)容閾值時(shí),所述歷史版本保存模塊采用基于寫時(shí)拷貝技術(shù)的歷史版本增量備份方法保存該文件的歷史版本。進(jìn)一步的,所述基于寫時(shí)拷貝技術(shù)的歷史版本增量備份方法包括歷史版本創(chuàng)建過程、歷史版本備份過程和歷史版本恢復(fù)過程。進(jìn)一步的,所述歷史版本創(chuàng)建過程包括生成一新文件并為所述新文件分配一片數(shù)據(jù)存儲(chǔ)區(qū)域;將原文件的元數(shù)據(jù)拷貝到該數(shù)據(jù)存儲(chǔ)區(qū)域中,完成歷史版本的創(chuàng)建。進(jìn)一步的,所述元數(shù)據(jù)的內(nèi)容包括文件名、修改時(shí)間、文件大小、文件數(shù)據(jù)塊起始位置、文件數(shù)據(jù)塊分區(qū)表。進(jìn)一步的,所述歷史版本備份過程采用文件增量算法完成,包括當(dāng)通過文件增量算法獲知對(duì)文件內(nèi)容的修改是在新開辟的數(shù)據(jù)塊中添加數(shù)據(jù)時(shí), 則需要記錄文件操作日志,并記錄文件元數(shù)據(jù)發(fā)生的變化;當(dāng)通過文件增量算法獲知對(duì)文件內(nèi)容的修改是在現(xiàn)有數(shù)據(jù)塊中發(fā)生的內(nèi)容變化時(shí),則需要把該數(shù)據(jù)塊的原始數(shù)據(jù)拷貝到所述歷史版本的數(shù)據(jù)存儲(chǔ)區(qū)域,并記錄文件操作日志和文件元數(shù)據(jù)的變化。進(jìn)一步的,當(dāng)通過文件增量算法獲知對(duì)文件內(nèi)容的修改是在現(xiàn)有數(shù)據(jù)塊中發(fā)生的內(nèi)容變化時(shí),所述文件操作日志中,記錄發(fā)生所述內(nèi)容變化的現(xiàn)有數(shù)據(jù)塊的位置以及產(chǎn)生所述內(nèi)容變化的刪除、編輯或添加的修改操作類型。進(jìn)一步的,所述文件增量算法將新歷史版本文件對(duì)比上一歷史版本文件所發(fā)生變化的內(nèi)容進(jìn)行增量備份,包括將新歷史版本文件等分為N字節(jié)長(zhǎng)度的數(shù)據(jù)塊集合,并分別計(jì)算出所有數(shù)據(jù)塊的校驗(yàn)值集合;對(duì)于所述上一歷史版本文件,從第一個(gè)字節(jié)開始計(jì)算N字節(jié)的長(zhǎng)度數(shù)據(jù)塊的校驗(yàn)值,其中N為大于1的正整數(shù);比較所述上一歷史版本文件的校驗(yàn)值和新歷史版本文件的校驗(yàn)值集合中的校驗(yàn)值,如果相等,則進(jìn)行所述上一歷史版本文件的數(shù)據(jù)塊和新歷史版本文件的數(shù)據(jù)塊的字符串匹配,若匹配,則文件操作日志中只記錄數(shù)據(jù)塊的位置,無需記錄數(shù)據(jù)塊內(nèi)容,在將文件恢復(fù)到所述上一歷史版本時(shí)直接執(zhí)行拷貝,同時(shí)將所述上一歷史版本文件向后滑動(dòng)N個(gè)字節(jié)的長(zhǎng)度繼續(xù)計(jì)算;如果不匹配,則在文件操作日志中記錄不同的數(shù)據(jù)和位置,在將文件恢復(fù)到所述上一歷史版本時(shí)執(zhí)行插入操作,同時(shí)將所述上一歷史版本文件向后滑動(dòng)一個(gè)字節(jié)繼續(xù)計(jì)算;繼續(xù)執(zhí)行以上操作,直至所述上一歷史版本文件的所有數(shù)據(jù)塊均完成計(jì)算。進(jìn)一步的,所述歷史版本恢復(fù)過程包括在收到歷史版本恢復(fù)請(qǐng)求時(shí),讀取所述文件操作日志,確定數(shù)據(jù)回滾的起始位置;讀取請(qǐng)求的歷史版本的原始數(shù)據(jù)內(nèi)容并將其拷貝回原始文件的數(shù)據(jù)塊中,完成歷史版本恢復(fù)操作。與現(xiàn)有技術(shù)相比,本發(fā)明提供的具有版本控制的網(wǎng)絡(luò)文件系統(tǒng)及方法,通過監(jiān)控請(qǐng)求的文件操作類型,判斷用戶的文件操作是否符合網(wǎng)絡(luò)文件系統(tǒng)的歷史版本保存策略以決定是否保存歷史版本,對(duì)于用戶誤操作,如誤刪文件或錯(cuò)誤修改,可以通過歷史版本恢復(fù)到用戶希望的狀態(tài);在保存歷史版本的同時(shí)記錄文件操作日志,包括文件操作的時(shí)間、動(dòng)作,以方便用戶在歷史版本恢復(fù)時(shí)能夠選到合適的版本。
圖1是本發(fā)明的具有版本控制的網(wǎng)絡(luò)文件系統(tǒng)的架構(gòu)示意圖;圖2是本發(fā)明的應(yīng)用具有版本控制的網(wǎng)絡(luò)文件系統(tǒng)的方法流程圖;圖3是本發(fā)明的具體實(shí)施例一的簡(jiǎn)化流程圖;圖4A至4C是本發(fā)明的具體實(shí)施例二的簡(jiǎn)化流程圖。
具體實(shí)施例方式以下結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明提出的具有版本控制的網(wǎng)絡(luò)文件系統(tǒng)及方法作進(jìn)一步詳細(xì)說明。如圖1所示,本發(fā)明提供一種具有版本控制的網(wǎng)絡(luò)文件系統(tǒng),包括監(jiān)控模塊11,用于監(jiān)控用戶對(duì)文件請(qǐng)求的文件操作;判斷模塊12,用于根據(jù)所述用戶請(qǐng)求的文件操作的類型判斷是否保存該文件的歷史版本;歷史版本保存模塊13,用于根據(jù)所述判斷模塊12的判斷結(jié)果進(jìn)行歷史版本的保存;若所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除、修改或重命名,則保存該文件的歷史版本;若所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除、修改或重命名類型以外的操作,則直接執(zhí)行所述用戶對(duì)文件請(qǐng)求的文件操作,不保存該文件的歷史版本;
操作日志記錄模塊14,用于在每次歷史版本保存時(shí)記錄文件操作日志;執(zhí)行文件操作模塊15,用于執(zhí)行所述用戶對(duì)文件請(qǐng)求的文件操作。相應(yīng)的,本發(fā)明還提供一種應(yīng)用上述的具有版本控制的網(wǎng)絡(luò)文件系統(tǒng)的方法,如圖2所示,包括S10,通過所述監(jiān)控模塊11監(jiān)控用戶請(qǐng)求的文件操作;S21,若所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除、修改或重命名,則所述歷史版本保存模塊保存該文件的歷史版本,并在保存該文件的歷史版本時(shí)通過所述操作日志記錄模塊記錄該文件的操作日志;S22,若所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除、修改或重命名類型以外的操作,則通過所述執(zhí)行文件操作模塊執(zhí)行所述用戶對(duì)文件請(qǐng)求的文件操作。本步驟中,當(dāng)監(jiān)控到請(qǐng)求的文件操作為恢復(fù)歷史版本的操作時(shí),根據(jù)所述文件操作日志和歷史版本恢復(fù)的請(qǐng)求,通過所述歷史版本恢復(fù)模塊15該文件恢復(fù)到請(qǐng)求的歷史版本。需要說明的是,本發(fā)明的歷史版本的保存策略,S卩,在什么情況下需要為文件保存歷史版本,包括1、刪除和重命名文件需要保存版本通常來說,文件的刪除和重命名操作,并非文件的常用操作,但卻是重要的文件操作。因此,在本發(fā)明實(shí)施例中,每次進(jìn)行刪除和重命名文件的操作都需要保存文件歷史版本,并同時(shí)記錄文件操作日志。記錄文件操作日志非常重要,本發(fā)明實(shí)施例的網(wǎng)絡(luò)文件系統(tǒng)在每次歷史版本保存時(shí)都將記錄文件操作日志,它是用戶在版本恢復(fù)時(shí)選擇版本的重要選擇依據(jù)。該網(wǎng)絡(luò)文件系統(tǒng)的文件操作日志記錄包括用戶名、文件名、文件路徑、文件操作時(shí)間和文件操作動(dòng)作。當(dāng)請(qǐng)求的文件操作為對(duì)文件的刪除時(shí),本發(fā)明的網(wǎng)絡(luò)文件系統(tǒng)保存一個(gè)只包含指向原始文件地址的指針的歷史版本,并記錄一個(gè)刪除文件的文件操作日志,為文件加入刪除標(biāo)記,若需要恢復(fù)刪除的文件,將所述刪除標(biāo)記去掉。2、對(duì)文件內(nèi)容的修改需保存歷史版本,但忽略小歷史版本的保存一般的,對(duì)文件內(nèi)容的修改是文件最頻繁的操作之一,它一般包括對(duì)文件內(nèi)容的刪除、編輯及添加等,因此,在本發(fā)明實(shí)施例中,并不需要為每次修改都保存歷史版本。如果一個(gè)文件在一段很短的時(shí)間內(nèi)多次被修改,那么歷史版本的保存不能進(jìn)行的過于頻繁。若歷史版本保存太頻繁,很可能會(huì)積累過多無用的小版本文件,不僅會(huì)增加服務(wù)器負(fù)擔(dān),也會(huì)干擾用戶的操作。在這種情況下,判斷何時(shí)保存歷史版本的原則有以下幾種(1)當(dāng)請(qǐng)求的文件操作為對(duì)文件內(nèi)容的修改,且前后兩次修改文件的時(shí)間差大于一時(shí)間閾值時(shí),所述歷史版本保存模塊保存該文件的歷史版本。此情況下,根據(jù)兩次修改文件的時(shí)間差異決定是否保存新的歷史版本。例如,設(shè)置一個(gè)時(shí)間閾值(比如五分鐘),一旦上一次保存的歷史版本文件和本次發(fā)生文件內(nèi)容變化的時(shí)間間隔超過這個(gè)閾值,那么就進(jìn)行新歷史版本的保存。這種保存歷史版本的方式適合于喜歡一邊編輯文檔、一邊頻繁保存文檔的用戶。(2)當(dāng)請(qǐng)求的文件操作為對(duì)文件內(nèi)容的修改,且前后兩次修改文件的內(nèi)容差大于一內(nèi)容閾值時(shí),所述歷史版本保存模塊保存該文件的歷史版本。此情況下,根據(jù)兩次修改文件的內(nèi)容差異決定是否保存新的歷史版本。上面提到的根據(jù)時(shí)間閾值進(jìn)行版本保存的策略也有不合理的時(shí)候如果每次到達(dá)時(shí)間閾值時(shí)文件內(nèi)容的變化非常小,那么也沒有必要為該文件保持歷史版本;而對(duì)于頻繁修改的文件,在某一閾值內(nèi)有較多的內(nèi)容發(fā)生了變化,就有必要提高歷史版本保存的頻率。采用文件內(nèi)容差異比較的方法可以解決這個(gè)問題,若當(dāng)前的文件內(nèi)容較上一個(gè)歷史版本有較大差異的時(shí)候, 立即執(zhí)行新的歷史版本的保存。(3)結(jié)合以上兩種方法,同時(shí)考慮設(shè)置時(shí)間閾值和內(nèi)容閾值(比較文件內(nèi)容發(fā)生的變化),以此判斷是否進(jìn)行新的歷史版本保存。優(yōu)選的,以上三種情況下均不保存臨時(shí)文件的歷史版本。很多軟件(比如文檔編輯工具office)出于數(shù)據(jù)完整性以及性能的原因,都會(huì)創(chuàng)建臨時(shí)文件。本發(fā)明設(shè)計(jì)的網(wǎng)絡(luò)文件系統(tǒng)不會(huì)對(duì)這些在程序運(yùn)行、或是文件編輯時(shí)產(chǎn)生的臨時(shí)文件進(jìn)行版本保存,這些臨時(shí)文件在運(yùn)行完畢后自動(dòng)刪除。以下結(jié)合附圖3、圖4A和圖4B對(duì)本發(fā)明提出的應(yīng)用具有版本控制的網(wǎng)絡(luò)文件系統(tǒng)的方法作進(jìn)一步詳細(xì)說明。實(shí)施例一基于鎖機(jī)制的歷史版本保存方法本實(shí)施例的應(yīng)用具有版本控制的網(wǎng)絡(luò)文件系統(tǒng)的方法是基于鎖機(jī)制的歷史版本保存的方法,如圖3所示,包括通過所述監(jiān)控模塊11監(jiān)控用戶對(duì)文件請(qǐng)求的文件操作;根據(jù)所述用戶請(qǐng)求的文件操作的類型所述判斷模塊12判斷是否符合保存歷史版本的策略;若是,采用基于鎖機(jī)制的歷史版本保存的方法保存該文件的歷史版本并記錄文件操作日志,包括將該文件設(shè)置為鎖定狀態(tài),所述歷史版本保存模塊13保存該文件的歷史版本,所述操作日志記錄模塊14記錄文件操作日志并將該文件解鎖;若否,直接繼續(xù)下
一步;通過所述執(zhí)行文件操作模塊15執(zhí)行所述用戶對(duì)文件請(qǐng)求的文件操作。本實(shí)施例中的歷史版本的策略包括所述用戶請(qǐng)求的文件操作為對(duì)文件內(nèi)容的修改,且前后兩次修改文件的內(nèi)容差大于一內(nèi)容閾值。當(dāng)然,本實(shí)施例中的歷史版本的策略還可以包括前后兩次修改文件的時(shí)間差大于一時(shí)間閾值。本實(shí)例中,將該文件設(shè)置為鎖定狀態(tài)后,本發(fā)明實(shí)施例的網(wǎng)絡(luò)文件系統(tǒng)將拒絕任何對(duì)文件的修改操作,通過計(jì)算出最新的版本號(hào)作為文件名,保存該文件的當(dāng)前內(nèi)容,生成歷史版本以完成所述歷史版本保存模塊13保存該文件的歷史版本的步驟。當(dāng)所述用戶對(duì)文件請(qǐng)求的文件操作為歷史版本恢復(fù)時(shí),所述執(zhí)行文件操作模塊15根據(jù)所述操作日志記錄模塊14記錄的文件操作日志和所述歷史版本保存模塊13的歷史版本,將該文件恢復(fù)到請(qǐng)求的歷史版本。即將保存的歷史版本文件覆蓋現(xiàn)有文件。需要說明的是,實(shí)施例一的基于鎖機(jī)制的版本控制方案邏輯簡(jiǎn)單、易于實(shí)施,但是存在兩個(gè)重要的問題需要解決1、多重歷史版本備份的空間效率問題雖然存儲(chǔ)器的價(jià)格在過去的幾年里以讓人難以致信的速度滑落,但是對(duì)于用戶眾多、數(shù)據(jù)量龐大的網(wǎng)絡(luò)文件系統(tǒng),磁盤空間的消耗依然是一個(gè)重要的因素。尤其是對(duì)于維護(hù)一個(gè)多重備份的版本庫(kù)來說,就需要消耗更多的磁盤空間。顯然,大文件的歷史版本備份如果不做特殊處理,將會(huì)帶來巨大的磁盤空間消耗。
2、多重歷史版本備份的文件可用性問題在多任務(wù)、多用戶的環(huán)境下,網(wǎng)絡(luò)文件系統(tǒng)需要保證文件的可用性。在歷史版本備份過程中需要進(jìn)行文件鎖定,如果進(jìn)行歷史版本備份的文件容量越大,那么備份歷史版本的時(shí)間也會(huì)越長(zhǎng),文件的鎖定狀態(tài)將會(huì)長(zhǎng)時(shí)間持續(xù)。為此,本發(fā)明還設(shè)計(jì)了實(shí)施例二所述的一種基于寫時(shí)拷貝技術(shù)的歷史版本增量備份方法以解決這些問題。實(shí)施例二基于寫時(shí)拷貝技術(shù)的歷史版本增量備份方法本實(shí)例的應(yīng)用具有版本控制的網(wǎng)絡(luò)文件系統(tǒng)的方法是一種基于寫時(shí)拷貝技術(shù)的歷史版本增量備份方法的方法,如圖2所示,包括通過所述監(jiān)控模塊11監(jiān)控用戶對(duì)文件請(qǐng)求的文件操作;根據(jù)所述用戶請(qǐng)求的文件操作的類型所述判斷模塊12判斷是否符合保存歷史版本的策略;若是,所述歷史版本保存模塊13采用基于寫時(shí)拷貝技術(shù)的歷史版本增量備份的方法保存該文件的歷史版本,所述操作日志記錄模塊14記錄文件操作日志;若否,直接繼續(xù)下一步;通過所述執(zhí)行文件操作模塊15執(zhí)行所述用戶對(duì)文件請(qǐng)求的文件操作。本實(shí)施例中的歷史版本的策略包括所述用戶請(qǐng)求的文件操作為對(duì)文件內(nèi)容的修改,且前后兩次修改文件的內(nèi)容差大于一內(nèi)容閾值。當(dāng)然,本實(shí)施例中的歷史版本的策略還可以包括前后兩次修改文件的時(shí)間差大于一時(shí)間閾值。本實(shí)施例中,所述基于寫時(shí)拷貝技術(shù)的歷史版本增量備份方法包括歷史版本創(chuàng)建過程(如圖4A)、歷史版本備份過程(如圖4B)和歷史版本恢復(fù)過程(如圖4C)。如圖4A所示,所述歷史版本創(chuàng)建過程包括首先,生成一新文件,并為所述新文件分配一片數(shù)據(jù)存儲(chǔ)區(qū)域,該數(shù)據(jù)存儲(chǔ)區(qū)域可以支持動(dòng)態(tài)增長(zhǎng);然后,拷貝該文件的元數(shù)據(jù)到該數(shù)據(jù)存儲(chǔ)區(qū)域中,完成歷史版本的創(chuàng)建,其中,該文件的元數(shù)據(jù)的內(nèi)容包括文件名、修改時(shí)間、文件大小、文件數(shù)據(jù)塊起始位置、文件數(shù)據(jù)塊分區(qū)表。歷史版本創(chuàng)建過程中在拷貝該文件的元數(shù)據(jù)到該數(shù)據(jù)存儲(chǔ)區(qū)域中時(shí),不會(huì)拷貝文件的內(nèi)容數(shù)據(jù)到該數(shù)據(jù)存儲(chǔ)區(qū)域,文件的內(nèi)容數(shù)據(jù)的拷貝在歷史版本備份過程完成。如圖4B所示,所述歷史版本備份過程可采用文件增量算法完成,包括兩種情況1、當(dāng)通過文件增量算法獲知對(duì)文件內(nèi)容的修改是在新開辟的數(shù)據(jù)塊中添加數(shù)據(jù)時(shí),則記錄文件操作日志,并記錄文件元數(shù)據(jù)發(fā)生的變化;2、當(dāng)通過文件增量算法獲知對(duì)文件內(nèi)容的修改是在現(xiàn)有數(shù)據(jù)塊中發(fā)生的內(nèi)容變化時(shí),則需要把該數(shù)據(jù)塊的原始數(shù)據(jù)拷貝到所述歷史版本的數(shù)據(jù)存儲(chǔ)區(qū)域,并記錄文件操作日志和文件元數(shù)據(jù)的變化,此時(shí)該文件操作日志需要記錄發(fā)生內(nèi)容變化的現(xiàn)有數(shù)據(jù)塊的位置,以及對(duì)文件內(nèi)容修改的操作類型(包括文件內(nèi)容的刪除、編輯、添加)。其中,所述文件增量算法將新歷史版本文件對(duì)比上一歷史版本文件所發(fā)生變化的內(nèi)容進(jìn)行增量備份,包括將新歷史版本文件等分為N字節(jié)長(zhǎng)度的數(shù)據(jù)塊集合,并分別計(jì)算出所有數(shù)據(jù)塊的校驗(yàn)值集合,其中N為大于1的正整數(shù);
對(duì)于所述上一歷史版本文件,從第一個(gè)字節(jié)開始計(jì)算N字節(jié)的長(zhǎng)度數(shù)據(jù)塊的校驗(yàn)值;比較所述上一歷史版本文件的校驗(yàn)值和新歷史版本文件的校驗(yàn)值集合中的校驗(yàn)值,如果相等,則進(jìn)行所述上一歷史版本文件的數(shù)據(jù)塊和新歷史版本文件的數(shù)據(jù)塊的字符串匹配,若匹配,則差量文件中,即文件操作日志中,只記錄數(shù)據(jù)塊的位置,無需記錄數(shù)據(jù)塊內(nèi)容,在將文件恢復(fù)到所述上一歷史版本時(shí)直接執(zhí)行拷貝,同時(shí)將所述上一歷史版本文件向后滑動(dòng)N個(gè)字節(jié)的長(zhǎng)度繼續(xù)計(jì)算;如果不匹配,則在差量文件中,,即文件操作日志中,記錄不同的數(shù)據(jù)和位置,在將文件恢復(fù)到所述上一歷史版本時(shí)執(zhí)行插入操作,同時(shí)將所述上一歷史版本文件向后滑動(dòng)一個(gè)字節(jié)繼續(xù)計(jì)算;繼續(xù)執(zhí)行以上操作,直至所述上一歷史版本文件的所有數(shù)據(jù)塊均完成計(jì)算;也就是說,當(dāng)需要將文件恢復(fù)到所述上一歷史版本時(shí),新歷史版本文件將根據(jù)差量文件記錄的內(nèi)容生成所述歷史版本文件。所述歷史版本備份過程通過所述文件增量算法將使歷史版本備份的時(shí)間復(fù)雜度和空間復(fù)雜度降低,即備份歷史版本的時(shí)間與原始文件本身的大小無關(guān),并且歷史版本的大小和原始文件本身的大小也沒有關(guān)系。如圖4C所示,所述歷史版本恢復(fù)過程包括在收到歷史版本恢復(fù)請(qǐng)求時(shí),讀取所述文件操作日志,確定數(shù)據(jù)回滾的起始位置;讀取請(qǐng)求的歷史版本的原始數(shù)據(jù)內(nèi)容并將其拷貝回原始文件的數(shù)據(jù)塊中,完成歷史版本恢復(fù)操作。本實(shí)施例中,在刪除文件內(nèi)容的處理時(shí),為了能提供快速恢復(fù)誤刪除文件內(nèi)容的功能,文件內(nèi)容的刪除操作將不會(huì)真正執(zhí)行。文件內(nèi)容刪除時(shí)會(huì)記錄一個(gè)歷史版本,該歷史版本只包含一個(gè)指向原始文件地址的指針,保存一個(gè)刪除文件的文件操作日志,并為文件加入刪除標(biāo)記,若需要恢復(fù)刪除的文件內(nèi)容,只需要將所述刪除標(biāo)記去掉即可。例如,為文件加入刪除標(biāo)記的方法可以使用Chmod修改文件權(quán)限,比如將文件權(quán)限修改為000 ;將文件刪除標(biāo)記去掉的方法可以使用chmod恢復(fù)文件權(quán)限,比如將文件權(quán)限修改為755。綜上所述,通過監(jiān)控請(qǐng)求的文件操作類型,判斷用戶的文件操作是否符合網(wǎng)絡(luò)文件系統(tǒng)的歷史版本保存策略以決定是否保存歷史版本,對(duì)于用戶誤操作,如誤刪文件或錯(cuò)誤修改,可以通過歷史版本恢復(fù)到用戶希望的狀態(tài);在保存歷史版本的同時(shí)記錄文件操作日志,包括文件操作的時(shí)間、動(dòng)作,以方便用戶在歷史版本恢復(fù)時(shí)能夠選到合適的版本。顯然,本領(lǐng)域的技術(shù)人員可以對(duì)發(fā)明進(jìn)行各種改動(dòng)和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動(dòng)和變型在內(nèi)。
權(quán)利要求
1.一種具有版本控制的網(wǎng)絡(luò)文件系統(tǒng),其特征在于,包括 監(jiān)控模塊,用于監(jiān)控用戶對(duì)文件請(qǐng)求的文件操作;判斷模塊,用于根據(jù)所述用戶對(duì)文件請(qǐng)求的文件操作的類型判斷是否保存該文件的歷史版本;歷史版本保存模塊,用于根據(jù)所述判斷模塊的判斷結(jié)果進(jìn)行歷史版本的保存,若所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除、修改或重命名,則保存該文件的歷史版本;若所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除、修改或重命名類型以外的操作,則直接執(zhí)行所述文件操作請(qǐng)求;操作日志記錄模塊,用于在每次歷史版本保存時(shí)記錄文件操作日志以用于恢復(fù)歷史版本的文件操作;執(zhí)行文件操作模塊,用于執(zhí)行所述用戶對(duì)文件請(qǐng)求的文件操作。
2.如權(quán)利要求1所述的具有版本控制的網(wǎng)絡(luò)文件系統(tǒng),其特征在于,當(dāng)所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除時(shí),所述歷史版本保存模塊保存一個(gè)只包含指向原始文件地址的指針的歷史版本,并記錄一個(gè)刪除文件的文件操作日志,為文件加入刪除標(biāo)記,若需要恢復(fù)刪除的文件,將所述刪除標(biāo)記去掉。
3.如權(quán)利要求1所述的具有版本控制的網(wǎng)絡(luò)文件系統(tǒng),其特征在于,當(dāng)請(qǐng)所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件內(nèi)容的修改,且前后兩次修改文件的時(shí)間差大于一時(shí)間閾值時(shí),所述歷史版本保存模塊保存該文件的歷史版本。
4.如權(quán)利要求1或3所述的具有版本控制的網(wǎng)絡(luò)文件系統(tǒng),其特征在于,當(dāng)所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件內(nèi)容的修改,且前后兩次修改文件的內(nèi)容差大于一內(nèi)容閾值時(shí),所述歷史版本保存模塊保存該文件的歷史版本。
5.如權(quán)利要求1所述的具有版本控制的網(wǎng)絡(luò)文件系統(tǒng),其特征在于,所述文件操作日志包括用戶名、文件名、文件路徑、文件操作時(shí)間和文件操作類型。
6.一種應(yīng)用權(quán)利要求1所述的具有版本控制的網(wǎng)絡(luò)文件系統(tǒng)的方法,其特征在于,包括通過所述監(jiān)控模塊監(jiān)控用戶對(duì)文件請(qǐng)求的文件操作;所述判斷模塊根據(jù)所述用戶請(qǐng)求的文件操作的類型判斷是否保存該文件的歷史版本;若所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除、修改或重命名,則所述歷史版本保存模塊保存該文件的歷史版本,并在每次歷史版本保存時(shí)通過所述操作日志記錄模塊記錄文件操作日志;若所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除、修改或重命名類型以外的操作, 則直接通過所述執(zhí)行文件操作模塊執(zhí)行用戶對(duì)文件請(qǐng)求的文件操作。
7.如權(quán)利要求6所述的方法,其特征在于,當(dāng)所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件的刪除時(shí),所述歷史版本保存模塊保存一個(gè)只包含指向原始文件地址的指針的歷史版本,并記錄一個(gè)刪除文件的文件操作日志,為文件加入刪除標(biāo)記,若需要恢復(fù)刪除的文件, 將所述刪除標(biāo)記去掉。
8.如權(quán)利要求6所述的方法,其特征在于,當(dāng)所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件內(nèi)容的修改,且前后兩次修改文件的時(shí)間差大于一時(shí)間閾值時(shí),所述歷史版本保存模塊保存該文件的歷史版本。
9.如權(quán)利要求6或8所述的方法,其特征在于,當(dāng)所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件內(nèi)容的修改,且前后兩次修改文件的內(nèi)容差大于一內(nèi)容閾值時(shí),所述歷史版本保存模塊保存該文件的歷史版本。
10.如權(quán)利要求9所述的方法,其特征在于,當(dāng)所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件內(nèi)容的修改,且前后兩次修改文件的內(nèi)容差大于一內(nèi)容閾值時(shí),所述歷史版本保存模塊采用基于鎖機(jī)制的歷史版本保存方法保存該文件的歷史版本。
11.如權(quán)利要求10所述的方法,其特征在于,所述一種基于鎖機(jī)制的歷史版本保存方法包括將該文件設(shè)置為鎖定狀態(tài),此時(shí)拒絕任何對(duì)文件的修改操作;保存該文件的歷史版本;記錄文件操作日志并將該文件解鎖。
12.如權(quán)利要求9所述的方法,其特征在于,當(dāng)所述用戶對(duì)文件請(qǐng)求的文件操作為對(duì)文件內(nèi)容的修改,且前后兩次修改文件的內(nèi)容差大于一內(nèi)容閾值時(shí),所述歷史版本保存模塊采用基于寫時(shí)拷貝技術(shù)的歷史版本增量備份方法保存該文件的歷史版本。
13.如權(quán)利要求12所述的方法,其特征在于,所述基于寫時(shí)拷貝技術(shù)的歷史版本增量備份方法包括歷史版本創(chuàng)建過程、歷史版本備份過程和歷史版本恢復(fù)過程。
14.如權(quán)利要求13所述的方法,其特征在于,所述歷史版本創(chuàng)建過程包括生成一新文件并為所述新文件分配一片數(shù)據(jù)存儲(chǔ)區(qū)域;將原文件的元數(shù)據(jù)拷貝到該數(shù)據(jù)存儲(chǔ)區(qū)域中,完成歷史版本的創(chuàng)建。
15.如權(quán)利要求14所述的方法,其特征在于,所述元數(shù)據(jù)的內(nèi)容包括文件名、修改時(shí)間、文件大小、文件數(shù)據(jù)塊起始位置、文件數(shù)據(jù)塊分區(qū)表。
16.如權(quán)利要求13所述的方法,其特征在于,所述歷史版本備份過程采用文件增量算法完成,包括當(dāng)通過文件增量算法獲知對(duì)文件內(nèi)容的修改是在新開辟的數(shù)據(jù)塊中添加數(shù)據(jù)時(shí),則需要記錄文件操作日志,并記錄文件元數(shù)據(jù)發(fā)生的變化;當(dāng)通過文件增量算法獲知對(duì)文件內(nèi)容的修改是在現(xiàn)有數(shù)據(jù)塊中發(fā)生的內(nèi)容變化時(shí),則需要把該數(shù)據(jù)塊的原始數(shù)據(jù)拷貝到所述歷史版本的數(shù)據(jù)存儲(chǔ)區(qū)域,并記錄文件操作日志和文件元數(shù)據(jù)的變化。
17.如權(quán)利要求16所述的方法,其特征在于,當(dāng)通過文件增量算法獲知對(duì)文件內(nèi)容的修改是在現(xiàn)有數(shù)據(jù)塊中發(fā)生的內(nèi)容變化時(shí),所述文件操作日志中,記錄發(fā)生所述內(nèi)容變化的現(xiàn)有數(shù)據(jù)塊的位置以及產(chǎn)生所述內(nèi)容變化的刪除、編輯或添加的修改操作類型。
18.如權(quán)利要求16所述的方法,其特征在于,所述文件增量算法將新歷史版本文件對(duì)比上一歷史版本文件所發(fā)生變化的內(nèi)容進(jìn)行增量備份,包括將新歷史版本文件等分為N字節(jié)長(zhǎng)度的數(shù)據(jù)塊集合,并分別計(jì)算出所有數(shù)據(jù)塊的校驗(yàn)值集合,其中N為大于1的正整數(shù);對(duì)于上一歷史版本文件,從第一個(gè)字節(jié)開始計(jì)算N字節(jié)的長(zhǎng)度數(shù)據(jù)塊的校驗(yàn)值;比較上一歷史版本文件的校驗(yàn)值和新歷史版本文件的校驗(yàn)值集合中的校驗(yàn)值,如果相等,則進(jìn)行上一歷史版本文件的數(shù)據(jù)塊和新歷史版本文件的數(shù)據(jù)塊的字符串匹配,若匹配,則文件操作日志中只需要記錄數(shù)據(jù)塊的位置,無需記錄數(shù)據(jù)塊內(nèi)容,在歷史版本恢復(fù)時(shí)執(zhí)行拷貝即可,同時(shí)將上一歷史版本文件向后滑動(dòng)N個(gè)字節(jié)的長(zhǎng)度繼續(xù)計(jì)算;如果不匹配,則在文件操作日志中記錄不同的數(shù)據(jù)和位置,在歷史版本恢復(fù)時(shí)執(zhí)行插入操作即可,同時(shí)將上一歷史版本文件向后滑動(dòng)一個(gè)字節(jié)繼續(xù)計(jì)算;繼續(xù)執(zhí)行以上操作,直至上一歷史版本文件的所有數(shù)據(jù)塊均完成計(jì)算;歷史版本恢復(fù)時(shí),新歷史版本文件將根據(jù)差量文件記錄的內(nèi)容生成上一歷史版本文件。
19.如權(quán)利要求13所述的方法,其特征在于,所述歷史版本恢復(fù)過程包括 在收到歷史版本恢復(fù)請(qǐng)求時(shí),讀取所述文件操作日志,確定數(shù)據(jù)回滾的起始位置;讀取請(qǐng)求的歷史版本的原始數(shù)據(jù)內(nèi)容并將其拷貝回原始文件的數(shù)據(jù)塊中,完成歷史版本恢復(fù)操作。
20.如權(quán)利要求16所述的方法,其特征在于,記錄的文件操作日志包括用戶名、文件名、文件路徑、文件操作時(shí)間和文件操作類型。
全文摘要
本發(fā)明提供一種具有版本控制的網(wǎng)絡(luò)文件系統(tǒng)及方法,通過監(jiān)控請(qǐng)求的文件操作類型,判斷用戶的文件操作是否符合網(wǎng)絡(luò)文件系統(tǒng)的歷史版本保存策略以決定是否保存歷史版本,對(duì)于用戶誤操作,如誤刪文件或錯(cuò)誤修改,可以通過歷史版本恢復(fù)到用戶希望的狀態(tài);在保存歷史版本的同時(shí)記錄文件操作日志,包括文件操作的時(shí)間、動(dòng)作,以方便用戶在歷史版本恢復(fù)時(shí)能夠選到合適的版本。
文檔編號(hào)G06F17/30GK102339321SQ20111035334
公開日2012年2月1日 申請(qǐng)日期2011年11月9日 優(yōu)先權(quán)日2011年11月9日
發(fā)明者段雪濤, 鄧吉生 申請(qǐng)人:上海盛霄云計(jì)算技術(shù)有限公司