[青島網(wǎng)站建設(shè)/seo關(guān)鍵詞優(yōu)化]Linux 中的虛擬文件系統(tǒng)詳解

閱讀 ?·? 發(fā)布日期 2019-05-31 17:10 ?·? admin
什么是文件體系?依據(jù)前期的 Linux 貢獻(xiàn)者和作家 Robert Love 所說(shuō),“文件體系是一個(gè)遵循特定結(jié)構(gòu)的數(shù)據(jù)的分層存儲(chǔ)。” 不過(guò),這種描繪也相同適用于 VFAT(虛擬文件分配表Virtual File Allocation Table)、Git 和Cassandra(一種 NoSQL 數(shù)據(jù)庫(kù))。那么怎么區(qū)別文件體系呢? 文件體系基礎(chǔ)概念 Linux 內(nèi)核要求文件體系有必要是實(shí)體,它還有必要在耐久目標(biāo)上完結(jié) open()、read() 和 write() 辦法,而且這些實(shí)體需求有與之相關(guān)的名字。從 面向目標(biāo)編程 的角度來(lái)看,內(nèi)核將通用文件體系視為一個(gè)籠統(tǒng)接口,這三大函數(shù)是“虛擬”的,沒(méi)有默許界說(shuō)。因而,內(nèi)核的默許文件體系完結(jié)被稱為虛擬文件體系(VFS)。 詳解 Linux 中的虛擬文件體系 假如咱們能夠 open()、read() 和 write(),它就是一個(gè)文件,如這個(gè)主控臺(tái)會(huì)話所示。 VFS 是聞名的類 Unix 體系中 “全部皆文件” 概念的基礎(chǔ)。讓咱們看一下它有多古怪,上面的小小演示表現(xiàn)了字符設(shè)備 /dev/console 實(shí)踐的作業(yè)。該圖顯現(xiàn)了一個(gè)在虛擬電傳打字操控臺(tái)(tty)上的交互式 Bash 會(huì)話。將一個(gè)字符串發(fā)送到虛擬操控臺(tái)設(shè)備會(huì)使其顯現(xiàn)在虛擬屏幕上。而 VFS 乃至還有其它更古怪的特點(diǎn)。例如,它能夠在其間尋址。 咱們熟悉的文件體系如 ext4、NFS 和 /proc 都在名為 file_operations 的 C 言語(yǔ)數(shù)據(jù)結(jié)構(gòu)中供給了三大函數(shù)的界說(shuō)。此外,個(gè)別的文件體系會(huì)以熟悉的面向目標(biāo)的辦法擴(kuò)展和覆蓋了 VFS 功用。正如 Robert Love 指出的那樣,VFS 的籠統(tǒng)使 Linux 用戶能夠輕松地將文件仿制到(或仿制自)外部操作體系或籠統(tǒng)實(shí)體(如管道),而無(wú)需擔(dān)心其內(nèi)部數(shù)據(jù)格局。在用戶空間這一側(cè),經(jīng)過(guò)體系調(diào)用,進(jìn)程能夠運(yùn)用文件體系辦法之一 read() 從文件仿制到內(nèi)核的數(shù)據(jù)結(jié)構(gòu)中,然后運(yùn)用另一種文件體系的辦法 write() 輸出數(shù)據(jù)。[青島網(wǎng)站建設(shè)/seo關(guān)鍵詞優(yōu)化] 屬于 VFS 根本類型的函數(shù)界說(shuō)自身能夠在內(nèi)核源代碼的 fs/*.c 文件 中找到,而 fs/ 的子目錄中包含了特定的文件體系。內(nèi)核還包含了相似文件體系的實(shí)體,例如 cgroup、/dev 和 tmpfs,在引導(dǎo)進(jìn)程的前期需求它們,因而界說(shuō)在內(nèi)核的 init/ 子目錄中。請(qǐng)注意,cgroup、/dev 和 tmpfs 不會(huì)調(diào)用 file_operations 的三大函數(shù),而是直接讀取和寫(xiě)入內(nèi)存。 下圖大致說(shuō)明晰用戶空間怎么拜訪通常掛載在 Linux 體系上的各種類型文件體系。像管道、dmesg 和 POSIX 時(shí)鐘這樣的結(jié)構(gòu)在此圖中未顯現(xiàn),它們也完結(jié)了 struct file_operations,而且其拜訪也要經(jīng)過(guò) VFS 層。 詳解 Linux 中的虛擬文件體系 How userspace accesses various types of filesystems VFS 是個(gè)“墊片層”,位于體系調(diào)用和特定 file_operations 的完結(jié)(如 ext4 和 procfs)之間。然后,file_operations 函數(shù)能夠與特定于設(shè)備的驅(qū)動(dòng)程序或內(nèi)存拜訪器進(jìn)行通訊。tmpfs、devtmpfs 和 cgroup 不運(yùn)用 file_operations 而是直接拜訪內(nèi)存。 VFS 的存在促進(jìn)了代碼重用,由于與文件體系相關(guān)的根本辦法不需求由每種文件體系類型從頭完結(jié)。代碼重用是一種被廣泛接受的軟件工程最佳實(shí)踐!唉,但是假如重用的代碼引進(jìn)了嚴(yán)峻的過(guò)錯(cuò),那么承繼常用辦法的一切完結(jié)都會(huì)受到影響。 /tmp:一個(gè)小提示 找出體系中存在的 VFS 的簡(jiǎn)略辦法是鍵入 mount | grep -v sd | grep -v :/,在大多數(shù)核算機(jī)上,它將列出一切未駐留在磁盤(pán)上,一起也不是 NFS 的已掛載文件體系。其間一個(gè)列出的 VFS 掛載肯定是 /tmp,對(duì)吧? 誰(shuí)都知道把 /tmp 放在物理存儲(chǔ)設(shè)備上簡(jiǎn)直是瘋了!圖片:https://tinyurl.com/ybomxyfo 為什么把 /tmp 留在存儲(chǔ)設(shè)備上是不行取的?由于 /tmp 中的文件是臨時(shí)的(!),而且存儲(chǔ)設(shè)備比內(nèi)存慢,所以創(chuàng)立了 tmpfs 這種文件體系。此外,比起內(nèi)存,物理設(shè)備頻頻寫(xiě)入更簡(jiǎn)略磨損。最后,/tmp 中的文件或許包含敏感信息,因而在每次從頭發(fā)動(dòng)時(shí)讓它們消失是一項(xiàng)功用。 不幸的是,默許狀況下,某些 Linux 發(fā)行版的安裝腳本仍會(huì)在存儲(chǔ)設(shè)備上創(chuàng)立 /tmp。假如你的體系呈現(xiàn)這種狀況,請(qǐng)不要絕望。按照一向優(yōu)秀的 Arch Wiki 上的簡(jiǎn)略說(shuō)明來(lái)解決問(wèn)題就行,記住分配給 tmpfs 的內(nèi)存就不能用于其他意圖了。換句話說(shuō),包含了大文件的巨大的 tmpfs 或許會(huì)讓體系耗盡內(nèi)存并潰散。 另一個(gè)提示:編輯 /etc/fstab 文件時(shí),請(qǐng)務(wù)必以換行符結(jié)束,否則體系將無(wú)法發(fā)動(dòng)。(猜猜我怎么知道。) /proc 和 /sys 除了 /tmp 之外,大多數(shù) Linux 用戶最熟悉的 VFS 是 /proc 和 /sys。(/dev 依賴于共享內(nèi)存,而沒(méi)有 file_operations 結(jié)構(gòu))。為什么有兩種呢?讓咱們來(lái)看看更多細(xì)節(jié)。 procfs 為用戶空間供給了內(nèi)核及其操控的進(jìn)程的瞬時(shí)狀態(tài)的快照。在 /proc 中,內(nèi)核發(fā)布有關(guān)其供給的設(shè)備的信息,如中止、虛擬內(nèi)存和調(diào)度程序。此外,/proc/sys 是存放能夠經(jīng)過(guò) sysctl 指令裝備的設(shè)置的地方,可供用戶空間拜訪。單個(gè)進(jìn)程的狀態(tài)和計(jì)算信息在 /proc/ 目錄中陳述。 詳解 Linux 中的虛擬文件體系 /proc/meminfo 是一個(gè)空文件,但仍包含有價(jià)值的信息。 /proc 文件的行為說(shuō)明晰 VFS 能夠與磁盤(pán)上的文件體系不同。一方面,/proc/meminfo包含了可由指令 free 展現(xiàn)出來(lái)的信息。另一方面,它仍是空的!怎么會(huì)這樣?這種狀況讓人聯(lián)想起康奈爾大學(xué)物理學(xué)家 N. David Mermin 在 1985 年寫(xiě)的一篇名為《沒(méi)有人看見(jiàn)月亮的狀況嗎?實(shí)踐和量子理論》。事實(shí)是當(dāng)進(jìn)程從 /proc 請(qǐng)求數(shù)據(jù)時(shí)內(nèi)核再搜集有關(guān)內(nèi)存的計(jì)算信息,而且當(dāng)沒(méi)有人查看它時(shí),/proc 中的文件實(shí)踐上沒(méi)有任何內(nèi)容。正如 Mermin 所說(shuō),“這是一個(gè)根本的量子學(xué)說(shuō),一般來(lái)說(shuō),丈量不會(huì)揭示被測(cè)特點(diǎn)的預(yù)先存在的價(jià)值。”(關(guān)于月球的問(wèn)題的答案留作操練。) 當(dāng)沒(méi)有進(jìn)程拜訪它們時(shí),/proc 中的文件為空。(來(lái)源) procfs 的空文件是有道理的,由于那里可用的信息是動(dòng)態(tài)的。sysfs 的狀況則不同。讓咱們比較一下 /proc 與 /sys 中不為空的文件數(shù)量。 詳解 Linux 中的虛擬文件體系 procfs 只需一個(gè)不為空的文件,即導(dǎo)出的內(nèi)核裝備,這是一個(gè)例外,由于每次發(fā)動(dòng)只需求生成一次。另一方面,/sys 有許多更大一些的文件,其間大多數(shù)由一頁(yè)內(nèi)存組成。通常,sysfs 文件只包含一個(gè)數(shù)字或字符串,與經(jīng)過(guò)讀取 /proc/meminfo 等文件生成的信息表格形成鮮明對(duì)比。 sysfs 的意圖是將內(nèi)核稱為 “kobject” 的可讀寫(xiě)特點(diǎn)公開(kāi)給用戶空間。kobject 的僅有意圖是引證計(jì)數(shù):當(dāng)刪除對(duì) kobject 的最后一個(gè)引證時(shí),體系將收回與之相關(guān)的資源。然而,/sys 構(gòu)成了內(nèi)核聞名的“到用戶空間的安穩(wěn) ABI”,它的大部分內(nèi)容在任何狀況下都沒(méi)有人能“破壞”。但這并不意味著 sysfs 中的文件是靜態(tài),這與易失性目標(biāo)的引證計(jì)數(shù)相反。 內(nèi)核的安穩(wěn) ABI 限制了 /sys 中或許呈現(xiàn)的內(nèi)容,而不是任何給定時(shí)刻實(shí)踐存在的內(nèi)容。列出 sysfs 中文件的權(quán)限能夠了解怎么設(shè)置或讀取設(shè)備、模塊、文件體系等的可裝備、可調(diào)參數(shù)。邏輯上強(qiáng)調(diào) procfs 也是內(nèi)核安穩(wěn) ABI 的一部分的定論,盡管內(nèi)核的文檔沒(méi)有清晰說(shuō)明。 詳解 Linux 中的虛擬文件體系 sysfs 中的文件確切地描繪了實(shí)體的每個(gè)特點(diǎn),而且能夠是可讀的、可寫(xiě)的,或兩者兼而有之。文件中的“0”標(biāo)明 SSD 不行移動(dòng)的存儲(chǔ)設(shè)備。 用 eBPF 和 bcc 東西一窺 VFS 內(nèi)部 了解內(nèi)核怎么辦理 sysfs 文件的最簡(jiǎn)略辦法是調(diào)查它的運(yùn)轉(zhuǎn)狀況,在 ARM64 或 x86_64 上觀看的最簡(jiǎn)略辦法是運(yùn)用 eBPF。eBPF(擴(kuò)展的伯克利數(shù)據(jù)包過(guò)濾器extended Berkeley Packet Filter)由在內(nèi)核中運(yùn)轉(zhuǎn)的虛擬機(jī)組成,特權(quán)用戶能夠從指令行進(jìn)行查詢。內(nèi)核源代碼告訴讀者內(nèi)核能夠做什么;而在一個(gè)發(fā)動(dòng)的體系上運(yùn)轉(zhuǎn) eBPF 東西會(huì)顯現(xiàn)內(nèi)核實(shí)踐上做了什么。 令人高興的是,經(jīng)過(guò) bcc 東西入門(mén)運(yùn)用 eBPF 非常簡(jiǎn)略,這些東西在主要 Linux 發(fā)行版的軟件包中都有,而且已經(jīng)由 Brendan Gregg 給出了充分的文檔說(shuō)明。bcc 東西是帶有小段嵌入式 C 言語(yǔ)片段的 Python 腳本,這意味著任何對(duì)這兩種言語(yǔ)熟悉的人都能夠輕松修正它們。據(jù)當(dāng)時(shí)計(jì)算,bcc/tools 中有 80 個(gè) Python 腳本,使得體系辦理員或開(kāi)發(fā)人員很有或許能夠找到與她/他的需求相關(guān)的已有腳本。 要了解 VFS 在正在運(yùn)轉(zhuǎn)中的體系上的作業(yè)狀況,請(qǐng)測(cè)驗(yàn)運(yùn)用簡(jiǎn)略的 vfscount 或 vfsstat 腳本,這能夠看到每秒都會(huì)發(fā)作數(shù)十次對(duì) vfs_open() 及其相關(guān)的調(diào)用。 詳解 Linux 中的虛擬文件體系 vfsstat.py 是一個(gè)帶有嵌入式 C 片段的 Python 腳本,它只是計(jì)數(shù) VFS 函數(shù)調(diào)用。[青島網(wǎng)站建設(shè)/seo關(guān)鍵詞優(yōu)化] 作為一個(gè)不太重要的比如,讓咱們看一下在運(yùn)轉(zhuǎn)的體系上刺進(jìn) USB 記憶棒時(shí) sysfs 中會(huì)發(fā)作什么。 詳解 Linux 中的虛擬文件體系 用 eBPF 調(diào)查刺進(jìn) USB 記憶棒時(shí) /sys 中會(huì)發(fā)作什么,簡(jiǎn)略的和復(fù)雜的比如。 在上面的第一個(gè)簡(jiǎn)略示例中,只需 sysfs_create_files() 指令運(yùn)轉(zhuǎn),trace.py bcc 東西腳本就會(huì)打印出一條消息。咱們看到 sysfs_create_files() 由一個(gè) kworker 線程發(fā)動(dòng),以響應(yīng) USB 棒的刺進(jìn)事情,但是它創(chuàng)立了什么文件?第二個(gè)比如說(shuō)明晰 eBPF 的強(qiáng)大能力。這兒,trace.py 正在打印內(nèi)核回溯(-K 選項(xiàng))以及 sysfs_create_files() 創(chuàng)立的文件的稱號(hào)。單引號(hào)內(nèi)的代碼段是一些 C 源代碼,包括一個(gè)易于辨認(rèn)的格局字符串,所供給的 Python 腳本引進(jìn) LLVM 即時(shí)編譯器(JIT) 來(lái)在內(nèi)核虛擬機(jī)內(nèi)編譯和執(zhí)行它。有必要在第二個(gè)指令中重現(xiàn)完整的 sysfs_create_files() 函數(shù)簽名,以便格局字符串能夠引證其間一個(gè)參數(shù)。在此 C 片段中出錯(cuò)會(huì)導(dǎo)致可辨認(rèn)的 C 編譯器過(guò)錯(cuò)。例如,假如省掉 -I 參數(shù),則成果為“無(wú)法編譯 BPF 文本”。熟悉 C 或 Python 的開(kāi)發(fā)人員會(huì)發(fā)現(xiàn) bcc 東西易于擴(kuò)展和修正。 刺進(jìn) USB 記憶棒后,內(nèi)核回溯顯現(xiàn) PID 7711 是一個(gè) kworker 線程,它在 sysfs 中創(chuàng)立了一個(gè)名為 events 的文件。運(yùn)用 sysfs_remove_files() 進(jìn)行相應(yīng)的調(diào)用標(biāo)明,刪除 USB 記憶棒會(huì)導(dǎo)致刪除該 events 文件,這與引證計(jì)數(shù)的主意保持一致。在 USB 棒刺進(jìn)期間(未顯現(xiàn))在 eBPF 中調(diào)查 sysfs_create_link() 標(biāo)明創(chuàng)立了不少于 48 個(gè)符號(hào)鏈接。 無(wú)論怎么,events 文件的意圖是什么?運(yùn)用 cscope 查找函數(shù) __device_add_disk()顯現(xiàn)它調(diào)用 disk_add_events(),而且能夠?qū)?“mediachange” 或 “ejectrequest” 寫(xiě)入到該文件。這兒,內(nèi)核的塊層告訴用戶空間該 “磁盤(pán)” 的呈現(xiàn)和消失。考慮一下這種檢查 USB 棒的刺進(jìn)的作業(yè)原理的辦法與試圖僅從源頭中找出該進(jìn)程的速度有多快。 只讀根文件體系使得嵌入式設(shè)備成為或許 的確,沒(méi)有人經(jīng)過(guò)拔出電源插頭來(lái)封閉服務(wù)器或桌面體系。為什么?由于物理存儲(chǔ)設(shè)備上掛載的文件體系或許有掛起的(未完結(jié)的)寫(xiě)入,而且記載其狀態(tài)的數(shù)據(jù)結(jié)構(gòu)或許與寫(xiě)入存儲(chǔ)器的內(nèi)容不同步。[青島網(wǎng)站建設(shè)/seo關(guān)鍵詞優(yōu)化]當(dāng)發(fā)作這種狀況時(shí),體系一切者將不得不在下次發(fā)動(dòng)時(shí)等待 fsck 文件體系恢復(fù)東西 運(yùn)轉(zhuǎn)完結(jié),在最壞的狀況下,實(shí)踐上會(huì)丟掉數(shù)據(jù)。 然而,狂熱愛(ài)好者會(huì)傳聞許多物聯(lián)網(wǎng)和嵌入式設(shè)備,如路由器、恒溫器和轎車現(xiàn)在都運(yùn)轉(zhuǎn)著 Linux。許多這些設(shè)備幾乎徹底沒(méi)有用戶界面,而且沒(méi)有辦法干凈地讓它們“免除發(fā)動(dòng)”。想一想發(fā)動(dòng)電池耗盡的轎車,其間運(yùn)轉(zhuǎn) Linux 的主機(jī)設(shè)備 的電源會(huì)不斷加電斷電。當(dāng)引擎終究開(kāi)始運(yùn)轉(zhuǎn)時(shí),體系怎么在沒(méi)有長(zhǎng)期 fsck 的狀況下發(fā)動(dòng)呢?答案是嵌入式設(shè)備依賴于只讀根文件體系(簡(jiǎn)稱 ro-rootfs)。 ro-rootfs 是嵌入式體系不常常需求 fsck 的原因。 ro-rootfs 供給了許多長(zhǎng)處,雖然這些長(zhǎng)處不如耐用性那么明顯。一個(gè)是,假如 Linux 進(jìn)程不能夠?qū)懭耄敲创跻廛浖矡o(wú)法寫(xiě)入 /usr 或 /lib。另一個(gè)是,根本上不行變的文件體系關(guān)于遠(yuǎn)程設(shè)備的現(xiàn)場(chǎng)支撐至關(guān)重要,由于支撐人員具有理論上與現(xiàn)場(chǎng)相同的本地體系。或許最重要(但也是最奇妙)的優(yōu)勢(shì)是 ro-rootfs 迫使開(kāi)發(fā)人員在項(xiàng)意圖設(shè)計(jì)階段就決定好哪些體系目標(biāo)是不行變的。處理 ro-rootfs 或許常常是不方便乃至是苦楚的,編程言語(yǔ)中的常量變量常常就是這樣,但帶來(lái)的優(yōu)點(diǎn)很簡(jiǎn)略歸還這種額定的開(kāi)銷。 關(guān)于嵌入式開(kāi)發(fā)人員,創(chuàng)立只讀根文件體系的確需求做一些額定的作業(yè),而這正是 VFS 的用武之地。Linux 需求 /var 中的文件可寫(xiě),此外,嵌入式體系運(yùn)轉(zhuǎn)的許多盛行應(yīng)用程序會(huì)測(cè)驗(yàn)在 $HOME 中創(chuàng)立裝備的點(diǎn)文件。放在家目錄中的裝備文件的一種解決計(jì)劃通常是預(yù)生成它們并將它們構(gòu)建到 rootfs 中。關(guān)于 /var,一種辦法是將其掛載在單獨(dú)的可寫(xiě)分區(qū)上,而 / 自身以只讀辦法掛載。運(yùn)用綁定或疊加掛載是另一種盛行的代替計(jì)劃。 綁定和疊加掛載以及在容器中的運(yùn)用運(yùn)轉(zhuǎn) man mount 是了解綁定掛載bind mount和疊加掛載overlay mount的最好辦法,這種辦法使得嵌入式開(kāi)發(fā)人員和體系辦理員能夠在一個(gè)途徑位置創(chuàng)立文件體系,然后以別的一個(gè)途徑將其供給給應(yīng)用程序。關(guān)于嵌入式體系,這代表著能夠?qū)⑽募鎯?chǔ)在 /var 中的不行寫(xiě)閃存設(shè)備上,但是在發(fā)動(dòng)時(shí)將 tmpfs 中的途徑疊加掛載或綁定掛載到 /var 途徑上,這樣應(yīng)用程序就能夠在那里隨意寫(xiě)它們的內(nèi)容了。下次加電時(shí),/var 中的變化將會(huì)消失。疊加掛載為 tmpfs 和底層文件體系供給了聯(lián)合,允許對(duì) ro-rootfs 中的現(xiàn)有文件進(jìn)行直接修正,而綁定掛載能夠使新的空 tmpfs 目錄在 ro-rootfs 途徑中顯現(xiàn)為可寫(xiě)。雖然疊加文件體系是一種適當(dāng)?shù)奈募w系類型,而綁定掛載由 VFS 命名空間東西完結(jié)的。 依據(jù)疊加掛載和綁定掛載的描繪,沒(méi)有人會(huì)對(duì) Linux 容器 中很多運(yùn)用它們感到驚奇。讓咱們經(jīng)過(guò)運(yùn)轉(zhuǎn) bcc 的 mountsnoop 東西監(jiān)視當(dāng)運(yùn)用 systemd-nspawn 發(fā)動(dòng)容器時(shí)會(huì)發(fā)作什么: 詳解 Linux 中的虛擬文件體系 在 mountsnoop.py 運(yùn)轉(zhuǎn)的一起,system-nspawn 調(diào)用發(fā)動(dòng)容器。 讓咱們看看發(fā)作了什么: 詳解 Linux 中的虛擬文件體系 在容器 “發(fā)動(dòng)” 期間運(yùn)轉(zhuǎn) mountsnoop 能夠看到容器運(yùn)轉(zhuǎn)時(shí)很大程度上依賴于綁定掛載。(僅顯現(xiàn)冗長(zhǎng)輸出的最初) 這兒,systemd-nspawn 將主機(jī)的 procfs 和 sysfs 中的選定文件按其 rootfs 中的途徑供給給容器。除了設(shè)置綁定掛載時(shí)的 MS_BIND 標(biāo)志之外,mount 體系調(diào)用的一些其它標(biāo)志用于確認(rèn)主機(jī)命名空間和容器中的更改之間的關(guān)系。例如,綁定掛載能夠?qū)?/proc 和 /sys 中的更改傳播到容器,也能夠躲藏它們,詳細(xì)取決于調(diào)用。 總結(jié) 理解 Linux 內(nèi)部結(jié)構(gòu)看似是一項(xiàng)不或許完結(jié)的使命,由于除了 Linux 用戶空間應(yīng)用程序和 glibc 這樣的 C 庫(kù)中的體系調(diào)用接口,內(nèi)核自身也包含很多代碼。取得進(jìn)展的一種辦法是閱覽一個(gè)內(nèi)核子體系的源代碼,重點(diǎn)是理解面向用戶空間的體系調(diào)用和頭文件以及主要的內(nèi)核內(nèi)部接口,這兒以 file_operations 表為例。[青島網(wǎng)站建設(shè)/seo關(guān)鍵詞優(yōu)化]file_operations 使得“全部都是文件”得以能夠?qū)嵺`作業(yè),因而把握它們收成特別大。尖端 fs/ 目錄中的內(nèi)核 C 源文件構(gòu)成了虛擬文件體系的完結(jié),虛擬文件體系是支撐盛行的文件體系和存儲(chǔ)設(shè)備的廣泛且相對(duì)簡(jiǎn)略的互操作性的墊片層。經(jīng)過(guò) Linux 命名空間進(jìn)行綁定掛載和覆蓋掛載是 VFS 戲法,它使容器和只讀根文件體系成為或許。結(jié)合對(duì)源代碼的研究,eBPF 內(nèi)核東西及其 bcc 接口使得勘探內(nèi)核比以往任何時(shí)候都更簡(jiǎn)略。