![为什么对 initramfs 使用 cpio?](https://linux22.com/image/15946/%E4%B8%BA%E4%BB%80%E4%B9%88%E5%AF%B9%20initramfs%20%E4%BD%BF%E7%94%A8%20cpio%EF%BC%9F.png)
答案1
引用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
2) 内核选择的 cpio 归档格式比任何(实际上是几十种)各种 tar 归档格式更简单、更干净(因此更容易创建和解析)。完整的 initramfs 归档格式在 buffer-format.txt 中进行了解释,在 usr/gen_init_cpio.c 中创建,并在 init/initramfs.c 中提取。这三者加起来总共不到 26k 人类可读的文本。
3) GNU 项目标准化 tar 的相关性与 Windows 标准化 zip 的相关性大致相同。 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 代码。
答案2
我不是 100% 确定,但由于初始 ramdisk 需要在启动期间由内核解压,因此使用 cpio,因为它已经在内核代码中实现了。
答案3
根据我对 SysV 时代的记忆,cpio 可以处理开发文件,但 tar 不能;这使得 cpio 成为 dump 出现之前首选的“原始”备份实用程序。处理部分文件集和硬链接也更容易,因此增量备份也更容易。我认为 GNU tar 已经赶上了 cpio 功能,所以现在这只是用户舒适度的问题。默认情况下应该安装 cpio 和 tar。