qnx支援多種檔案系統。多數檔案系統都是掛在指定路徑下的資源管理器。qnx的檔案系統有如下特點:
・檔案系統能夠動態啟動和終了
・多個檔案系統可能同時執行
・提供給程式乙個與配置和檔案系統數無關的、統一的路徑空間和介面
・乙個點上的檔案系統對於其他點時透明的?
一、簡介
1、filesystem的種類
・image:乙個特殊的檔案系統,在image中提供各種模組。procnto包含了乙個image檔案系統和乙個ram檔案系統。
・block:操作塊裝置的檔案系統,如硬碟、cd-rom等。這包括qnx4,dos,cd-rom檔案系統。
・flash:操作flash memory裝置上的字元裝置而設計的nonblock-oriented檔案系統。nor裝置用ffs3檔案系統、nand裝置用etfs。
・network:通過網路提供的遠端檔案系統。包括nfs和cifs(smb)檔案系統。
・virtual:qnx neutrino提供的一種前段虛擬檔案系統,它位於其他資源管理器的前端,解壓之前壓縮的檔案。
2、filesystems as shared libraries
由於各檔案系統有許多類似的地方,qnx neutrino通過共享庫(shared libraries),實現**重用的最大化。這也意味著新增乙個檔案系統的成本要遠遠低於預期。一旦最初的檔案系統開始執行,新增乙個新檔案系統的成本很低。
多數的檔案系統都基於塊io模組(block io module[io-blk.so])。這個模組也作為塊裝置的資源管理器。
io-blk支援內建ram盤(builtin ram disk),可以通過命令列[blk ramdisk=size]建立。builtin ram disk比普通方式的效率高。
io-blk為所有子檔案系統預設實現了乙個快取。這個快取試圖儲存經常訪問的快,已提供檔案訪問的效能。其中讀操作是同步的,而寫操作是非同步的。程式可以將寫操作變更為[file-by-file basis],這樣就能夠在潛在硬體後電源問題的環境下,保證較高的檔案完整性。
二、常見檔案系統
1、image filesystem
每個qnx neutrino都支援的一種唯讀的檔案系統,它用來儲存os image中的檔案。它即可以儲存可執行檔案,也可以儲存資料檔案。
2、ram filesystem
每個qnx neutrino都支援的一種可讀寫的隨機儲存檔案系統,它位於[/dev/shmem]。通常用於重啟後不需要儲存的系統中。
三、power-safe filesystem[qnx6 filesystem]
由[fs-qnx6.so]提供的一種可靠檔案系統,它能夠在電源異常時不丟失或損壞資料。
1、現存盤案系統的問題
雖然現存的檔案系統是為了設計乙個強壯、穩定的系統,但是在災難性異常(如電源異常)時丟失資料。如:
・每個硬碟上的扇區(sector)都包含乙個4byte的正誤**(error-correcting code:ecc),它用來記錄硬體的異常**。當電源異常時,裝置如果正在寫磁碟,那麼磁頭會被移動已防止它們在異常中損壞,而留下乙個寫了一半的扇區。下次你去等這個扇區的時候,就會發生乙個讀取錯誤,舊的和新的內容都丟失了。可以通過乙個有原子扇區操作的裝置,但是通常這種裝置都稀少而昂貴。
・一些檔案操作會更新多個磁碟上的資料塊。如unlink()操作,需要更新bitmap塊、目錄塊和乙個索引節點,這也意味著當正在更新時,如果發生電源異常就可能只被更新了一部分,從而導致檔案系統的異常狀態。雖然有些系統可能通過更新的順序來降低這種狀況發生的機率,但是並不能徹底消除這種異常。
・可以通過[chkfsys]來檢查qnx4檔案系統的完整性,但是它僅檢查檔案系統的結構和元資料,而不檢查使用者資料。並且如果磁碟很大或有很多目錄,就會很慢。
・如果磁碟中的第一塊損壞就不能載入(mount)到檔案系統中。如果想修復的話,就必須對系統
2、copy-on-write filesystem
power-safe filesystem不會覆蓋現有的資料,它通過copy-on-write(cow)機制分配乙個未使用的塊進行操作。只有當所有操作完成時採用這個新塊替代現有資料。系統中所有操作都是通過cow來操作的,包括元資料和使用者資料。
cow方法的缺點:
・任何改變資料的操作都回引起雙倍的資料塊被拷貝和修改。
・當取得快照的時候,檔案系統必須在提交superblock之前將所有塊寫入磁碟。
cow方法的優點:
・寫入操作時與順便無關。
・乙個新塊可以被分配到任何空閒,連續的磁碟上。
四、dos filesystem
qnx neutrino通過fs-dos.so提供了對dos格式磁碟的透明訪問。由於dos檔案系統是一種陳舊而沒有效率的系統,除非需要向其他機器傳輸dos格式的檔案,否則不建議使用。
五、embedded transaction filesystem(etfs)
etfs為了嵌入式的固態儲存裝置(特別是nand flash)實現的一種高可靠性檔案系統。etfs是個完全基於事務(transaction)的檔案系統。每個針對使用者資料或元資料的寫操作都是基於transaction的,成功後反映資料,否則全部回滾。transaction中不會覆蓋現存的資料,乙個針對檔案或目錄的寫操作都會寫在乙個未使用過的區域中。這是如果其中發生錯誤也不會影響即存的資料。
一些(log-based)檔案系統也是不會覆蓋現有的資料。但是etfs做到了極致,它將transaction中的所有事情轉化為log。etfs是構建在對裝置上的transactionlog的審查上。這種審查只是發生在啟動時,為了加快啟動時間犧牲了一定的穩定性,只是針對一部分資料作crc檢查。
事務(transaction)與裝置中的位置無關,並且可以以任何順序操作。可以從裝置中讀取乙個transaction,可以將它們以不同的順序寫道另乙個裝置中。在大規模資料中,因為壞點可能出現在任何地方,所以這點顯得尤其重要。這種機制也能夠很好的支援nand flash記憶體。nand flash通過factory-marked的壞點可能出現在任何地方。
1、inside a transaction
每個都包含乙個資訊頭(header)和乙個資料塊(data)。資訊頭中包括:
必須屬性(與裝置無關)
・fid:乙個唯一的檔案id,來識別這個transaction。
・offset:檔案中資料塊的偏移。
・size:資料塊的大小
・sequence:乙個遞增的數字,以保證時間順序
可選屬性(與裝置相關)
・crcs:完整性檢查資料(支援nand、nor、sram)
・eccs:錯誤糾正(支援nand)
・other:預留位
2、reliability features
etfs是為了即使電源故障(甚至在flash寫操作中)或快擦除下也能正常使用的檔案。他支援:
・dynamic wear-leveling:flash記憶體只容許固定次數(至少100,000)的擦除週期。etfs會跟蹤每個塊的擦寫次數。當選擇使用乙個塊的時候,etfs會試圖延續這個擦寫週期,這可能戲劇性的增加它的使用壽命。可能是乙個過幾天就要壞的快,在etfs下可能還可以正常使用40年(感覺在吹牛!)。
・static wear-leveling:檔案系統中通常包含大量的靜態檔案,它們只會被讀取而不會被寫入。而被這些檔案佔據的區域也就不會被擦寫。如果乙個flash中的多數區域都是這種靜態檔案,就會導致剩餘包含動態資料的分割槽增加了發生error的機率。etfs為了解決這種問題會將這些今天檔案拷貝到一些過載的(over-worked)區域中。這即可以讓那些過載的區域能夠休息一下,以能夠讓那些很少擦寫的靜態區域補充到過載的擦寫區域中。(有點好心辦壞事的感覺)
・crc error detection:每個tansaction都被迴圈冗餘碼(cyclic redundancy check:crc)保護中,它能夠在啟動時快速判斷是否是正確的資料,並且能夠回滾錯誤或未完成的資料。crc能夠判斷出電源異常時可能發生的多bit異常。
・ecc error correction:當有crc異常時,etfs能夠通過ecc碼去試圖糾正、恢復資料。這個適合於nand flash記憶體,它可能會在普通運用時發生單bit的異常。ecc異常通常意味著flash塊可能變得脆弱了,這是etfs會針對這個塊進行重新整理(refresh)操作,將資料拷貝到新的塊中,並擦除這個脆弱的塊。
・read degradation monitoring with automatic refresh:每一次針對nand flash的讀取操作都會消弱資料bit。多數裝置在丟失資料之前支援的100,000的讀取。ecc能夠恢復單bit的異常,但是對於大規模的異常卻無能為力。etfs能夠跟蹤讀取次數,並在這個極限值100,000次達到之前去重新整理。
・transaction rollback:etfs啟動時會檢查所有事務,並回滾或丟棄損壞和不完全的事務。這種回滾是為了處理電源異常而設計,它也支援多次巢狀的異常。etfs是根據crc碼來判斷買個事務的是否正確的。
・atomic file operations:etfs在裝置上實現了乙個非常簡單的目錄結構,它容許在乙個flash寫操作中作變更。如,移動乙個檔案或目錄到其他目錄中,在其他系統需要多步才能完成,而在etfs只需要一步。
・automatic file defragmentation:log-based檔案系統經常苦於磁碟碎片的困擾,因為每一次更新或寫操作都會產生乙個新的事務。etfs通過寫快取(write-buffering)來合併一下小規模的寫操作為乙個大規模的試圖減少因為小事務而長生的磁碟碎片。etfs也會見時每個檔案的碎片登記,並且會在後台作磁碟碎片整理。為了能夠及時相應使用者的訪問,後台的碎片整理總是在使用者請求後執行。
六、qnx 4 filesystem
qnx4檔案系統是乙個由(fs-qnx4.so)提供的高效檔案系統,它與qnx4rtos使用同樣的磁碟結構。它通過基於指紋控制結構的點陣圖分配方式去防止資料丟失:
・基於posix檔案系統
・健壯性:所有敏感資訊都寫在磁碟上
・磁碟簽名和特殊的key資訊即使在磁碟損壞的時候也能恢復資料
・支援505文字的檔名
・支援多執行緒
・客戶驅動的優先順序
・與qnx4一致的磁碟結構
關於QNX檔案系統的悲劇
公司最近開發的系統中偶爾會發生檔案的損壞和目錄的丟失,在調查的過程中發現使用自己不了解的東西總是要付出代價的。這裡記錄下調查的過程 首先在測試環境了作了以下兩個實驗 長時間連續讀寫檔案 寫檔案中斷電 實驗 在15小時的連續讀取中沒有發生檔案損壞及目錄丟失 實驗 20次的斷電實驗中也沒有發生即存檔案的...
檔案系統 檔案系統的架構
vfs是具體檔案系統的抽象,依靠超級塊 inode dentry以及檔案這些結構來發揮作用,檔案系統的架構就體現在這些結構的使用方式中。1 超級塊作用分析 1 2 所有的dentry都指向乙個dentry hashtable dentry hashtable是乙個樹組,每乙個樹組成員都是hash鍊錶...
檔案系統 why檔案系統
為什麼需要檔案系統,可否由作業系統直接寫裸裝置?裸裝置是一種沒有經過格式化的磁碟或分割槽,即讓作業系統直接管理操作磁碟設定,進行資料讀寫等。通過檔案系統的方式組織磁碟儲存和資料管理有很多好處,比如 1.資料讀取 管理等操作變得簡單便捷 檔案系統給使用者提供了乙個簡單的操作介面,只需簡單的操作就能實現...