手机看片精品高清国产日韩,色先锋资源综合网,国产哺乳奶水91在线播放,乱伦小说亚洲色图欧洲电影

幫助中心 >  技術知識庫 >  數據庫 >  相關技術支持 >  硬盤寫到一半時斷電,文件系統里會發什么?

硬盤寫到一半時斷電,文件系統里會發什么?

2017-03-17 21:36:37 9096

1. 你無法確定你試圖向設備驅動發送的寫指令是否成功?驅動程序本身一般都有緩存;

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

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

4. 機械式磁盤可能會出現丟失半截數據的情況(比如,一個512字節扇區只寫入了100字節,也就是題主說的bit級錯誤),但這種一般都會通過校驗位檢測出來。

因為有以上這么多的限制,實際上文件系統一般沒辦法保證數據一定不丟失,甚至哪些丟失哪些能恢復也是不確定的。

一般來說,文件系統有以下的幾種策略:

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

2). 打標記位的方式,如果懷疑有錯,通過磁盤檢測功能恢復;

3). 在設計上保證文件系統結構上可恢復,但不保?用戶數據可恢復;

4). 能在用戶數據層面上保證數據的絕對正確。

第一種和第二種策略現在比較少見,FAT文件系統算是屬于這類;主流文件系統基本上都能保證第三種,比如NTFS之類的;第四種比較難,一般都要配合存儲驅動一起,多見于Flash介質的專屬文件系統。

保證數據不損壞,具體的方案一般有:

方案1Copy-On-Write,寫數據的時候不在原來的位置寫,而是先讀一份,然后寫到另外一個位置,當確認寫成功時,把文件系統的指針指向新的位置。如下圖:

    blob.png

實際應用中,比這個情況復雜,因為Data2寫入的過程中,File1本身的一些信息(修改時間等)也發生了變化,所以CopyOnWrite產生的影響不止這一個塊,而是很多。

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

常見的方案就這兩種,當然還有別的更復雜的技術,比如Comparison of file systems,但不管用什么方案,本質上都是以犧牲性能為代價換取結構上的穩定。

那么文件系統如何保證數據的正確性?如果是指文件的數據部分,是無法保證的,因為文件系統無法確定數據到底寫沒寫進去,絕大多數文件系統?能保證自身結構是正確的,但這個正確可能是回滾之后的狀態,具體回滾多少內容,文件系統自己也不能保證。

這事說起來挺復雜的,不同文件系統,不同設備,不同介質,效果都是有區別的。


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

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

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

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