¿Por qué usar cpio para initramfs?

11

Estoy haciendo mis propios initramfs siguiendo el wiki de Gentoo . En lugar de lo familiar tary gzip, la página me dice que use cpioy gzip. Wikipedia dice que cpioes utilizado por initramfs del kernel 2.6, pero no explica por qué.

¿Es solo una convención o es cpiomejor para initramfs? ¿Puedo seguir usando tary gzip?

phunehehe
fuente
IIRC no puede usar tar como initramfs (no lo publico como respuesta ya que no estoy 100% seguro). Por cierto, usando Gentoo, encuentro mucho más fácil configurar initramfs incorporado que uno hecho a mano.
Maciej Piechotka
@Maciej Solo quiero saber cómo hacerlo :) Además, estoy viendo una gran mejora en el tiempo de arranque al usar mi propio initramfs
phunehehe
Me malentendiste. El método del que hablaba es dándole al núcleo durante la configuración un archivo de especificaciones cuyos archivos deberían incluirse en el initrd (incluidos los personalizados, /initetc.) y el núcleo simplemente usa ese. No me estoy preocupando por generar initramfs por genkernel o métodos similares.
Maciej Piechotka
@Maciej ¡Eso se ve divertido! Lo intentaré alguna vez.
phunehehe
Bien. En mi humilde opinión, es más fácil de configurar y se actualiza automáticamente con el núcleo (por lo que no necesito recordar copiar nuevos archivos en initrd).
Maciej Piechotka

Respuestas:

9

No estoy 100% seguro, pero como el kernel inicial debe desempaquetar el disco de memoria ram durante el arranque, cpio se usa porque ya está implementado en el código del kernel.

firusvg
fuente
66
Estar 100% seguro. Linux / init / initramfs.c desempaqueta un cpio -H newcarchivo.
Ephemient
@ephemient Esto es realmente algo. Si no hay más respuestas en unos días, aceptaré que cpiose usa como una convención y que tenemos que usar cpio.
phunehehe
¿Alguna idea de por qué newc es el formato elegido?
CMCDragonkai
1
De acuerdo con la documentación del kernel, cpio se implementó solo por initramdisk, por lo que podrían haber implementado cualquier otro formato.
lvella
10

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

¿Por qué cpio en lugar de alquitrán?

Esta decisión se tomó en diciembre de 2001. La discusión comenzó aquí:

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

Y generó un segundo hilo (específicamente en tar vs cpio), comenzando aquí:

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

La versión resumida rápida y sucia (que no sustituye la lectura de los hilos anteriores) es:

1) cpio es un estándar. Tiene décadas de antigüedad (desde los días de AT&T) y ya se usa ampliamente en Linux (dentro de RPM, los discos de controladores de dispositivos de Red Hat). Aquí hay un artículo de Linux Journal al respecto de 1996:

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

No es tan popular como el alquitrán porque las herramientas tradicionales de línea de comandos de cpio requieren argumentos de línea de comandos realmente verdaderos. Pero eso no dice nada sobre el formato de archivo, y hay herramientas alternativas, como:

http://freecode.com/projects/afio

2) El formato de archivo cpio elegido por el núcleo es más simple y limpio (y, por lo tanto, más fácil de crear y analizar) que cualquiera de los (literalmente docenas de) varios formatos de archivo tar. El formato de archivo initramfs completo se explica en buffer-format.txt, creado en usr / gen_init_cpio.c y extraído en init / initramfs.c. Los tres juntos suman menos de 26k de textos legibles por humanos.

3) La estandarización del proyecto GNU en tar es aproximadamente tan relevante como la estandarización de Windows en zip. Linux tampoco forma parte y es libre de tomar sus propias decisiones técnicas.

4) Dado que este es un formato interno del núcleo, fácilmente podría haber sido
algo completamente nuevo. El núcleo proporciona sus propias herramientas para crear y extraer este formato de todos modos. Usar un estándar existente era preferible, pero no esencial.

5) Al Viro tomó la decisión (cita: "el alquitrán es feo como el infierno y no será compatible con el núcleo"):

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

explicó su razonamiento:

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

y, lo más importante, diseñó e implementó el código initramfs.

lvella
fuente
3

Por lo que recuerdo de mis viejos días de SysV, cpio podía manejar archivos dev, pero tar no; esto convirtió a cpio en la utilidad de copia de seguridad 'en bruto' elegida antes de que se produjera el volcado. También fue más fácil manejar conjuntos de archivos parciales y enlaces duros, por lo que las copias de seguridad incrementales fueron más fáciles. Creo que el alquitrán GNU ha alcanzado las características de cpio, por lo que ahora es solo una cuestión de comodidad del usuario. Tanto cpio como tar deben instalarse de forma predeterminada.

Arcege
fuente
1
cpiopuede ser capaz de manejar tararchivos de formato, y viceversa en algunos casos, pero eso no importa. El kernel solo puede descomprimir archivos con formato de newcestilo cpio, que no tarsé de los que produce.
Ephemient
El formato que GNU cpio llama incorrectamente newcse nombra oficialmente ascy, por supuesto, es compatible con star.
schily
1
@schily: Eso muestra una de las razones implícitas bastante bien. "Bueno, es una especie de archivo tar. Pero, ¿cuál de los posibles formatos tar es compatible con este extractor de tar?" OTOH, el historial de versiones de cpio es mucho menos complicado.
Piskvor salió del edificio el