bdev檔案系統

2022-07-04 14:24:10 字數 997 閱讀 6566

檔案系統,是對磁碟資料進行組織和管理的一種機制。

可通過裝載,以目錄和檔案的形式向使用者層呈現。但,檔案和目錄其實只是檔案系統的前端而已,只是檔案系統的使用者檢視,其本質還在於這樣的乙個資料結構: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檔案系統

檔案系統,是對磁碟資料進行組織和管理的一種機制。可通過裝載,以目錄和檔案的形式向使用者層呈現。但,檔案和目錄其實只是檔案系統的前端而已,只是檔案系統的使用者檢視,其本質還在於這樣的乙個資料結構 inode。那純粹從inode角度來描述乙個檔案系統,會是什麼情況?偽檔案系統,就是這樣的一種表示,它不能...

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

517static struct file system type bd type 522523static struct vfsmount bd mnt read mostly 524struct super block blockdev superblock 這三個是檔案系統的代表成員。檔案系統...