Compression

為什麼將 cpio 用於 initramfs?

  • June 26, 2019

我正在按照Gentoo wiki製作自己的 initramfs 。頁面告訴我使用 and ,tar而不是熟悉的and 。維基百科說2.6 核心的 initramfs 使用它,但沒有解釋原因。gzip``cpio``gzip``cpio

這只是一個約定還是cpio對 initramfs 更好?我還可以使用tarandgzip嗎?

我不是 100% 確定,但由於初始 ramdisk 需要在引導期間由核心解包,因此使用 cpio 是因為它已經在核心程式碼中實現。

報價Documentation/filesystems/ramfs-rootfs-initramfs.txt

為什麼是 cpio 而不是 tar?

這個決定是在 2001 年 12 月做出的​​。討論從這裡開始:

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

並產生了第二個執行緒(特別是在 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

它不像 tar 那樣流行,因為傳統的 cpio 命令行工具需要 truly_hideous 命令行參數。但這並沒有說明存檔格式,還有其他工具,例如:

http://freecode.com/projects/afio

  1. 核心選擇的 cpio 歸檔格式比任何(實際上是幾十種)各種 tar 歸檔格式都更簡單、更乾淨(因此更容易創建和解析)。完整的 initramfs 歸檔格式在 buffer-format.txt 中解釋,在 usr/gen_init_cpio.c 中創建,在 init/initramfs.c 中提取。這三者加起來總共不到 26k 的人類可讀文本。

  2. 在 tar 上標準化的 GNU 項目與在 zip 上標準化的 Windows 大致相同。Linux 不屬於這兩者,它可以自由地做出自己的技術決定。

  3. 由於這是核心內部格式,它很容易成為

全新的東西。無論如何,核心都提供了自己的工具來創建和提取這種格式。使用現有標準是可取的,但不是必需的。

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 程式碼。

引用自:https://unix.stackexchange.com/questions/7276