Linux中VFS 虛擬檔案系統

2021-09-13 03:11:55 字數 1865 閱讀 5043

檔案系統

linux支援多種檔案系統

ext2:linux基本檔案系統

ext3:ext2的增強版本

ext4:ext檔案系統的第四個版本 這三個是磁碟型別 還有xfs

swap:交換檔案系統

nfs:網路檔案系統,適合linux或unix機器間共享

smbfs:適合linux或unix和windows季期間共享

vfat:windows早期檔案系統

ntfs:windows預設檔案系統,功能非常強大

iso9660:cd光碟的唯讀檔案系統

gfs:google專用儲存海量搜尋資料而設計的專用檔案系統

reiserfs:早期linux使用的日誌功能的檔案系統

linux核心採用虛擬檔案系統層(vfs),通過該中間層對各類檔案系統提供了完美的支援。對於使用者來說,這些檔案系統幾乎是透明的,使用者不需要關心底層檔案系統的具體實現

vfs 基本結構

super  block

dentry

inode

data

super block 超級塊儲存檔案系統的整體資訊,包括inode/block的總量、使用量、剩餘量,以及檔案系統的格式。檔案系統中第乙個塊被稱為超級塊

將物理相鄰的若干個扇區稱為乙個塊。作業系統讀寫磁碟的基本單位是扇區,而檔案系統的基本單位是塊。塊越大儲存效能越好,但空間浪費嚴重。塊越小效能相對越低,但空間利用率高

inode 索引節點

儲存的其實是實際的資料(檔案內容)的一些資訊,這些資訊稱為「元資料」(也就是對檔案屬性的描述),例如檔案大小,檔案擁有者(owner),檔案屬組(group),檔案許可權,檔案讀取或修改的時間戳,鏈結數量。同時記錄此檔案的資料所在的block號碼(資料塊),檔案型別等等

注意:資料分成:元資料+資料本身

每個inode節點的大小,一般是128位元組或256位元組。inode節點的總數在格式化就給定,一般每2kb就設定乙個inode一般檔案很少有檔案小於2kb的所以預訂按照2kb分,一般inode是用不完的

inode號是唯一的,表示不同的檔案。其實linux核心訪問檔案都是通過inode號來進行的,所謂檔名僅僅是inode號的別名,方便使用者識別和使用的。當我們開啟乙個檔案的時候,首先,系統找到這個檔名對應的inode號;然後,通過inode號,在inode table中找到inode資訊,最後在inode資訊中找到檔案資料所在的block,接著就可以處理檔案資料了。

當建立乙個檔案(包括目錄)的時候,就給檔案分配了乙個inode。inodes最大數量就是檔案的最大數量。

dentry 目錄項

目錄項是描述檔案的邏輯屬性,只存在於記憶體中,並沒有實際對應的磁碟上的描述,更確切的說是存在於記憶體的目錄項快取,為了提高查詢效能而設計。注意不管是目錄還是最終的檔案,都是屬於目錄項,所有的目錄項在一起構成一顆龐大的目錄樹。例如:開啟乙個檔案/opt/data/a.txt,那麼/、opt、data、a.txt都是乙個目錄項,vfs在查詢的時候,根據一層一層的目錄項找到對應的每個目錄項的inode,那麼沿著目錄項進行操作就可以找到最終的檔案。

注意:目錄也是一種檔案(所以也存在對應的inode)。開啟目錄,實際上就是開啟目錄檔案。

data 資料

記錄檔案的實際內容,若檔案太大時,會占用多個 block

下圖為乙個檔案系統訪問檔案的大體流程

linux虛擬檔案系統vfs

linux可以掛載不同的檔案系統 ext2,fat,ntfs 用同一的樣式呈現給使用者,讀寫操作用起來都一樣,這是怎樣做到的呢?linux核心在各種不同的檔案系統格式上做了乙個抽象層,使得檔案 目錄 讀寫訪問等概念成為抽象層的概念,因此各種檔案系統看起來用起來都一樣,這個抽象層稱為虛擬檔案系統 vf...

虛擬檔案系統VFS

現代作業系統必須同時支援多個檔案系統,作業系統如何將多個檔案系統整合成乙個目錄結構?使用者如何在訪問檔案系統空間時可以無縫地在檔案系統型別之間移動呢?絕大多數作業系統包括unix都使用物件導向技術來簡化 組織和模組化實現過程,使用這些方法允許不同檔案系統型別可通過同樣結構來實現,這也包括了網路檔案系...

VFS虛擬檔案系統

虛擬檔案系統是具體檔案系統之上的乙個抽象層,它可以使得客戶程式以統一的方式接入不同型別的具體檔案型別。vfs是核心和具體檔案系統之間的乙個介面,只要通過實現這個介面,核心就可以新增對某乙個檔案系統型別的支援。有時vfs指的是通過使用軟體來作為乙個管理容器,提供和具體的檔案系統一樣的功能,通常是乙個或...