檔案系統是怎麼通過路徑來知道檔案所在的磁碟位置?

時間 2021-06-09 20:03:07

1樓:

這個問題其實包含兩個子問題

如何根據路徑,定位到改檔案的元資料所在的磁碟位置

如何根據檔案的元資料,找到檔案的資料

第乙個問題,涉及VFS層的資料結構設計;簡單來說是VFS根據目錄樹,逐層lookup,先檢查每級別的子目錄的dentry資料,dentry中會記錄name跟inode對映。

第二個問題,找到inode之後,具體的fs會根據inode記錄的元資料,找到data所在的磁碟位置。

管理meta data跟data管理的fs模組,主要是fs的block allocator。使用者每當創新乙個新的檔案或者寫入新的檔案資料時候,block allocator都需要為新的資料/元資料,分配資源,修改原有的元資料。每個檔案系統,都有自己的block allocator實現,不同系列的fs,相差會很大。

每個塊管理工具,比如磁碟分割槽,LVM2,也有自己的block allocator。每個物理裝置的控制器,比如ssd卡的控制器,磁碟的控制器,也有自己的block allocator,會把邏輯位址對映為實體地址。

一般來說,檔案系統的block allocator設計會比較複雜,塊裝置管理器的block allocator會比較簡單。檔案系統,涉及的元資料會比較多,比如目錄樹管理,比如journal區,meta data summary等等。

檔案系統的block allocator工作內容跟memory的allocator類似。memory allocator演算法很多,比如物理頁管理的buddy演算法,物件池管理的slab演算法等等。相對來說,檔案系統的allocator要複雜,記憶體是乙個線性裝置,磁碟是乙個非線性裝置。

fs的allocator要考慮資料的盡量放在接近的位置。ssd之類還要考慮磨損均衡,都有專門的演算法。allocator設計不同,查詢過程自然就千差萬別的。

傳統linux或者unix的ext、xfs大同小異,比較通用。raiserfs風格迥然,適合小檔案,因為作者個人因素廢掉了。solaris上的zfs很先進,transactional fs,zfs上跑mysql,用MyISAM也支援事務。

如果你是做資料恢復的同學,學習fs allocator,這是看家本領。

如果是做儲存引擎的,需要學習下。

如果是dba,需要了解下。

大部分時候,把他當做一黑盒就行了。

2樓:Billy Zha

1) 每個檔案系統實現不一樣

2) 以ext4為例,要讀取/data/temp/myfile, 這個檔案路徑首先會被劃分成很多段,即/,data, temp, myfile; 除了最後一段,都是目錄名稱,然後就一層層查詢,從/到data到temp,直到讀出目標檔案直接父目錄temp的檔案內容; 這裡邊一般是一條條entry項, 檔名對應索引節點的位置,找到檔名是myfile的項,讀出這個索引節點,根據索引節點讀出myfile檔案內容儲存位置。

3) 上述只是乙個幫助理解普遍的查詢例子,省略了一些細節,還可能出現很多corner case,即使是ext4也不一定就這麼解析,如這個檔案的檔案內容可能根本沒有磁碟位置。

3樓:潛木

思路不對,乙個檔案系統安裝之前首先會對安裝的目標分割槽格式化,然後每放進去乙個檔案檔案系統當然知道他的磁碟位置,至於路徑只是一種邏輯結構,方便使用者用的,和磁碟關係不大

Vormetric檔案系統透明加密是怎麼實現的?

安秉資訊防洩密 透明加密 又稱為自動加密 技術是近年來針對企業檔案保密需求應運而生的一種檔案加密技術。所謂透明,是指對使用者來說是未知的。當使用者在開啟或編輯指定檔案時,系統將自動對未加密的檔案加密,對已加密的檔案自動解密。檔案在硬碟上是密文,在記憶體中是明文。一旦離開使用環境,由於應用程式無法得到...

通過資料庫實現檔案系統與直接使用作業系統的檔案系統各有哪些優勢和劣勢?

liujunsong 這是個很好的問題。如果要摳字眼的話,首先要定義問題裡面的第乙個檔案系統是乙個什麼概念。一般的理解,這個檔案系統是指實現了類似作業系統檔案管理功能的檔案訪問介面。可想而知,如果要在資料庫上直接全部實現這些,其工作量是相當驚人的。這種情況下,在資料量比較小的時候,是沒有什麼問題的,...

Linux哪種檔案系統更有前景

jiangtao9999 符合你需要的最有前途。SSD 需要的是減少寫入次數,但是替代 HDD 在企業環境使用,還有很長的路要走。首先寫入次數限制是個問題,其次還有成本。所以 SSD 在企業,目前我覺得,還是作為快取等需要效能但是對於資料安全性不高的地方為主。即便 HDD 也有壽命問題,但是 HDD...