詳細(xì)描述NTFS文件系統(tǒng)的可恢復(fù)性

字號:

NTFS是隨著Windows NT操作系統(tǒng)而產(chǎn)生的,全稱為“NT File System”,中文意為NT文件系統(tǒng),如今已是windows類操作系統(tǒng)中的主力分區(qū)格式了。它的優(yōu)點是安全性和穩(wěn)定性極其出色,在使用中不易產(chǎn)生文件碎片,NTFS分區(qū)對用戶權(quán)限作出了非常嚴(yán)格的限制,每個用戶都只能按著系統(tǒng)賦予的權(quán)限進(jìn)行操作,任何試圖越權(quán)的操作都將被系統(tǒng)禁止,同時它還提供了容錯結(jié)構(gòu)日志,可以將用戶的操作全部記錄下來,從而保護(hù)了系統(tǒng)的安全。本文主要論述的就是NTFS在系統(tǒng)崩潰或磁盤出現(xiàn)故障后如何安全的恢復(fù)文件系統(tǒng)。
    NTFS是一個具備錯誤預(yù)警的文件系統(tǒng)。由于NTFS對關(guān)鍵文件系統(tǒng)的系統(tǒng)信息采用了冗余存儲,故而當(dāng)磁盤上的某個扇區(qū)損壞時,NTFS仍可以訪問卷上的關(guān)鍵數(shù)據(jù)。NTFS分區(qū)的最開始的16個扇區(qū)是分區(qū)引導(dǎo)扇區(qū),用以保存分區(qū)引導(dǎo)代碼,接下來是主文件表(MFT),如果MFT所在的磁盤扇區(qū)出現(xiàn)損壞, NTFS文件系統(tǒng)會將MFT轉(zhuǎn)移到到硬盤的其他扇區(qū),這樣就保證了NTFS文件系統(tǒng)和Windows操作系統(tǒng)的正常運行。比之先前的FAT16和 FAT32文件系統(tǒng)的FAT(文件分配表),F(xiàn)AT只能固定在分區(qū)引導(dǎo)扇區(qū)的后面,一旦該扇區(qū),整個文件系統(tǒng)就會癱瘓,NTFS文件系統(tǒng)顯然要先進(jìn)的多了。不過這種移動MFT的做法卻也并非十全十美,如果分區(qū)引導(dǎo)代碼中指向MFT的部分出現(xiàn)錯誤,那么NTFS文件系統(tǒng)便會不知道到哪里尋找MFT ,從而會報告“磁盤沒有格式化”這樣的錯誤信息。為了避免這樣的問題發(fā)生,分區(qū)引導(dǎo)代碼中會包含一段校驗程序,專門負(fù)責(zé)偵錯。
    NTFS文件系統(tǒng)通過基于事務(wù)處理模式的日志記錄技術(shù)(transaction logging and recovery techniques),成功保證了NTFS卷的一致性,實現(xiàn)了文件系統(tǒng)的可恢復(fù)性。在 FAT 或 HPFS 上執(zhí)行 CHKDSK 時,系統(tǒng)會檢查目錄、分配和文件表中指針的一致性;但是在 NTFS 下,系統(tǒng)會維護(hù)針對這些組件的事務(wù)日志,因此,CHKDSK 只需將事務(wù)回滾到上一個提交點就可以恢復(fù)文件系統(tǒng)中的一致性。事務(wù)日志方法需要的系統(tǒng)開銷是很小的。NTFS并不是直接在日志文件中存取記錄,而是通過 LFS來讀寫。LFS提供了包括打開,寫入,向前,向后,更新等操作來幫助NTFS處理日志文件。
    我們把每一個具體的對NTFS卷文件的I/O操作看作一個事務(wù),每個事務(wù)都是一個原子操作。這樣,任何復(fù)雜的操作都可以分解成很多個事務(wù)。系統(tǒng)面對的就是許許多多的不同的事務(wù)。當(dāng)一個事務(wù)開始后,它要么被順利的完成,要么當(dāng)遇到某些意外而出錯時能回滾到上一個提交點,這時候NTFS卷處于該事務(wù)開始前的狀態(tài)。很多原因都可以導(dǎo)致事務(wù)操作失敗,如磁盤壞道、內(nèi)存不足、設(shè)備連接錯誤等等。
    為了確保每個事務(wù)都能順利的完成或出錯回滾到上一狀態(tài),對于每個事務(wù)NTFS文件系統(tǒng)都會執(zhí)行以下步驟:
    (1) 把此次事務(wù)中的子操作記錄到已緩存在內(nèi)存的日志文件里;
    (2) 把實際的子操作數(shù)據(jù)記錄到內(nèi)存中;
    (3) 在緩存于內(nèi)存的日志文件里把此次事務(wù)標(biāo)記為已提交;
    (4) 把日志寫入磁盤;
    (5) 把數(shù)據(jù)寫入磁盤。
    事實上,對于步驟 (4) 和步驟 (5) ,NTFS并不是即時寫入磁盤的,而是采用了延遲寫(lazy-write)技術(shù),選擇在之后一個適當(dāng)?shù)臅r機(jī)用方式把很多數(shù)據(jù)批處理到磁盤上。使用延遲寫技術(shù)大大減少了磁盤操作的頻率,從而極大地改善了系統(tǒng)的性能,但是在系統(tǒng)崩潰時有可能導(dǎo)致磁盤的不一致性,有一定風(fēng)險。在我們自己編寫的應(yīng)用程序中可以通過設(shè)定FILE_FLAG_WRITE_THROUGH讓系統(tǒng)不通過緩存而講數(shù)據(jù)直接寫入磁盤中——這時候系統(tǒng)其實仍然會緩存寫操作只是沒有延遲寫入磁盤而已。
    NTFS文件系統(tǒng)保證了緩存的日志先于事務(wù)中更改的數(shù)據(jù)存入磁盤。當(dāng)文件系統(tǒng)更新緩存后,NTFS通過記錄在緩存的日志里被標(biāo)記為已完成的事務(wù)來提交這些事務(wù)。當(dāng)緩存的日志刷新到磁盤上時,所有標(biāo)記為提交的事務(wù)都要保證已經(jīng)被完成了,即使系統(tǒng)可能會在把這些事務(wù)對數(shù)據(jù)的實際變動都存入磁盤之前崩潰掉。
    當(dāng)系統(tǒng)發(fā)生錯誤時,NTFS文件系統(tǒng)的日志中有足夠的信息去完成或中斷任何出問題的事務(wù)。執(zhí)行恢復(fù)操作的時候,NTFS文件系統(tǒng)重做日志里每一個標(biāo)記為提交的事務(wù);然后文件系統(tǒng)在日志中查找那些在上一次系統(tǒng)崩潰時沒有提交的事務(wù),把日志中這些沒有提交的事務(wù)的子操作統(tǒng)統(tǒng)撤銷掉。因為NTFS文件系統(tǒng)在任何數(shù)據(jù)變動寫入硬盤之前已經(jīng)把這些變動的日志先寫入了硬盤,所以NTFS擁有那些在恢復(fù)過程中需要回滾的子操作的所有的有效信息。
    但是實際上,NTFS用這種事務(wù)日志技術(shù)來恢復(fù)數(shù)據(jù)也并不是那么保險的。而且,因為系統(tǒng)是通過日志來恢復(fù)的,恢復(fù)的過程對文件系統(tǒng)的所有數(shù)據(jù)都有可能造成影響——除非用戶在存取數(shù)據(jù)的時候使用了FILE_FLAG_WRITE_THROUGH標(biāo)志。如果用戶程序沒有使用 FILE_FLAG_WRITE_THROUGH存取數(shù)據(jù),那么在系統(tǒng)崩潰后用戶數(shù)據(jù)很有可能會丟失。有可能系統(tǒng)只恢復(fù)出很陳舊的數(shù)據(jù),或者恢復(fù)出不可意料的錯誤數(shù)據(jù),或者無法恢復(fù)任何數(shù)據(jù)。
    硬盤故障的修復(fù)
    NTFS文件系統(tǒng)利用cluster remapping技術(shù)來減小磁盤的壞扇區(qū)對NTFS卷的影響。NTFS可以對硬盤上的邏輯錯誤和物理錯誤進(jìn)行自動偵測和修復(fù),但在FAT16和 FAT32時代,我們需要借助 Scandisk這個程序來標(biāo)記磁盤上的壞扇區(qū),但當(dāng)發(fā)現(xiàn)錯誤時,數(shù)據(jù)往往已經(jīng)被寫在了壞的扇區(qū)上了,損失已經(jīng)造成。
    NTFS 文件系統(tǒng)則不然,每次讀寫時,它都會檢查扇區(qū)正確與否。當(dāng)讀取時發(fā)現(xiàn)錯誤,NTFS會報告這個錯誤;當(dāng)向磁盤寫文件時發(fā)現(xiàn)錯誤, NTFS將會十分智能地?fù)Q一個完好位置存儲數(shù)據(jù),操作不會受到任何影響。在這兩種情況下,NTFS都會在壞扇區(qū)上作標(biāo)記,以防今后被使用。這種工作模式可以使磁盤錯誤可以較早地被發(fā)現(xiàn),避免災(zāi)難性的事故發(fā)生。
    在 FAT 或 HPFS 下,只要位于文件系統(tǒng)的特殊體中的一個扇區(qū)失效,簡單扇區(qū)失效(single sector failure)就會發(fā)生。 NTFS 在兩方面阻止這種情況的發(fā)生:第一,不在磁盤上使用特殊數(shù)據(jù)體且跟蹤并保護(hù)磁盤上的所有對象。第二,在 NTFS 下,會保存有多份(數(shù)量是由卷的大小決定的)主文件表。
    小結(jié):
    在系統(tǒng)的可靠性與可恢復(fù)性方面,NTFS文件系統(tǒng)比以往的FAT32文件系統(tǒng)體現(xiàn)了極大的優(yōu)勢。自從Windows2000開始,微軟開始推薦大家使用 NTFS的磁盤格式,其后推出的XP更是要配合這種磁盤格式才能發(fā)揮其的性能優(yōu)勢。而且實際上隨著海量硬盤的發(fā)展,使用NTFS的分區(qū)格式將越來越必要;在新一代的windows系統(tǒng)中,F(xiàn)AT系統(tǒng)也勢必會被NTFS逐漸取代。NTFS的安全性、可靠性與高效性即使與ext3、reiserfs等優(yōu)秀文件系統(tǒng)相比也毫不遜色,相信如果將來微軟能開放更多NTFS技術(shù)細(xì)節(jié)的話,NTFS必將得到更廣泛的應(yīng)用,必將在文件系統(tǒng)世界里大放異彩。