大家好! 我們繼續為您已經愛上的課程推出新的課程,現在我們急於宣布我們正在啟動一組新的課程
虛擬文件系統是一種神奇的抽象,它允許 Linux 的哲學說“一切都是文件”。
什麼是文件系統? 基於 Linux 最早的貢獻者和作者之一的話
文件系統基礎知識
Linux 內核對可被視為文件系統的實體有一定的要求。 它必須實現方法 open()
, read()
и write()
對於有名稱的持久對象。 從面向對象的角度來看
如果我們可以打開、讀取和寫入一個實體,那麼該實體就被視為一個文件,正如我們從上面控制台的示例中看到的那樣。
VFS 現像只是強調了類似 Unix 的觀察“一切都是文件”。 想想上面那個 /dev/console 的小例子展示了控制台的實際工作原理是多麼奇怪。 圖為交互式 Bash 會話。 將字符串發送到控制台(虛擬控制台設備)會將其顯示在虛擬屏幕上。 VFS 還有其他甚至更奇怪的特性。 例如,它允許您通過以下方式搜索
諸如 ext4、NFS 和 /proc 等熟悉的系統在 C 數據結構中具有三個重要函數,稱為 read()
一個文件系統然後使用該方法 write ()
用於數據輸出的另一個文件系統。
屬於基本 VFS 類型的函數定義位於文件中 fs/
包含某些文件系統。 核心還包含實體,例如 cgroups
, /dev
и tmpfs
,在啟動過程中需要,因此在內核子目錄中定義 init/
。 請注意 cgroups
, /dev
и tmpfs
不要調用“三大”功能 file_operations
,而是直接讀寫內存。
下圖顯示了用戶空間如何訪問 Linux 系統上通常安裝的不同類型的文件系統。 結構未顯示 pipes
, dmesg
и POSIX clocks
,它也實現了結構 file_operations
,通過VFS層訪問。
VFS 是系統調用和某些特定實現之間的“包裝層” file_operations
例如 ext4
и procfs
。 功能 file_operations
可以與設備驅動程序或內存訪問設備交互。 tmpfs
, devtmpfs
и cgroups
不使用 file_operations
,而是直接訪問內存。
VFS 的存在提供了重用代碼的機會,因為與文件系統相關的基本方法不必由每種類型的文件系統重新實現。 代碼重用是軟件工程師的常見做法! 但是,如果可重用代碼包含
/tmp:簡單提示
檢測系統上是否存在 VFS 的一個簡單方法是輸入 mount | grep -v sd | grep -v :/
,這將顯示所有已安裝的(mounted
)非磁盤駐留且非 NFS 的文件系統,這在大多數計算機上都是如此。 列出的坐騎之一(mounts
)VFS無疑 /tmp
, 正確的?
大家都知道存儲 / tmp
在物理媒介上——瘋狂!
為什麼不宜保存 /tmp
在物理媒體上? 因為文件在 /tmp
是臨時的,存儲設備比創建 tmpfs 的內存慢。 此外,物理介質在被覆蓋時比內存更容易磨損。 最後,/tmp 中的文件可能包含敏感信息,因此使它們在每次重新啟動時消失是一項重要功能。
不幸的是,某些 Linux 發行版安裝腳本默認在存儲設備上創建 /tmp。 如果您的系統也發生這種情況,請不要絕望。 請遵循一些簡單的說明 tmpfs
無法用於其他目的。 換句話說,一個擁有巨大 tmpfs 和大文件的系統可能會耗盡內存並崩潰。 另一個提示:編輯文件時 /etc/fstab
,記住它必須以換行符結尾,否則你的系統將無法啟動。
/proc 和 /sys
除了 /tmp
、Linux用戶最熟悉的VFS(虛擬文件系統)是 /proc
и /sys
。 (/dev
駐留在共享內存中並且沒有 file_operations
)。 為什麼有這兩個組件? 我們來看看這個問題。
procfs
創建內核及其監視的進程的快照 userspace
。 在 /proc
內核打印有關其可用內容的信息,例如中斷、虛擬內存和調度程序。 除了, /proc/sys
是命令配置參數的地方 sysctl
, 可以用來 userspace
。 各個進程的狀態和統計數據顯示在目錄中 /proc/
.
這裡 /proc/meminfo
是一個空文件,但包含有價值的信息。
行為 /proc
文件顯示了 VFS 磁盤文件系統的不同之處。 一方面, /proc/meminfo
包含可以使用命令查看的信息 free
。 另一方面,卻是空的! 它是如何工作的? 這種情況讓人想起題為“ /proc
,實際上在文件中 /proc
當沒人看的時候,什麼也沒有。 正如所說
看似空虛 procfs
這是有道理的,因為那裡的信息是動態的。 情況略有不同 sysfs
。 讓我們比較一下有多少個至少為 XNUMX 字節大小的文件 /proc
和 /sys
.
Procfs
有一個文件,即導出的內核配置,這是一個例外,因為它只需要在每次啟動時生成一次。 另一方面,在 /sys
有許多較大的文件,其中許多佔用了整個內存頁。 通常文件 sysfs
與通過讀取文件獲得的信息表不同,僅包含一個數字或行 /proc/meminfo
.
目標 sysfs
- 提供內核調用的讀/寫屬性 «kobjects»
在用戶空間中。 唯一的目標 kobjects
是鏈接計數:當一個kobject的最後一個鏈接被刪除時,系統將恢復與其關聯的資源。 儘管如此, /sys
組成了大部分著名的
內核的穩定 ABI 限制了可以出現的內容 /sys
,而不是在那個特定時刻實際存在的內容。 列出 sysfs 中的文件權限可以深入了解設備、模塊、文件系統等的可配置設置。 可以配置或讀取。 合乎邏輯的結論是,procfs 也是內核穩定 ABI 的一部分,儘管在
文件位於 sysfs
描述每個實體的一個特定屬性,並且可以是可讀的、可寫的或兩者兼而有之。 文件中的“0”表示SSD無法移除。
讓我們從如何使用 eBPF 和 bcc 工具監控 VFS 開始翻譯的第二部分,現在我們正在等待您的評論,並傳統上邀請您
來源: www.habr.com