檔案系統,是對磁碟資料進行組織和管理的一種機制。
可通過裝載,以目錄和檔案的形式向使用者層呈現。但,檔案和目錄其實只是檔案系統的前端而已,只是檔案系統的使用者檢視,其本質還在於這樣的乙個資料結構:inode。
那純粹從inode角度來描述乙個檔案系統,會是什麼情況?
偽檔案系統,就是這樣的一種表示,它不能裝載,不可能從使用者空間看到,但它不會帶來任何的資訊損失。看不到,不等於它不存在。
偽檔案系統,包括1)負責管理塊裝置inode的bdev;2)負責處理管道的pipefs;3)處理套接字的sockfs; 這些都出現在 /proc/filesystems中。
偽檔案系統對於核心來說,就是乙個普通的檔案系統,按通用方法來使用即可,對於使用者來說,他不存在.
所有表示塊裝置的inode都儲存在偽檔案系統 bdev中,這些對使用者層不可見。這使得可以使用標準的vfs函式,來處理塊裝置inode。
讀取乙個檔案,首先必須確定檔案塊所屬的磁碟塊,也就是檔案的元資料。由get_block函式(針對不同檔案系統,有不同實現,祼裝置也其對應函式),而這種對應關係會記錄在buffer_head中,它記錄了磁碟塊和檔案塊之間的對映關係。讀到的檔案的元資料會快取到該檔案對應的塊裝置block_device的位址空間address_space,如果下次再讀到同一檔案,其元資料就可以從該檔案對應bdev的cache中取得了。
如果,我們直接對塊裝置檔案(如/dev/sdx)進行讀寫,那麼塊裝置檔案也會被快取到記憶體中其對應的基樹address_space中。對bdev這種特殊檔案來說,其不光快取常規檔案的元資料,也會快取真實的資料,dd命令就是這種應用。
可以通過dd if=/dev/sda of=/tmp/dest bs=1 count=4096命令,然後用free來檢視cache的變化,記住在執行上述命令之前首先通過sysctl -w vm.drop_caches=3來清空檔案的cache。對於檔案系統層的**來看,它根本不管你是塊裝置還是常規檔案或者是乙個字元裝置檔案,它只要你提供file_operations函式集合而不會平白無故給與任何檔案系統以特權。
bdev檔案系統
fs block dev.c static struct file system type bd type init main.c start kernel vfs caches init bdev cache init register filesystem bd type bdev檔案系統只能被...
bdev檔案系統
檔案系統,是對磁碟資料進行組織和管理的一種機制。可通過裝載,以目錄和檔案的形式向使用者層呈現。但,檔案和目錄其實只是檔案系統的前端而已,只是檔案系統的使用者檢視,其本質還在於這樣的乙個資料結構 inode。那純粹從inode角度來描述乙個檔案系統,會是什麼情況?偽檔案系統,就是這樣的一種表示,它不能...
偽檔案系統bdev
517static struct file system type bd type 522523static struct vfsmount bd mnt read mostly 524struct super block blockdev superblock 這三個是檔案系統的代表成員。檔案系統...