Perché usare cpio per initramfs?


11

Sto realizzando i miei initramfs seguendo il wiki di Gentoo . Invece del familiare tare gzip, la pagina mi sta dicendo di usare cpioe gzip. Wikipedia dice che cpioè usato dagli initramfs del kernel 2.6, ma non spiega perché.

È solo una convenzione o è cpiomeglio per initramfs? Posso ancora usare tare gzip?


IIRC non puoi usare tar come initramfs (non lo pubblico come risposta perché non sono sicuro al 100%). A proposito usando Gentoo trovo molto più facile configurare initramfs integrati piuttosto che uno fatto a mano.
Maciej Piechotka,

@Maciej Voglio solo sapere come farlo :) Inoltre sto vedendo un grande miglioramento del tempo di avvio utilizzando i miei initramfs
phunehehe,

Mi hai frainteso. Il metodo di cui stavo parlando è quello di dare al kernel durante la configurazione un file di specifiche che i file dovrebbero essere inclusi in initrd (incluso custom /initecc.) E il kernel semplicemente usa quello. Non ho intenzione di generare initramfs con genkernel o metodi simili.
Maciej Piechotka,

@Maciej Sembra divertente! Ci proverò qualche volta.
phunehehe,

Bene. È più facile da configurare per IMHO e si aggiorna automaticamente con il kernel (quindi non ho bisogno di ricordare di copiare nuovi file in initrd).
Maciej Piechotka,

Risposte:


9

Non sono sicuro al 100%, ma poiché il ramdisk iniziale deve essere decompresso dal kernel durante l'avvio, cpio viene utilizzato perché è già implementato nel codice del kernel.


6
Sii sicuro al 100%. linux / init / initramfs.c decomprime un cpio -H newcarchivio.
effimero

@ephemient Questo è davvero qualcosa. Se tra qualche giorno non arriveranno più risposte, accetterò che cpioviene utilizzato come convenzione e che dobbiamo usare cpio.
phunehehe,

Qualche idea sul perché NewC sia il formato scelto?
CMCDragonkai,

1
Secondo la documentazione del kernel, cpio è stato implementato solo per il gusto di initramdisk, quindi avrebbero potuto implementare qualsiasi altro formato.
lvella,

10

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

Perché cpio anziché tar?

Questa decisione è stata presa nel dicembre 2001. La discussione è iniziata qui:

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

E ha generato un secondo thread (in particolare su tar vs cpio), a partire da qui:

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

La versione di riepilogo rapida e sporca (che non sostituisce la lettura dei thread precedenti) è:

1) cpio è uno standard. Ha decenni (dai tempi di AT&T) e già ampiamente utilizzato su Linux (all'interno di RPM, i dischi driver del dispositivo Red Hat). Ecco un articolo del Linux Journal a riguardo dal 1996:

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

Non è così popolare come tar perché i tradizionali strumenti della riga di comando di cpio richiedono argomenti della riga di comando _truly_hideous_. Ma questo non dice nulla in alcun modo sul formato dell'archivio e ci sono strumenti alternativi, come:

http://freecode.com/projects/afio

2) Il formato dell'archivio cpio scelto dal kernel è più semplice e pulito (e quindi più facile da creare e analizzare) rispetto a uno dei (letteralmente dozzine di) vari formati di archivio tar. Il formato completo dell'archivio initramfs è spiegato in buffer-format.txt, creato in usr / gen_init_cpio.c ed estratto in init / initramfs.c. Tutti e tre insieme arrivano a meno di 26k di testo leggibile dall'uomo.

3) Il progetto GNU che standardizza su tar è approssimativamente rilevante quanto la standardizzazione di Windows su zip. Linux non fa parte di nessuno dei due ed è libero di prendere le proprie decisioni tecniche.

4) Dato che si tratta di un formato interno del kernel, avrebbe potuto facilmente essere
qualcosa di nuovo. Il kernel fornisce i propri strumenti per creare ed estrarre questo formato comunque. L'uso di uno standard esistente era preferibile, ma non essenziale.

5) Al Viro ha preso la decisione (citazione: "tar è brutto da morire e non sarà supportato dal lato kernel"):

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

ha spiegato il suo ragionamento:

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

e, soprattutto, progettato e implementato il codice initramfs.


3

Da quello che ricordo dei miei vecchi tempi di SysV, cpio poteva gestire i file dev, ma tar no; questo ha reso cpio l'utilità di backup "raw" di prima scelta. Era anche più semplice gestire set di file parziali e collegamenti reali, quindi i backup incrementali erano più facili. Penso che GNU Tar abbia raggiunto le funzionalità di cpio, quindi ora è solo una questione di comodità dell'utente. Sia cpio che tar dovrebbero essere installati di default.


1
cpiopotrebbe essere in grado di gestire tararchivi di formato, e viceversa in alcuni casi, ma non importa. Il kernel può solo decomprimere gli archivi in newcstile cpio-formato, che non tarconosco.
effimero

Il formato che GNU cpio chiama in modo errato newcè ufficialmente chiamato asce ovviamente supportato da star.
schily,

1
@schily: Questo mostra una delle ragioni implicite abbastanza bene. "Bene, è una sorta di archivio tar. Ma quale dei possibili formati tar ed è compatibile con questo estrattore tar?" OTOH, la cronologia delle versioni di cpio è molto meno complicata.
Piskvor lasciò l'edificio il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.