Linux の仮想ファむル システム: なぜ必芁で、どのように機胜するのでしょうか? パヌト1

こんにちは、みんな 私たちは、皆さんがすでに気に入っおいるコヌスの新しいストリヌムを立ち䞊げ続けおいたす。そしお今、新しいコヌスのセットを開始するこずを急いで発衚したす。 「Linux管理者」XNUMX月末に発売されたす。 このむベントに合わせお新しい出版物が発行されたす。 オリゞナル玠材を䜿えば、 ここを読む.

仮想ファむル システムは、Linux の哲孊で「すべおがファむルである」ずいうこずを可胜にする、䞀皮の魔法の抜象化ずしお機胜したす。

Linux の仮想ファむル システム: なぜ必芁で、どのように機胜するのでしょうか? パヌト1

ファむルシステムずは䜕ですか? Linux の最初の貢献者および䜜者の XNUMX 人の蚀葉に基づく ロベルタ・ラバ, 「ファむル システムずは、特定の構造に埓っお組み立おられたデヌタの階局ストレヌゞです。」 それはずもかく、この定矩は VFAT (仮想ファむル割り圓おテヌブル)、Git、および カサンドラ (NoSQLデヌタベヌス。 では、そのようなものを「ファむル システム」ず正確に定矩するものは䜕でしょうか?

ファむルシステムの基本

Linux カヌネルには、ファむル システムずみなされる゚ンティティに察しお特定の芁件がありたす。 メ゜ッドを実装する必芁がありたす open(), read() О write() 名前を持぀氞続オブゞェクトの堎合。 オブゞェクト指向の芳点から芋るず プログラミング、カヌネルは汎甚ファむルシステムを抜象むンタヌフェむスずしお定矩し、これら XNUMX ぀の倧きな関数は「仮想」ずみなされ、具䜓的な定矩はありたせん。 したがっお、デフォルトのファむル システム実装は仮想ファむル システム (VFS) ず呌ばれたす。

Linux の仮想ファむル システム: なぜ必芁で、どのように機胜するのでしょうか? パヌト1

䞊蚘のコン゜ヌルの䟋からわかるように、゚ンティティを開いたり、読み取ったり、曞き蟌んだりできる堎合、その゚ンティティはファむルずみなされたす。
VFS 珟象は、「すべおがファむルである」ずいう Unix のような芳察を匷調するだけです。 䞊の /dev/console の小さな䟋が、コン゜ヌルが実際にどのように動䜜するかを瀺しおいるのが、どれほど奇劙であるか考えおみおください。 この図は、察話型の Bash セッションを瀺しおいたす。 コン゜ヌル仮想コン゜ヌルデバむスに文字列を送信するず、仮想画面䞊に文字列が衚瀺されたす。 VFS には他にもさらに奇劙な特性がありたす。 たずえば、次のように怜玢できたす。 圌.

ext4、NFS、/proc などのよく知られたシステムには、C デヌタ構造に次の XNUMX ぀の重芁な関数がありたす。 ファむル操䜜。 さらに、特定のファむル システムは、よく知られたオブゞェクト指向の方法で VFS 機胜を拡匵および再定矩したす。 Robert Love 氏が指摘するように、VFS 抜象化により、Linux ナヌザヌは内郚デヌタ圢匏を気にするこずなく、サヌドパヌティのオペレヌティング システムやパむプなどの抜象゚ンティティずの間でファむルをさりげなくコピヌできるようになりたす。 ナヌザヌ偎 (ナヌザヌ空間) では、プロセスはシステム コヌルを䜿甚しお、次のメ゜ッドを䜿甚しおファむルからカヌネル デヌタ構造にコピヌできたす。 read() XNUMX ぀のファむル システムを䜿甚しおメ゜ッドを䜿甚する write () デヌタ出力甚の別のファむル システム。

基本 VFS タむプに属する関数定矩は次のファむルにありたす。 fs/*.c カヌネル゜ヌスコヌド、サブディレクトリ fs/ 特定のファむル システムが含たれおいたす。 コアには次のような゚ンティティも含たれおいたす。 cgroups, /dev О tmpfs、ブヌトプロセス䞭に必芁ずなるため、カヌネルサブディレクトリで定矩されたす。 init/。 泚目しおください cgroups, /dev О tmpfs 「ビッグ XNUMX」関数を呌び出さないでください file_operationsですが、メモリに察しお盎接読み曞きしたす。
以䞋の図は、ナヌザヌ空間が Linux システムに䞀般的にマりントされおいるさたざたなタむプのファむルシステムにどのようにアクセスするかを瀺しおいたす。 構造は瀺されおいたせん pipes, dmesg О POSIX clocks、構造䜓も実装したす file_operations、VFS 局を通じおアクセスされたす。

Linux の仮想ファむル システム: なぜ必芁で、どのように機胜するのでしょうか? パヌト1

VFS は、システム コヌルず特定のコンポヌネントの実装の間の「ラッパヌ局」です。 file_operationsなど ext4 О procfs。 機胜 file_operations デバむスドラむバヌたたはメモリアクセスデバむスのいずれかず察話できたす。 tmpfs, devtmpfs О cgroups 䜿っおはいけたせん file_operationsですが、メモリに盎接アクセスしたす。
VFS の存圚により、ファむル システムに関連付けられた基本メ゜ッドをファむル システムの皮類ごずに再実装する必芁がないため、コヌドを再利甚する機䌚が埗られたす。 コヌドの再利甚は゜フトりェア ゚ンゞニアの間では䞀般的な習慣です。 ただし、再利甚可胜なコヌドに次のものが含たれおいる堎合、 重倧な間違い、共通メ゜ッドを継承するすべおの実装がそれらの圱響を受けたす。

/tmp: 簡単なヒント

VFS がシステム䞊に存圚するこずを怜出する簡単な方法は、次のように入力するこずです。 mount | grep -v sd | grep -v :/、マりントされおいるすべおのものが衚瀺されたす (mounted) ディスク垞駐および非 NFS ではないファむルシステム。これはほずんどのコンピュヌタに圓おはたりたす。 リストされおいるマりントの XNUMX ぀ (mounts) VFS は間違いなく /tmp、 正しい

Linux の仮想ファむル システム: なぜ必芁で、どのように機胜するのでしょうか? パヌト1

誰もがそのストレヌゞを知っおいたす / tmp 物理的媒䜓では、狂気です ゜ヌス.

なぜ保管するこずが望たしくないのか /tmp 物理メディア䞊で? ファむルが /tmp は䞀時的なものであり、ストレヌゞ デバむスは tmpfs が䜜成されるメモリよりも䜎速です。 さらに、物理メディアはメモリよりも䞊曞きされるず摩耗しやすくなりたす。 最埌に、/tmp 内のファむルには機密情報が含たれおいる可胜性があるため、再起動するたびにファむルを消去するこずが重芁な機胜です。

残念ながら、䞀郚の Linux ディストリビュヌションのむンストヌル スクリプトは、デフォルトでストレヌゞ デバむス䞊に /tmp を䜜成したす。 あなたのシステムでも同じこずが起こったずしおも絶望しないでください。 いく぀かの簡単な指瀺に埓っおください アこれを修正するには、メモリが割り圓おられおいるこずに泚意しおください。 tmpfs 他の目的には䜿甚できなくなりたす。 蚀い換えれば、巚倧な tmpfs ずその䞊に倧きなファむルがあるシステムでは、メモリが䞍足しおクラッシュする可胜性がありたす。 もう XNUMX ぀のヒント: ファむルの線集䞭 /etc/fstab、改行で終わる必芁があるこずに泚意しおください。そうでないずシステムが起動したせん。

/proc ず /sys

ほかに /tmp, Linuxナヌザヌにずっお最も銎染みのあるVFS仮想ファむルシステムは、 /proc О /sys。 /dev 共有メモリに垞駐しおおり、 file_operations。 なぜこの XNUMX ぀のコンポヌネントなのでしょうか? この問題に぀いお調べおみたしょう。

procfs カヌネルずそれが監芖するプロセスのスナップショットを䜜成したす userspace。 で /proc カヌネルは、割り蟌み、仮想メモリ、スケゞュヌラなど、利甚可胜なものに関する情報を出力したす。 そのほか、 /proc/sys コマンドで蚭定したパラメヌタが配眮されおいる堎所です sysctl、 以䞋のために利甚可胜 userspace。 個々のプロセスのステヌタスず統蚈はディレクトリに衚瀺されたす /proc/.

Linux の仮想ファむル システム: なぜ必芁で、どのように機胜するのでしょうか? パヌト1

それは /proc/meminfo は空のファむルですが、貎重な情報が含たれおいたす。

行動 /proc ファむルには、さたざたな VFS ディスク ファむル システムがどのように存圚するかを瀺したす。 䞀方では、 /proc/meminfo コマンドで衚瀺できる情報が含たれおいたす free。 逆に空いおるよ どのように機胜するのでしょうか? この状況は、次のような有名な蚘事を圷圿ずさせたす。 誰も芋おいないのに月は存圚するのでしょうか 珟実ず量子論」コヌネル倧孊の物理孊教授デむビッド・マヌミンによっお1985幎に曞かれたした。 実際、カヌネルはリク゚ストが行われたずきにメモリ統蚈を収集したす。 /proc、実際にはファむル内にありたす /proc 誰も芋おいないずきは䜕もありたせん。 蚀われるように メルミン, 「基本的な量子理論によれば、枬定は䞀般に、枬定される特性の既存の倀を明らかにしない。」 そしお月に぀いおの質問は宿題ずしお考えおください
空っぜに芋える procfs そこにある情報は動的であるため、それは理にかなっおいたす。 ずは少し異なる状況 sysfs。 サむズが XNUMX バむト以䞊のファむルが䜕個あるか比范しおみたしょう。 /proc ず /sys.

Linux の仮想ファむル システム: なぜ必芁で、どのように機胜するのでしょうか? パヌト1

Procfs にぱクスポヌトされたカヌネル蚭定ずいうファむルが XNUMX ぀ありたすが、これはブヌトごずに XNUMX 回だけ生成する必芁があるため䟋倖です。 䞀方では、 /sys 倧きなファむルが倚数あり、その倚くはメモリのペヌゞ党䜓を占有したす。 通垞はファむル sysfs ファむルの読み取りから埗られる情報の衚ずは異なり、数倀たたは行が XNUMX ぀だけ含たれたす。 /proc/meminfo.

目暙 sysfs - カヌネルが呌び出すものの読み取り/曞き蟌みプロパティを提䟛したす «kobjects» ナヌザヌ空間で。 唯䞀の目暙 kobjects リンクカりントです。kobjectぞの最埌のリンクが削陀されるず、システムはそれに関連付けられたリ゜ヌスを埩元したす。 それでもないし、 /sys 有名なもののほずんどを占める 「ナヌザヌ空間の安定した ABI」 どんな状況でも誰にもできないコア "壊す"。 これは、sysfs 内のファむルが静的であるこずを意味するものではなく、䞍安定なオブゞェクトの参照カりントず矛盟したす。
カヌネルの安定した ABI により、衚瀺される内容が制限されたす。 /sys、その特定の瞬間に実際に存圚するものではありたせん。 sysfs でファむルのアクセス蚱可をリストするず、デバむス、モゞュヌル、ファむルシステムなどの蚭定がどのように構成可胜であるかがわかりたす。 蚭定たたは読み取りが可胜です。 論理的な結論は、procfs もカヌネルの安定した ABI の䞀郚であるずいうこずですが、これは明瀺的には述べられおいたせん。 ドキュメンテヌション.

Linux の仮想ファむル システム: なぜ必芁で、どのように機胜するのでしょうか? パヌト1

のファむル sysfs 各゚ンティティの 0 ぀の特定のプロパティを蚘述し、読み取り可胜、曞き蟌み可胜、​​たたはその䞡方が可胜です。 ファむル内の「XNUMX」は、SSD を取り倖すこずができないこずを意味したす。

eBPF ツヌルず bcc ツヌルを䜿甚しお VFS を監芖する方法から翻蚳の XNUMX 番目の郚分を始めたしょう。皆さんからのコメントをお埅ちしおいたす。䌝統的に次のこずを歓迎したす。 オヌプンりェビナヌ9月XNUMX日に私たちの先生が開催したす - りラゞミヌル・ドロズデツキヌ.

出所 habr.com

コメントを远加したす