initramfsにcpioを使用する理由


11

Gentoo wikiに従って、自分のinitramfsを作成しています。おなじみのtarandの代わりにgzip、このページはcpioand を使用するように指示していますgzipウィキペディアcpio、2.6カーネルのinitramfsで使用されていると述べていますが、その理由は説明していません。

これは単なる慣習cpioですか、それともinitramfsに適していますか?私はまだ使用できますtargzip


IIRC tarをinitramfsとして使用することはできません(100%確信がないため、回答として投稿しません)。ちなみに、Gentooを使用しているので、手作りのものよりも組み込みのinitramfsを設定する方がはるかに簡単です。
Maciej Piechotka

@Maciej私はそれを行う方法を知りたいだけです:)さらに、私は自分のinitramfsを使用することにより、起動時間を大幅に改善しています
phunehehe

あなたは私を誤解しました。私が話していた方法は、設定中にカーネルにスペックファイルを与えることです。このファイルはinitrd(カスタム/initなどを含む)に含める必要があり、カーネルはそれを使用します。私はgenkernelまたは同様の方法でinitramfsを生成することについては考えていません。
Maciej Piechotka

@Maciej楽しそうですね!いつかやってみます。
phunehehe

上手。設定が簡単で、カーネルで自動更新されます(そのため、新しいファイルをinitrdにコピーすることを覚えておく必要はありません)。
Maciej Piechotka

回答:


9

私は100%確信はありませんが、初期のramdiskは起動時にカーネルによって解凍される必要があるため、cpioはすでにカーネルコードに実装されているため使用されます。


6
100%確信してください。 linux / init / initramfs.ccpio -H newcアーカイブを解凍します。
ephemient

@ephemientこれは本当に何かです。数日以内に回答がない場合は、それcpioが慣例として使用されており、使用する必要があることを受け入れますcpio
phunehehe

newcが選択された理由を教えてください。
CMCDragonkai 2016

1
カーネルのドキュメントによると、cpioはinitramdiskのためだけに実装されたため、他の形式を実装することもできました。
lvella 2017

10

引用Documentation/filesystems/ramfs-rootfs-initramfs.txt

なぜtarではなくcpioなのですか?

この決定は2001年12月に行われました。議論はここから始まりました。

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

そして、ここから始めて、2番目のスレッド(具体的にはtarとcpioで)を生成しました。

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

(上記のスレッドを読むのに代わるものではない)迅速で汚い要約バージョンは次のとおりです。

1)cpioは標準です。それは(AT&Tの時代から)数十年前のものであり、すでにLinuxで広く使用されています(RPM内、Red Hatのデバイスドライバーディスク)。これは、1996年のLinux Journalに関する記事です。

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

従来のcpioコマンドラインツールは_truly_hideous_コマンドライン引数を必要とするため、tarほど一般的ではありません。しかし、これはアーカイブ形式については何の意味もありません。次のような代替ツールがあります。

http://freecode.com/projects/afio

2)カーネルによって選択されたcpioアーカイブ形式は、(文字通り数十の)さまざまなtarアーカイブ形式のどれよりもシンプルでクリーンです(したがって、作成と解析が簡単です)。完全なinitramfsアーカイブ形式はbuffer-format.txtで説明され、usr / gen_init_cpio.cで作成され、init / initramfs.cで抽出されます。3つすべてを合わせると、人間が読めるテキストの合計は26k未満になります。

3)tarで標準化するGNUプロジェクトは、zipで標準化するWindowsとほぼ同じくらい関連性があります。Linuxもどちらにも含まれておらず、独自の技術的な決定を自由に行うことができます。

4)これはカーネルの内部形式であるため、
まったく新しいものである可能性があります。カーネルは、とにかくこのフォーマットを作成および抽出するための独自のツールを提供します。既存の標準を使用することが望ましいですが、必須ではありません。

5)Al Viroが決定しました(引用:「tarは地獄のように醜く、カーネル側ではサポートされません」):

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

彼の推論を説明した:

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

そして最も重要なのは、initramfsコードを設計および実装したことです。


3

私の昔のSysV時代を思い出してみると、cpioはdevファイルを処理できましたが、tarは処理できませんでした。これにより、ダンプが発生する前に、cpioが「生の」バックアップユーティリティとして選択されました。また、部分的なファイルセットやハードリンクの処理も簡単だったので、増分バックアップも簡単でした。GNU tarはcpio機能に追いついたと思うので、今はユーザーの快適性の問題にすぎません。デフォルトでは、cpioとtarの両方をインストールする必要があります。


1
cpiotar形式のアーカイブを処理できる場合もあれば、その逆の場合もありますが、それは問題ではありません。カーネルはnewc-style cpio-formatアーカイブのみを解凍できtarます。
ephemient

GNU cpioが誤って呼び出す形式newcは正式に命名されてascおり、もちろんによってサポートされていstarます。
schily

1
@schily:これは暗黙の理由の1つを非常にうまく示しています。「まあ、それはある種のtarアーカイブです。しかし、可能なtar形式のどれで、このtar抽出プログラムと互換性がありますか?」OTOH、cpioのバージョン履歴はそれほど複雑ではありません。
Piskvorが
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.