国产欧美日韩第一页|日本一二三不卡视频|在线精品小视频,亚洲第一免费播放区,metcn人体亚洲一区,亚洲精品午夜视频

幫助中心 >  技術(shù)知識(shí)庫 >  數(shù)據(jù)庫 >  相關(guān)技術(shù)支持 >  硬盤寫到一半時(shí)斷電,文件系統(tǒng)里會(huì)發(fā)什么?

硬盤寫到一半時(shí)斷電,文件系統(tǒng)里會(huì)發(fā)什么?

2017-03-17 21:36:37 10000

1. 你無法確定你試圖向設(shè)備驅(qū)動(dòng)發(fā)送的寫指令是否成功?驅(qū)動(dòng)程序本身一般都有緩存;

2. 即使寫指令正常返回,你也無法確定設(shè)備實(shí)際上是否寫成功,因?yàn)樵O(shè)備本身可能也有緩存。目前沒有設(shè)備能保證寫指令返回的情況下,所有數(shù)據(jù)一定成功的保存在介質(zhì)上(但部分廠商能保證少量數(shù)據(jù)一定能成功寫入),對(duì)存儲(chǔ)設(shè)備的flush操作并非絕對(duì)可靠;

3. 哪些成功哪些失敗可能是亂序的,換句話說,如果先發(fā)送寫請(qǐng)求A,再發(fā)送寫請(qǐng)求B,并且都成功返回,掉電時(shí)請(qǐng)求A可能丟失,但B成功(NCQ功能);

4. 機(jī)械式磁盤可能會(huì)出現(xiàn)丟失半截?cái)?shù)據(jù)的情況(比如,一個(gè)512字節(jié)扇區(qū)只寫入了100字節(jié),也就是題主說的bit級(jí)錯(cuò)誤),但這種一般都會(huì)通過校驗(yàn)位檢測(cè)出來。

因?yàn)橛幸陨线@么多的限制,實(shí)際上文件系統(tǒng)一般沒辦法保證數(shù)據(jù)一定不丟失,甚至哪些丟失哪些能恢復(fù)也是不確定的。

一般來說,文件系統(tǒng)有以下的幾種策略:

1). 完全不管錯(cuò)誤的事情,錯(cuò)了就錯(cuò)了;

2). 打標(biāo)記位的方式,如果懷疑有錯(cuò),通過磁盤檢測(cè)功能恢復(fù);

3). 在設(shè)計(jì)上保證文件系統(tǒng)結(jié)構(gòu)上可恢復(fù),但不保?用戶數(shù)據(jù)可恢復(fù);

4). 能在用戶數(shù)據(jù)層面上保證數(shù)據(jù)的絕對(duì)正確。

第一種和第二種策略現(xiàn)在比較少見,FAT文件系統(tǒng)算是屬于這類;主流文件系統(tǒng)基本上都能保證第三種,比如NTFS之類的;第四種比較難,一般都要配合存儲(chǔ)驅(qū)動(dòng)一起,多見于Flash介質(zhì)的專屬文件系統(tǒng)。

保證數(shù)據(jù)不損壞,具體的方案一般有:

方案1Copy-On-Write,寫數(shù)據(jù)的時(shí)候不在原來的位置寫,而是先讀一份,然后寫到另外一個(gè)位置,當(dāng)確認(rèn)寫成功時(shí),把文件系統(tǒng)的指針指向新的位置。如下圖:

    blob.png

實(shí)際應(yīng)用中,比這個(gè)情況復(fù)雜,因?yàn)?/span>Data2寫入的過程中,File1本身的一些信息(修改時(shí)間等)也發(fā)生了變化,所以CopyOnWrite產(chǎn)生的影響不止這一個(gè)塊,而是很多。

方案2:日志(Journal)技術(shù)。使用日志記錄meta-data甚至是數(shù)據(jù)塊的變化情況(NTFS就是這種策略),一旦出現(xiàn)掉電情況,在日志中反推到一個(gè)正確的狀態(tài)上,就可以保證meta-data不損壞。

常見的方案就這兩種,當(dāng)然還有別的更復(fù)雜的技術(shù),比如Comparison of file systems,但不管用什么方案,本質(zhì)上都是以犧牲性能為代價(jià)換取結(jié)構(gòu)上的穩(wěn)定。

那么文件系統(tǒng)如何保證數(shù)據(jù)的正確性?如果是指文件的數(shù)據(jù)部分,是無法保證的,因?yàn)槲募到y(tǒng)無法確定數(shù)據(jù)到底寫沒寫進(jìn)去,絕大多數(shù)文件系統(tǒng)?能保證自身結(jié)構(gòu)是正確的,但這個(gè)正確可能是回滾之后的狀態(tài),具體回滾多少內(nèi)容,文件系統(tǒng)自己也不能保證。

這事說起來挺復(fù)雜的,不同文件系統(tǒng),不同設(shè)備,不同介質(zhì),效果都是有區(qū)別的。


提交成功!非常感謝您的反饋,我們會(huì)繼續(xù)努力做到更好!

這條文檔是否有幫助解決問題?

非常抱歉未能幫助到您。為了給您提供更好的服務(wù),我們很需要您進(jìn)一步的反饋信息:

在文檔使用中是否遇到以下問題: