Pourquoi utiliser cpio pour initramfs?

11

Je fais mes propres initramfs en suivant le wiki Gentoo . Au lieu du familier taret gzip, la page me dit d'utiliser cpioet gzip. Wikipedia dit que cpioc'est utilisé par les initramfs du noyau 2.6, mais n'explique pas pourquoi.

Est-ce juste une convention ou est-ce cpiomieux pour les initramfs? Puis-je toujours utiliser taret gzip?

phunehehe
la source
IIRC vous ne pouvez pas utiliser tar comme initramfs (je ne le poste pas comme réponse car je ne suis pas sûr à 100%). BTW utilisant Gentoo Je trouve beaucoup plus facile de configurer les initramfs intégrés plutôt que ceux faits à la main.
Maciej Piechotka
@Maciej Je veux juste savoir comment le faire :) De plus, je constate une amélioration importante du temps de démarrage en utilisant mes propres initramfs
phunehehe
Tu m'as mal compris. La méthode dont je parlais consiste à donner au noyau lors de la configuration un fichier de spécification quels fichiers devraient être inclus dans l'initrd (y compris personnalisé, /initetc.) et le noyau utilise simplement celui-ci. Je ne pense pas à générer des initramfs par genkernel ou des méthodes similaires.
Maciej Piechotka
@Maciej Ça a l'air amusant! Je vais l'essayer un jour.
phunehehe
Bien. C'est IMHO plus facile à configurer et il se met à jour automatiquement avec le noyau (donc je n'ai pas besoin de me rappeler de copier de nouveaux fichiers dans initrd).
Maciej Piechotka

Réponses:

9

Je ne suis pas sûr à 100%, mais comme le ramdisk initial doit être décompressé par le noyau lors du démarrage, cpio est utilisé car il est déjà implémenté dans le code du noyau.

firusvg
la source
6
Soyez sûr à 100%. linux / init / initramfs.c décompresse une cpio -H newcarchive.
éphémère
@ephemient C'est vraiment quelque chose. S'il n'y a plus de réponse dans quelques jours, j'accepterai qu'elle cpiosoit utilisée comme convention et que nous devons utiliser cpio.
phunehehe
Des idées pourquoi newc est le format choisi?
CMCDragonkai
1
Selon la documentation du noyau, cpio a été implémenté uniquement pour initramdisk, ils auraient donc pu implémenter n'importe quel autre format.
lvella
10

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

Pourquoi cpio plutôt que tar?

Cette décision a été prise en décembre 2001. La discussion a commencé ici:

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

Et a engendré un deuxième thread (spécifiquement sur tar vs cpio), commençant ici:

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

La version de résumé rapide et sale (qui ne remplace pas la lecture des discussions ci-dessus) est:

1) cpio est une norme. Il a des décennies (depuis les jours AT&T) et est déjà largement utilisé sur Linux (à l'intérieur de RPM, les disques de pilotes de périphériques de Red Hat). Voici un article du Linux Journal à ce sujet de 1996:

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

Ce n'est pas aussi populaire que tar car les outils de ligne de commande cpio traditionnels nécessitent des arguments de ligne de commande _truly_hideous_. Mais cela ne dit rien sur le format d'archive, et il existe des outils alternatifs, tels que:

http://freecode.com/projects/afio

2) Le format d'archive cpio choisi par le noyau est plus simple et plus propre (et donc plus facile à créer et à analyser) que n'importe lequel (littéralement des dizaines de) différents formats d'archive tar. Le format complet de l'archive initramfs est expliqué dans buffer-format.txt, créé dans usr / gen_init_cpio.c, et extrait dans init / initramfs.c. Tous les trois réunis représentent moins de 26 000 au total de texte lisible par l'homme.

3) Le projet GNU standardisant sur tar est à peu près aussi pertinent que Windows standardisant sur zip. Linux ne fait pas partie non plus et est libre de prendre ses propres décisions techniques.

4) Puisqu'il s'agit d'un format interne du noyau, il aurait pu facilement être
quelque chose de nouveau. Le noyau fournit de toute façon ses propres outils pour créer et extraire ce format. L'utilisation d'une norme existante était préférable, mais pas indispensable.

5) Al Viro a pris la décision (citation: "le tar est moche comme l'enfer et ne va pas être supporté du côté du noyau"):

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

a expliqué son raisonnement:

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

et, surtout, conçu et implémenté le code initramfs.

lvella
la source
3

D'après ce que je me souviens de mes anciens jours SysV, cpio pouvait gérer les fichiers de développement, mais tar ne pouvait pas; Cela a fait de cpio l'utilitaire de sauvegarde «brut» de choix avant le vidage. Il était également plus facile de gérer des ensembles de fichiers partiels et des liens matériels, de sorte que les sauvegardes incrémentielles étaient plus faciles. Je pense que GNU tar a rattrapé les fonctionnalités de cpio alors maintenant c'est juste une question de confort pour l'utilisateur. Cpio et tar doivent être installés par défaut.

Arcege
la source
1
cpiopeut être capable de gérer des tararchives au format, et vice-versa dans certains cas, mais cela n'a pas d'importance. Le noyau ne peut décompresser que les archives newc-style cpio-format, que tarje ne connais pas.
ephemient
Le format que GNU cpio appelle incorrectement newcest officiellement nommé ascet bien sûr supporté par star.
schily
1
@schily: Cela montre très bien l'une des raisons implicites. "Eh bien, c'est une sorte d'archive tar. Mais lequel des formats tar possibles, et est-il compatible avec cet extracteur tar?" OTOH, l'historique des versions de cpio est beaucoup moins compliqué.
Piskvor a quitté le bâtiment le