Por que usar cpio para initramfs?

11

Estou criando meu próprio initramfs seguindo o wiki do Gentoo . Em vez do familiar tare gzip, a página está me dizendo para usar cpioe gzip. A Wikipedia diz que cpioé usada pelo initramfs do kernel 2.6, mas não explica o porquê.

Isso é apenas uma convenção ou é cpiomelhor para o initramfs? Ainda posso usar tare gzip?

phunehehe
fonte
No IIRC, você não pode usar o tar como initramfs (não o publico como resposta, pois não tenho 100% de certeza). BTW usando o Gentoo, acho muito mais fácil configurar o initramfs embutido do que o feito à mão.
Maciej Piechotka
@Maciej Eu só quero saber como fazê-lo :) Além disso eu estou vendo uma grande melhoria no tempo de inicialização usando minhas próprias initramfs
phunehehe
Você me entendeu mal. O método sobre o qual eu estava falando é fornecer ao kernel durante a configuração um arquivo de especificação cujos arquivos devem ser incluídos no initrd (incluindo customizado /initetc.) e o kernel simplesmente usa esse. Eu não estou pensando em gerar initramfs por genkernel ou métodos similares.
Maciej Piechotka 12/02/11
@Maciej Isso parece divertido! Vou tentar algum dia.
## phrehehe #
Bem. É IMHO mais fácil de configurar e se atualiza automaticamente com o kernel (então não preciso me lembrar de copiar novos arquivos no initrd).
Maciej Piechotka 12/02/11

Respostas:

9

Não tenho 100% de certeza, mas como o ramdisk inicial precisa ser descompactado pelo kernel durante a inicialização, o cpio é usado porque já está implementado no código do kernel.

firusvg
fonte
6
Tenha 100% de certeza. linux / init / initramfs.c descompacta um cpio -H newcarquivo.
ephemient
@hemhemient Isso é realmente algo. Se não houver mais resposta em alguns dias, aceitarei que cpioseja usada como convenção e que temos que usar cpio.
phunehehe
Alguma idéia de por que newc é o formato escolhido?
CMCDragonkai
1
De acordo com a documentação do kernel, o cpio foi implementado apenas por causa do initramdisk, para que eles pudessem ter implementado qualquer outro formato.
Lvella
10

Citação Documentation/filesystems/ramfs-rootfs-initramfs.txt:

Por que cpio em vez de alcatrão?

Esta decisão foi tomada em dezembro de 2001. A discussão começou aqui:

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

E gerou um segundo segmento (especificamente no tar vs cpio), começando aqui:

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

A versão resumida rápida e suja (que não substitui a leitura dos threads acima) é:

1) cpio é um padrão. Ele tem décadas (dos dias da AT&T) e já é amplamente usado no Linux (dentro do RPM, discos de driver de dispositivo da Red Hat). Aqui está um artigo do Linux Journal sobre isso em 1996:

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

Não é tão popular quanto o tar, porque as ferramentas tradicionais de linha de comando cpio exigem argumentos de linha de comando _truly_hideous_. Mas isso não diz nada sobre o formato do arquivo, e existem ferramentas alternativas, como:

http://freecode.com/projects/afio

2) O formato de arquivo cpio escolhido pelo kernel é mais simples e mais limpo (e, portanto, mais fácil de criar e analisar) do que qualquer um dos (literalmente dezenas de) vários formatos de arquivo tar. O formato completo do arquivo initramfs é explicado em buffer-format.txt, criado em usr / gen_init_cpio.c e extraído em init / initramfs.c. Os três juntos somam menos de 26k de texto legível por humanos.

3) O projeto GNU de padronização no tar é aproximadamente tão relevante quanto a padronização do Windows no zip. O Linux também não faz parte e é livre para tomar suas próprias decisões técnicas.

4) Como este é um formato interno do kernel, poderia facilmente ter sido
algo totalmente novo. O kernel fornece suas próprias ferramentas para criar e extrair esse formato de qualquer maneira. Usar um padrão existente era preferível, mas não essencial.

5) Al Viro tomou a decisão (citação: "o tar é feio como o inferno e não será suportado no lado do kernel"):

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

explicou seu raciocínio:

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, o mais importante, projetou e implementou o código initramfs.

lvella
fonte
3

Pelo que me lembro dos meus dias antigos no SysV, o cpio podia lidar com arquivos de desenvolvimento, mas o tar não; isso fez do cpio o utilitário de backup 'bruto' escolhido antes do despejo. Também foi mais fácil lidar com conjuntos de arquivos parciais e links físicos, para backups incrementais mais fáceis. Eu acho que o tar GNU alcançou os recursos do cpio, agora é apenas uma questão de conforto do usuário. O cpio e o tar devem ser instalados por padrão.

Arcege
fonte
1
cpiopode ser capaz de lidar com tararquivos -format e vice-versa em alguns casos, mas isso não importa. O kernel pode apenas descompactar arquivos -format newc-style cpio, que tareu não conheço produz.
ephemient 14/02
O formato que o GNU cpio chama incorretamente newcé oficialmente nomeado asce, é claro, suportado por star.
schily
1
@ Schily: Isso mostra uma das razões implícitas bastante bem. "Bem, é algum tipo de arquivo de alcatrão. Mas qual dos possíveis formatos de alcatrão, e é compatível com esse extrator de alcatrão?" OTOH, o histórico de versões do cpio é muito menos complicado.
Piskvor saiu do prédio