ファイルシステムについて読んでいましたが、いくつかの質問が浮上しました。
Q:ファイルがunix / linuxの必須部分(つまり、プロセス/proc
またはデバイスファイルを表す/dev
)の場合はどうなりますか? 」すべてがファイルです'、ファイルシステムのコンテキストの外に存在しますか?一部のファイル(ネットワークソケットファイルやブロックデバイスファイルなど)はファイルシステムから分離されており、オペレーティングシステム自体の一部のように感じます。
次の質問:unix / linuxはファイルシステムなしで実行できますか?たとえば、Linuxシステムでセカンダリストレージに手動でアクセスできますか?
答え1
はい。そしていいえ。おそらく。
すべてではないはいファイル、明らかにハードドライブは、ハードドライブ自体を含むファイルシステムを含むパーティションを含めることはできません。ただ多くのことがあります。アクセシビリティ渡す名前ファイルシステムツリーを通して表示されます。
ファイルシステム(論理ファイルシステムまたはext4などのデータ構造の意味で特定のファイルシステム)に関する限り、特定のファイルは特定の番号付きデバイスの「デバイスノード」として表示されます。ただし、その機能は別々のドライバによって実装されます。プロセスがそれにアクセスすると、オペレーティングシステムはファイルシステムではなく適切なドライバへのアクセスを送信します。参照、ポインタなどと考えてください。
これを念頭に置けば、例えば必須ではないことを容易に理解する/proc
ことができる。それなしでシステムが動作し、プロセスを実行できます。あなたはそのプロセスを見るためのそのような方法はありません。ただしfork()
、kill()
などのものは、wait*()
一部のファイルシステム名ではなくPIDでプロセスを参照するため、機能し続けます。通常、ネットワークソケットも名前付きファイルとして表示されません。 Unixドメインソケットはこれを実行できますが、IIRCは必要ありません。たとえば、TCPやUDPソケットの場合はそうではありません。ただし、Webソケットは次のように表示されます。ファイル記述子プロセスとread()
システムwrite()
コールは、パイプまたは「実際の」ファイルと同じように機能します。したがって、ある意味では、ネットワークソケットはファイルのように歩き、話し、厄介ですが、ネットワークプロトコルはディスクにビットを格納することに大きな関係はありません。
しかし、私が知っている限り、実際に名前付きデバイスノードなしでランダムハードドライブを参照する方法はありません。ハードウェアはそのままで、システムには動作するために必要なSATA / USB /すべてのドライバがまだありますが、そうするように指示することはできません。ファイルシステムをマウントし、ファイルシステムが存在するデバイスを指すデバイスノードを削除することもできます。デバイスノードは一方向なので、ここでは問題はありません。ユーザースペースアクセスデバイス。
「ファイルシステムなしでUnix / Linuxを実行できますか?」と尋ねます。まず、Linuxは実行する実行可能ファイル(実行を終了するファイルinit
)を見つけてユーザースペースから起動するため、ファイルシステムがないと実行できません。ただし、このファイルシステムは通常のディスクドライブ上のファイルシステムである必要はなく、カーネルイメージに含まれるデータに基づいてカーネルによって設定された特別なrootfsファイルシステムである可能性があります。 (しかし、rootfsを削除することはできません。空の場合でも常に存在するため、カーネルは何もマウントされていないファイルシステムのアイデアを処理する必要はありません。)ramfs-rootfs-initramfs.txtrootfsの詳細については、カーネルのドキュメントを参照してください。
一部の仮想オペレーティングシステムはファイルシステムなしで実行できると仮定することができますが、たとえばシステムコールにはファイルexecve()
名が必要なため、実行中のプログラムが何であれ他のプログラムを起動できません。実行中のプログラムは別の方法でロードする必要があります。 )、指定されたデバイスノードがなければ、リポジトリにアクセスすることも困難です。とにかく他のUnixenとあまり変わらないようです。
Linuxでは、起動時にrootfsで単一のユーザースペースプログラムを起動し、rootfsを消去し、他のファイルシステムをマウントしない奇妙な単一目的のシステムを設計することができます。これはファイルシステムがない状態にできるだけ近く、たとえばプログラムはまだ実行され、ネットワークにアクセスできます。しかし、実用的な用途があるかどうかは疑わしいです。通常どおり開いているファイルは閉じられるまで存在し続けるため、その名前を削除することはあまり役に立ちません。
また、見ることができますLinuxカーネルを実行するにはファイルシステムが必要ですか?、上記の回答の一部です。 「すべてはファイルです」という注文の詳細については、以下を参照してください。この回答存在する「すべてがファイルです」の一般人の説明 - Windowsとどう違いますか?。
答え2
実際、「ファイル」というコンピュータの概念はファイルシステムより古い。これはデータの集まりです(たとえば、パンチカードのデータ)。
他の人がすでに答えたように、現代のシステムは実際にはファイルをファイルシステムの一部と見なしています。ファイルデータの一部ではなく、所有権、権限など、ファイルに関するメタデータがあります。しかし、Wikipediaのページに見られるように、必ずしもそうではありません。
また、ブロックデバイス文書そしてソケット文書定義に従ってファイルシステムが必要なオペレーティングシステムオブジェクトを表すファイルシステムの実装。それらが参照するオペレーティングシステムオブジェクトはファイルを必要とせず、ファイルはオブジェクトへのインターフェースにすぎません。すべてのファイルシステムがブロックデバイスとソケットファイルをサポートしているわけではありません。
答え3
この質問はやや哲学的な性格を持っています。環境なしでは何も存在できませんか?
哲学的ではない観点からは、「ファイル」の定義によって異なります。デバイスは明らかにファイルシステムなしで存在します。プロセスはファイルシステムなしで存在します。ネットワークストリームはファイルシステムなしで存在します。
これらのことがうまくいくには、ある種の表現が必要です。データストリームを列挙するためにデバイスIDを使用するか整数を使用するかは重要ではありません。
「ハードディスクブロック23865にいくつかのデータがあります」または「ネットワークストリーム3874」メッセージを「ファイル」と呼びますか?これにより、ファイルシステムがなくてもファイルが存在できると言うことができます。
この情報を保存、アクセス、および管理する方法が必要な場合があります。ネットワークフローまたは現在アクティブなプロセスのリストが表示されます。 「ファイル」をより大きなデータ構造に保存します。これがファイルシステムです。これらのデータ構造は、いかなる形式の永続ストレージにも記録されませんが、ファイルを管理するシステムです。
結論:いいえ、ファイルシステムがなければファイルは存在できません。