核心必須懂 二 檔案系統初探

2021-09-20 02:25:55 字數 2950 閱讀 3100

這次來說檔案系統. 檔案系統是非常重要的, 提高磁碟使用率, 減小磁碟磨損等等都是檔案系統要解決的問題. 市面上的檔案系統也是數不勝數, 比較常用的像ext4,xfs以及ntfs等等, 國內的像鵝廠的tfs, 然後還有sun號稱"last word in file system"的zfs, 學習zfs而來的btrfs.

下面上一張linux檔案系統元件的體系結構圖, 是我整合了多方文獻並結合自己的經驗畫出來的. 可以看出, 最重要的就是vfs, 正是因為它, 才讓linux可以同時支援多種的檔案系統. 舉個例子, 比如你裝了雙系統mint+windows, 在mint中, 你可以看到windows的ntfs磁碟, 但是返回了windows, 你就看不到mint的磁碟了.

那linux支援哪些檔案系統呢? 來到原始碼的fs資料夾, linux支援的檔案系統可多了去了, 注意看藍色的.

磁碟扇區什麼的就不多說了. 也許會出一篇談儲存介質的文章, 說說ssd結構啥的. 直接跳過硬體從檔案系統結構開始. 注意, 我說的是通用模型, 每個fs的具體實現有差異, 而且差異蠻大的. ext家族是linux預設的fs了, 事實上ext2/ext3和ext4差異也很大.

好, 我猜你和我一樣是右腦思維, 上圖就好:

可以看出來, 這是多層索引結構的檔案系統. 用b+樹是最佳解決方案, 比如btrfs. inode table指向inode, inode指向乙個或者多個block, 注意, 圖中還是直接指向, 後面還會講述多層指向. 最怕的就是inode指向的block太散. 乙個比較好的解決辦法就是在檔案末尾不斷新增資料, 而不是新建檔案.

新建乙個檔案和資料夾, 用stat指令檢視檔案資訊.

可以看到一些資訊. 例如乙個目錄初始大小就是4kb, 8個block, 乙個扇區就是512b, 乙個io block是4kb, 對應第一幅圖的general block device layer層. 這些其實不看也知道, 前提是這是常規的fs.

建立成功乙個檔案有4步:

目錄的話, 就是多了.檔案(指向自己),..檔案(指向上級目錄). 然後新增自己的inode到上級目錄. 看圖就秒懂了.

用df指令可以看inode的總數和使用量.

df -i
dumpe2fs開啟指定磁碟可以看inode的大小, 這裡是256.

inode如何記錄檔案並且最大是多少呢? inode記錄block號碼的區域定義為12個直接, 乙個間接, 乙個雙間接與乙個三間接記錄區. 乙個inode是4b, 這樣用4k的block可以有1k的inode.

所以的話, 4t, are you ok? 算歸算, fs在不斷發展, 這是過時的大小了. ext4的話單個檔案可以到達16tb, fs可達1eb. 但是注意, ext4的作者都說了, ext4只是過渡, btrfs會更棒, 那事實上, cent os用的xfs也很很棒.

建立之後當然要開啟了, 開啟檔案也是有一系列過程的. 先來看看兩個指令:

上圖上圖:

為什麼要說這些情況呢? 因為如果沒有理解清楚這些, 在做多程序多執行緒read和write的時候很有可能會導致讀取和寫入混亂.

核心隨記 四 檔案系統 1

任務管理 記憶體管理和檔案系統是核心最為核心的部分。其中記憶體管理最為複雜,檔案系統最為龐大。核心通過引入虛擬檔案系統,從而支援數十種不同的檔案系統,不得不讓人感嘆linux以及它顯示出的開源的力量的強大。虛擬檔案系統 virtual filesystem 也可以稱為虛擬檔案系統轉換 virual ...

6 檔案系統

root edaserver1 ls bin boot dev etc home lib lib64 lost found media misc mnt net opt proc root sbin selinux srv sys tftpboot tmp usr var bin所有賬號命令,二進位...

4 14 檔案系統

為了說明檔案鏈結的概念,先要介紹unix檔案系統的基本結構。同時,了解i節點和指向i節點的目錄項之間的區別也是很有益的。目前,正在使用的unix檔案系統有多種實現。例如,solaris支援多種不同型別的磁碟檔案系統 傳統的基於bsd的unix檔案系統 稱為ufs 讀 寫dos格式軟盤的檔案系統 稱為...