自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

警惕文件系統(tǒng)讀寫陷阱

運維 系統(tǒng)運維
讀寫性能永遠(yuǎn)是文件系統(tǒng)的最重要方面,是眾多文件系統(tǒng)存在的原因所在。但是一些基本的讀寫保證卻是文件系統(tǒng)無法做到的,如原子性寫,斷電數(shù)據(jù)保護,斷電數(shù)據(jù)跨界,增量寫保護等等。本文主要從這些角度來深入對文件讀寫的討論,大家千萬不要誤入了文件系統(tǒng)讀寫陷阱。

對文件讀寫的支持一般由操作系統(tǒng)提供的統(tǒng)一接口,而操作系統(tǒng)抽象接口由文件系統(tǒng)實現(xiàn)具體操作。文件系統(tǒng)除了提供基本的讀寫服務(wù),還需要對權(quán)限控制,元數(shù)據(jù)訪問,基本的錯誤恢復(fù)進行保證。而讀寫性能永遠(yuǎn)是文件系統(tǒng)的最重要方面,是眾多文件系統(tǒng)存在的原因所在。但是一些基本的讀寫保證卻是文件系統(tǒng)無法做到的,如原子性寫,斷電數(shù)據(jù)保護,斷電數(shù)據(jù)跨界,增量寫保護等等。本文主要從這些角度來深入對文件讀寫的討論。

原子性寫入

一般的硬盤最小的讀寫單位是扇區(qū)(Sector),一般為512字節(jié),在閃存上(Flash Memory),最小的讀單位要遠(yuǎn)小于最小寫單位。因此,首先讀寫一個硬盤上的幾個字節(jié)都會獲得一個扇區(qū)大小的數(shù)據(jù),扇區(qū)大小也是影響文件系統(tǒng)的讀寫的一個因素。另一方面,原子性寫入是一個需要考慮的問題,既然最小寫單位是一個扇區(qū),那么當(dāng)寫入一個文件一個扇區(qū)大小的數(shù)據(jù)時,是否保證一定會寫入一個扇區(qū)大小數(shù)據(jù)成功?如果在寫入一個扇區(qū)一半的時候斷電,顯然寫入就失敗了,硬盤是否保證斷電后仍然完成剩余寫入是原子寫的保證,這通常被現(xiàn)代硬盤驅(qū)動通過自身的電源支持,一般來說,現(xiàn)代硬盤自身的電源足夠完成斷電后一個扇區(qū)的寫入操作以此來保證原子寫。

措施:當(dāng)硬件不保證原子性寫入時,通常需要應(yīng)用層采取一定手段來保證??梢圆捎脙啥问教峤坏姆绞絹硗瓿?,應(yīng)用層自身在寫入文件時在文件首部保存原時間和修改時間,然后寫入數(shù)據(jù)和修改“修改時間”并flush到硬盤上,當(dāng)成功寫入后,再次改變文件原時間并并flush。這個可以保證如果在寫入失敗時,應(yīng)用層可以得知文件錯誤并采取一定措施挽回,比如回滾機制。

增量寫保證

增量寫指的是當(dāng)需要append數(shù)據(jù)到一個文件或者創(chuàng)建一個新文件時,當(dāng)調(diào)用操作系統(tǒng)提供的write操作進行時,通常是寫入操作系統(tǒng)提供的寫緩存中,由操作系統(tǒng)決定何時寫入到硬盤上。這時,一般的程序員都知道需要flush()或者fsync()來強制刷新到硬盤上。通常來說操作系統(tǒng)會先需要擴大文件大小再寫入數(shù)據(jù)。這時,如果在擴大文件大小以后寫入數(shù)據(jù)時斷電,這時填充文件增量空間的數(shù)據(jù)可能是“垃圾”數(shù)據(jù),當(dāng)重新啟動程序時可能會得到一個已經(jīng)更新文件大小的充滿“垃圾”數(shù)據(jù)的文件。部分系統(tǒng)可能會實現(xiàn)先寫入數(shù)據(jù)再擴大文件大小這時就保證了“垃圾”數(shù)據(jù)不會出現(xiàn)。

措施:當(dāng)系統(tǒng)不支持增量寫保證時,應(yīng)用層保存一個文件大小,然后先寫入數(shù)據(jù)并成功后,再修改文件大小來保證應(yīng)用層能得知增量寫是否成功并采取回滾措施。

安全覆蓋寫

指的是當(dāng)一個應(yīng)用向一個文件的指定地址范圍內(nèi)寫入數(shù)據(jù)時,不管是系統(tǒng)崩潰還是斷電都不會導(dǎo)致超出這個范圍的數(shù)據(jù)改變。也就是說,即使斷電和崩潰時,可能發(fā)生錯誤的只能是這個范圍內(nèi)的數(shù)據(jù)??紤]以下情景,當(dāng)我們向一個文件的頭兩個字節(jié)覆蓋寫數(shù)據(jù)時,但是操作系統(tǒng)會向硬盤寫入一個最小寫單位的數(shù)據(jù),這時如果發(fā)生斷電,當(dāng)重啟后,文件系統(tǒng)的錯誤檢測系統(tǒng)可能會“自作聰明”的檢測到意外事故,然后讀出這個扇區(qū)并置零返回。

措施:每次寫入文件時使用一個最小寫單位的數(shù)據(jù)寫入。

小結(jié)

大多數(shù)目前實現(xiàn)和硬件自身電影支持是可以保證上述陷阱不會發(fā)生,但是如果想要打造一個健壯的、多平臺的軟件時,這些讀寫陷阱是需要考慮。

責(zé)任編輯:黃丹 來源: wzxue.com
相關(guān)推薦

2012-06-15 09:45:29

imo即時通訊

2020-03-31 15:44:03

戴爾

2015-11-11 14:34:28

偷跑流量手機病毒

2020-07-22 14:53:06

Linux系統(tǒng)虛擬文件

2011-01-13 14:10:30

Linux文件系統(tǒng)

2016-01-11 10:56:42

BYOD自帶設(shè)備

2018-08-24 10:10:25

Linux文件系統(tǒng)技術(shù)

2019-09-20 10:04:45

Linux系統(tǒng)虛擬文件

2010-01-28 10:27:55

2021-05-31 07:50:59

Linux文件系統(tǒng)

2013-05-27 14:46:06

文件系統(tǒng)分布式文件系統(tǒng)

2010-05-25 10:44:42

畢業(yè)生求職陷阱

2021-03-08 11:17:44

區(qū)塊鏈比特幣安全

2021-06-06 16:55:22

Linux文件系統(tǒng)

2021-04-12 05:44:44

Linux文件系統(tǒng)

2012-09-12 14:40:19

Lustre文件系統(tǒng)

2021-05-31 06:10:14

Btrfs文件系統(tǒng)Linux

2010-04-29 10:11:17

Unix系統(tǒng)

2010-04-30 15:51:48

Unix系統(tǒng)

2011-03-23 14:00:44

點贊
收藏

51CTO技術(shù)棧公眾號