Warum cpio für initramfs verwenden?


11

Ich mache meine eigenen Initramfs nach dem Gentoo-Wiki . Anstelle des vertrauten tarund gzipsagt mir die Seite, ich soll cpiound verwenden gzip. Wikipedia sagt, dass dies cpiovon den Initramfs des 2.6-Kernels verwendet wird, erklärt aber nicht warum.

Ist das nur eine Konvention oder cpiobesser für initramfs? Kann ich noch tarund verwenden gzip?


IIRC Sie können tar nicht als initramfs verwenden (ich poste es nicht als Antwort, da ich nicht 100% sicher bin). Übrigens finde ich es mit Gentoo viel einfacher, eingebaute Initramfs zu konfigurieren, als handgemachte.
Maciej Piechotka

@ Maciej Ich möchte nur wissen, wie es geht :) Außerdem sehe ich eine große Verbesserung der
Startzeit

Du hast mich misverstanden. Die Methode, über die ich gesprochen habe, besteht darin, dem Kernel während der Konfiguration eine Spezifikationsdatei zu geben, welche Dateien in der initrd enthalten sein sollen (einschließlich benutzerdefinierter Dateien /initusw.), und der Kernel verwendet einfach diese. Ich möchte keine Initramfs mit Genkernel oder ähnlichen Methoden generieren.
Maciej Piechotka

@ Maciej Das sieht lustig aus! Ich werde es irgendwann versuchen.
Phunehehe

Gut. Es ist meiner Meinung nach einfacher einzurichten und es wird automatisch mit dem Kernel aktualisiert (daher muss ich nicht daran denken, neue Dateien in initrd zu kopieren).
Maciej Piechotka

Antworten:


9

Ich bin nicht 100% sicher, aber da die anfängliche Ramdisk während des Startvorgangs vom Kernel entpackt werden muss, wird cpio verwendet, da es bereits im Kernel-Code implementiert ist.


6
Seien Sie 100% sicher. linux / init / initramfs.c entpackt ein cpio -H newcArchiv.
Ephemient

@ephemient Das ist wirklich etwas. Wenn in ein paar Tagen keine Antwort mehr kommt, werde ich akzeptieren, dass dies cpioals Konvention verwendet wird und dass wir es verwenden müssen cpio.
Phunehehe

Irgendwelche Ideen, warum newc das gewählte Format ist?
CMCDragonkai

1
Laut Kernel-Dokumentation wurde cpio nur für initramdisk implementiert, sodass sie jedes andere Format hätten implementieren können.
lvella

10

Zitat Documentation/filesystems/ramfs-rootfs-initramfs.txt:

Warum cpio statt teer?

Diese Entscheidung wurde bereits im Dezember 2001 getroffen. Die Diskussion begann hier:

http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1538.html

Und es entstand ein zweiter Thread (speziell zu tar vs cpio), der hier beginnt:

http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1587.html

Die schnelle und schmutzige Zusammenfassungsversion (die kein Ersatz für das Lesen der obigen Themen ist) lautet:

1) cpio ist ein Standard. Es ist Jahrzehnte alt (aus der Zeit von AT & T) und unter Linux bereits weit verbreitet (innerhalb von RPM, Red Hats Gerätetreiberdisketten). Hier ist ein Artikel aus dem Linux Journal von 1996:

http://www.linuxjournal.com/article/1213

Es ist nicht so beliebt wie tar, da die traditionellen cpio-Befehlszeilentools _truly_hideous_ Befehlszeilenargumente erfordern. Das sagt jedoch nichts über das Archivformat aus, und es gibt alternative Tools wie:

http://freecode.com/projects/afio

2) Das vom Kernel gewählte cpio-Archivformat ist einfacher und übersichtlicher (und damit einfacher zu erstellen und zu analysieren) als jedes der (buchstäblich Dutzende) verschiedenen Tar-Archivformate. Das vollständige Archivformat von initramfs wird in buffer-format.txt erläutert, in usr / gen_init_cpio.c erstellt und in init / initramfs.c extrahiert. Alle drei zusammen ergeben weniger als 26.000 lesbaren Text.

3) Das GNU-Projekt zur Standardisierung auf Teer ist ungefähr so ​​relevant wie die Windows-Standardisierung auf Zip. Linux gehört auch nicht dazu und kann seine eigenen technischen Entscheidungen treffen.

4) Da dies ein internes Kernel-Format ist, könnte es leicht
etwas ganz Neues gewesen sein. Der Kernel bietet ohnehin eigene Tools zum Erstellen und Extrahieren dieses Formats. Die Verwendung eines vorhandenen Standards war vorzuziehen, aber nicht unbedingt erforderlich.

5) Al Viro traf die Entscheidung (Zitat: "Teer ist höllisch hässlich und wird auf der Kernelseite nicht unterstützt"):

http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1540.html

erklärte seine Argumentation:

http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1550.html http://www.uwsg.iu.edu/hypermail/linux/kernel/0112.2/1638.html

und vor allem den initramfs-Code entworfen und implementiert.


3

Soweit ich mich an meine alten SysV-Tage erinnere, konnte cpio mit Entwicklungsdateien umgehen, tar jedoch nicht. Dies machte cpio zum "rohen" Backup-Dienstprogramm der Wahl, bevor es zu einem Dump kam. Es war auch einfacher, teilweise Dateigruppen und feste Links zu handhaben, sodass inkrementelle Sicherungen einfacher waren. Ich denke, dass GNU tar die cpio-Funktionen eingeholt hat. Jetzt geht es nur noch um die Benutzerfreundlichkeit. Sowohl cpio als auch tar sollten standardmäßig installiert sein.


1
cpioMöglicherweise können tarArchive im Format formatiert werden und in einigen Fällen auch umgekehrt, aber das spielt keine Rolle. Der Kernel kann nur Archive im newcStil von cpio-style entpacken , von denen tarich nichts weiß.
Ephemient

Das Format, das GNU cpio falsch aufruft, newcwird offiziell benannt ascund natürlich von unterstützt star.
schily

1
@schily: Das zeigt einen der impliziten Gründe ganz gut. "Nun, es ist eine Art Teerarchiv. Aber welches der möglichen Teerformate und ist es mit diesem Teerextraktor kompatibel?" OTOH, der Versionsverlauf von cpio ist weitaus weniger kompliziert.
Piskvor verließ das Gebäude am
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.