文件系統,是對存儲設備上的文件,進行組織管理的機制。組織方式不一樣,就會造成不一樣的文件系統。node
Linux 文件系統爲每一個文件都分配兩個數據結構,索引節點(index node)和目錄項(directory entry)。它們主要用來記錄文件的元信息和目錄結構。緩存
索引節點是每一個文件的惟一標誌,而目錄項維護的正是文件系統的樹狀結構。性能優化
磁盤讀寫的最小單位是扇區,然而扇區只有 512B 大小,若是每次都讀寫這麼小的單位,效率必定很低。因此,文件系統又把連續的扇區組成了邏輯塊,而後每次都以邏輯塊爲最小單元,來管理數據。常見的邏輯塊大小爲 4KB,也就是由連續的 8 個扇區組成。網絡
磁盤在執行文件系統格式化時,會被分紅三個存儲區域,超級塊、索引節點區和數據塊區。其中,數據結構
目錄項、索引節點、邏輯塊以及超級塊,構成了 Linux 文件系統的四大基本要素。工具
爲了支持各類不一樣的文件系統,Linux 內核在用戶進程和文件系統的中間,又引入了一個抽象層,也就是虛擬文件系統 VFS(Virtual File System)。VFS 定義了一組全部文件系統都支持的數據結構和標準接口。性能
在 VFS 的下方,Linux 支持各類各樣的文件系統,如 Ext四、XFS、NFS 等等。按照存儲位置的不一樣,這些文件系統能夠分爲三類。學習
這些文件系統,要先掛載到 VFS 目錄樹中的某個子目錄(稱爲掛載點),而後才能訪問其中的文件。拿第一類,也就是基於磁盤的文件系統爲例,在安裝系統時,要先掛載一個根目錄(/),在根目錄下再把其餘文件系統(好比其餘的磁盤分區、/proc 文件系統、/sys 文件系統、NFS 等)掛載進來。優化
cat 命令來講,它首先調用 open() ,打開一個文件;而後調用 read() ,讀取文件的內容;最後再調用 write() ,把文件內容輸出到控制檯的標準輸出中:指針
「Linux 一切皆文件」的深入含義。不管是普通文件和塊設備、仍是網絡套接字和管道等,它們都經過統一的 VFS 接口來訪問。
[root@k8s ~]# df -h /dev/vda1 Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 14G 24G 37% /
有時候空間不足是由於索引節點空間不足。
索引節點的容量,(也就是 Inode 個數)是在格式化磁盤時設定好的,通常由格式化工具自動生成。當你發現索引節點空間不足,但磁盤空間充足時,極可能就是過多小文件致使的。
[root@k8s ~]# df -h /dev/vda1 -i Filesystem Inodes IUsed IFree IUse% Mounted on /dev/vda1 2.5M 255K 2.3M 10% /
文件系統,是對存儲設備上的文件,進行組織管理的一種機制。爲了支持各種不一樣的文件系統,Linux 在各類文件系統實現上,抽象了一層虛擬文件系統(VFS)。
VFS 定義了一組全部文件系統都支持的數據結構和標準接口。這樣,用戶進程和內核中的其餘子系統,就只須要跟 VFS 提供的統一接口進行交互。
爲了下降慢速磁盤對性能的影響,文件系統又經過頁緩存、目錄項緩存以及索引節點緩存,緩和磁盤延遲對應用程序的影響。
find / -name 這個命令是全盤掃描(既包括內存文件系統又包含本地的xfs【個人環境沒有mount 網絡文件系統】),因此 inode cache & dentry & proc inode cache 會升高。
另外,執行過了一次後再次執行find 就機會沒有變化了,執行速度也快了不少,也就是下次的find大部分是依賴cache的結果。
學習筆記 整理自極客時間:《Linux性能優化實戰》