日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

文件系统类型是ntfs无法确定卷版本和状态_硬盘写到一半时断电,文件系统里会发什么?...

發(fā)布時間:2023/11/27 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 文件系统类型是ntfs无法确定卷版本和状态_硬盘写到一半时断电,文件系统里会发什么?... 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

斷電時文件系統(tǒng)發(fā)生了什么?硬盤又發(fā)生了什么?下一次開機時寫到一半的文件在系統(tǒng)層面還在嗎?在底層還在嗎?

更進一步的, 文件系統(tǒng)如何保證事務(wù)性, 會不會存在某種極端情況導(dǎo)致例如最后幾個bit還沒寫完, 文件系統(tǒng)卻認(rèn)為它成功了的情況?

回答不限任何文件系統(tǒng),謝謝!

下面是「北極」的回復(fù)分享

斷電的一瞬間,很多事情是無法確定的:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

下面是「馬濤」的回答分享

文件系統(tǒng)的設(shè)計一般是性能和數(shù)據(jù)完整性的妥協(xié),如果你想要最高完整性,那么性能會差一些,如果你想要最高性能,那么數(shù)據(jù)完整性會差一些,僅此而已。當(dāng)然這些都是針對數(shù)據(jù)而言的,對于文件系統(tǒng)自身的元數(shù)據(jù),一般設(shè)計者為了自身數(shù)據(jù)完整性的考慮都會有日志系統(tǒng)(比如ext4使用jbd2),從而盡量保證文件系統(tǒng)在斷電時沒有問題或者問題很少(需要使用fsck來解決),但是用戶數(shù)據(jù)是否完備是由用戶選擇和配置的,而文件系統(tǒng)會根據(jù)不同配置選擇不同的策略。

我們以Linux最通用的ext4為例,他有三種模式供用戶選擇data=writeback/ordered/journal,對應(yīng)的是數(shù)據(jù)落盤的三種方式,writeback是指元數(shù)據(jù)更新的時候數(shù)據(jù)不考慮是否落盤,所以掉電以后可能會看到一些亂七八糟的數(shù)據(jù),ordered的意思是元數(shù)據(jù)更新在數(shù)據(jù)更新之后(如果你沒有更改元數(shù)據(jù)那就沒有辦法保證數(shù)據(jù)了),還有一種是journal意思是數(shù)據(jù)也先寫journal再寫文件(double write),這種數(shù)據(jù)安全性最高,當(dāng)然性能也最差。詳細(xì)的介紹可以參加mount(8)。

說完文件系統(tǒng),我們再說硬盤,硬盤在文件系統(tǒng)下面,所以文件系統(tǒng)是重度依賴硬盤來實現(xiàn)數(shù)據(jù)完整性的,而硬盤也提供了一些命令來保障文件系統(tǒng)數(shù)據(jù)完整性的語義。比如硬盤會提供flush命令,保證只要上層文件系統(tǒng)調(diào)用了這個命令,那么文件系統(tǒng)之前寫到硬盤里面的內(nèi)容必須落盤了(一般的硬盤有內(nèi)存cache,為了提高寫入性能會緩存一部分?jǐn)?shù)據(jù),flush會命令硬盤將cache內(nèi)容落盤。當(dāng)然如果硬盤如果有電容可以保證cache即使掉電也會落盤,那么他也可以欺騙上層的文件系統(tǒng) :) ),這樣文件系統(tǒng)在寫入一些關(guān)鍵數(shù)據(jù)以后必須調(diào)用flush,在得到硬盤的flush反饋以后再進行后面的工作。當(dāng)然現(xiàn)代硬盤還有一些FUA(Force Unit Access)之類的操作,這些是為了加速某類磁盤落盤的操作,本質(zhì)上即使硬盤不提供文件系統(tǒng)可以改成write+flush來實現(xiàn)(只是性能差一些),如果感興趣大家可以自行g(shù)oogle之。

說完底層,還有一層要說一下,就是你的應(yīng)用是怎么寫文件和硬盤的,如果是buffer write(應(yīng)用只寫到操作系統(tǒng)的內(nèi)存,由操作系統(tǒng)延遲回寫到硬盤),那么很大可能你在掉電之前一段時間寫入的數(shù)據(jù)都會不見了(操作系統(tǒng)還沒有回寫),如果應(yīng)用是direct IO(應(yīng)用繞過操作系統(tǒng)內(nèi)存,直接寫硬盤),那么可能只有掉電時刻正在寫入的數(shù)據(jù)不見了,當(dāng)然這里可能還涉及到direct IO的語義以及不同文件系統(tǒng)的具體實現(xiàn),和文件系統(tǒng)相關(guān),就需要具體問題具體分析了。

關(guān)注→翻滾吧工程師? 搜索:zbomPV每天更新小技巧

覺得內(nèi)容不錯的話,點個在看唄

總結(jié)

以上是生活随笔為你收集整理的文件系统类型是ntfs无法确定卷版本和状态_硬盘写到一半时断电,文件系统里会发什么?...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。