Der Unterschied zwischen initrd und initramfs?
Soweit ich weiss,initrd
fungiert als Blockgerät und erfordert daher einen Dateisystemtreiber (wie zext2
). Der Kernel muss mindestens ein eingebautes Modul zur Erkennung des Dateisystems von habeninitrd
. In diesem Artikel,Einführung von initramfs, einem neuen Modell für anfängliche RAM-Festplattensteht geschrieben, dass:
Aber RAM-Disks verschwenden aufgrund von Caching sogar noch mehr Speicher. Linux ist so konzipiert, dass alle Dateien und Verzeichniseinträge zwischengespeichert werden, die von Blockgeräten gelesen oder auf diese geschrieben wurden. Daher kopiert Linux Daten von und auf die Ramdisk in den "Seiten-Cache" (für Dateidaten) und den "Dentry-Cache" (für Verzeichniseinträge). . Der Nachteil der Ramdisk, die vorgibt, ein Block-Gerät zu sein, ist, dass sie wie ein Block-Gerät behandelt wird.
Was istpage cache
unddentry cache
? Bedeutet das in diesem Absatz, dass die Daten dupliziert wurden, weilramdisk
wird als Blockgerät behandelt, also werden alle Daten zwischengespeichert?
Im Gegenteil,ramfs
:
Vor ein paar Jahren hatte Linus Torvalds eine gute Idee: Was wäre, wenn der Cache von Linux wie ein Dateisystem gemountet werden könnte? Bewahren Sie die Dateien einfach im Cache auf und entfernen Sie sie erst, wenn sie gelöscht oder das System neu gestartet wurde. Linus hat einen winzigen Wrapper namens "ramfs" um den Cache geschrieben, und andere Kernel-Entwickler haben eine verbesserte Version namens "tmpfs" erstellt (mit der die Daten geschrieben werden können, um Speicherplatz zu tauschen, und die Größe eines bestimmten Mount-Punkts so zu begrenzen, dass er vor dem Verbrauch voll wird alle verfügbaren Speicher). Initramfs ist eine Instanz von tmpfs.
Diese RAM-basierten Dateisysteme werden automatisch vergrößert oder verkleinert, um der Größe der enthaltenen Daten zu entsprechen. Durch das Hinzufügen von Dateien zu einem RAM (oder das Erweitern vorhandener Dateien) wird automatisch mehr Speicher zugewiesen, und durch Löschen oder Kürzen von Dateien wird dieser Speicher freigegeben. Es gibt keine Duplizierung zwischen Blockgerät und Cache, da kein Blockgerät vorhanden ist. Die Kopie im Cache ist die einzige Kopie der Daten. Das Beste daran ist, dass dies kein neuer Code ist, sondern eine neue Anwendung für den vorhandenen Linux-Caching-Code, was bedeutet, dass fast keine Größe hinzugefügt wird. Sie ist sehr einfach und basiert auf einer äußerst gut getesteten Infrastruktur.
In Summe,ramfs
ist nur eine Datei geöffnet und in den Speicher geladen, nicht wahr?
Beideinitrd
undramfs
werden zur Kompilierungszeit komprimiert, aber der Unterschied ist,initrd
ist ein Block-Gerät, das entpackt wurde, um vom Kernel beim Booten gemountet zu werdenramfs
wird per cpio in den speicher entpackt. Hab ich recht? Oder istramfs
ein sehr minimales Dateisystem?
Endlich, bis heute, dieinitrd
Bild wird noch im neuesten Kernel präsentiert. Ist das jedochinitrd
eigentlich dieramfs
heute verwendet und der Name ist nur für historische Zwecke?