Die Antwort wird davon abhängen, ob Sie wörtlich ohne Dateisystem meinen oder ob die Frage ein wenig anders interpretiert werden soll, als es tatsächlich heißt. Die Antworten für geringfügige Abweichungen in der Interpretation der Frage lauten:
- Das Ausführen von Linux ohne Block-Geräte ist für einige spezielle Anwendungsfälle durchaus machbar und nützlich.
- Wenn Sie Linux ohne Dateisystem ausführen, müssen Sie einige Teile des Kernel-Codes neu schreiben, und es ist unwahrscheinlich, dass dies eine sinnvolle Anstrengung ist.
- Das Ausführen von Linux ohne Dateideskriptoren ist sehr aufwändig. Ich bin mir ziemlich sicher, dass sich die Mühe nicht lohnt.
Die Gründe, warum Sie Teile des Kernel-Codes neu schreiben müssten, um ein funktionierendes System ohne Dateisystem zu erhalten, sind:
- Jeder Thread hat ein Stammverzeichnis und ein aktuelles Arbeitsverzeichnis, das auf ein Dateisystem verweisen muss.
- Programme werden durch den
execve
Systemaufruf gestartet, der eine ausführbare Datei aus einem Dateisystem benötigt.
- Der Kernel erstellt während des Startvorgangs ein speicherbasiertes Dateisystem.
Nachdem ein Programm gestartet wurde, execve
kann es die Zuordnung der ausführbaren Datei aufheben, von der es gestartet wurde. Dazu muss jedoch ohne sofortigen Absturz eine ausführbare Speicherzuordnung erstellt werden, die nicht durch eine Datei gesichert ist. und es muss das mit etwas nützlichem Code initialisieren, bevor es dorthin springt und die ausführbare Datei abbildet.
Auf diese Weise kann ein laufendes Benutzermodusprogramm in einem Zustand existieren, in dem keine von Dateien gesicherten Speicherzuordnungen vorhanden sind, und es kann alle von Dateien gesicherten Dateideskriptoren schließen. Es kann nicht aufhören, ein Stammverzeichnis und ein aktuelles Arbeitsverzeichnis zu haben, aber es kann davon Abstand nehmen.
Obwohl Sie in diesem Zustand Kernel-Code implementieren könnten, um das Dateisystem aus dem Programm zu entfernen und es weiter laufen zu lassen, hört es sich nicht so an, als wäre es nützlich. Und in diesen Endzustand zu gelangen, ohne einen Zwischenzustand der Verwendung eines Dateisystems zu durchlaufen, wird noch mehr Arbeit bedeuten und keinen nützlichen Nutzen bringen.
Ein nützliches Setup für einige spezielle Anwendungsfälle
Das Vermeiden der Verwendung von Blockgeräten kann nützlich sein. Während des Startvorgangs erstellt der Kernel ein Speicherdateisystem und kann dieses Dateisystem cpio
vor der Ausführung mit Inhalten aus einem Archiv füllen init
. Auf diese Weise können Sie ein System vollständig von einem speicherbasierten Dateisystem ausführen, ohne dass ein Blockgerät für die Sicherung erforderlich ist.
Dies kann für Systeme nützlich sein, bei denen Sie keinen Status beibehalten möchten und das System beim Neustart von einem sauberen Stand aus starten soll.
Natürlich müssen der Kernel und das cpio-Archiv irgendwie im Speicher vorhanden sein, bevor der Kernel die Kontrolle erhält. Wie sie dorthin kamen, ist eine Aufgabe für den Bootloader. Der Bootloader könnte diese von einem Blockgerät geladen haben, obwohl das endgültig ausgeführte System keine Blockgeräte verwendet. Es ist aber auch möglich, dass der Bootloader das Kernel- und das cpio-Archiv ohne Verwendung eines Blockgeräts abruft, indem er beispielsweise über das Netzwerk bootet.
useful exposure to the outside world