为什么要对initramfs使用cpio?


11

我正在按照Gentoo Wiki制作自己的initramfs 。取而代之的是熟悉的targzip,页面告诉我使用cpiogzipWikipedia表示cpio2.6内核的initramfs使用了它,但没有解释原因。

这仅仅是约定还是cpio对initramfs更好?我仍然可以使用targzip


IIRC,您不能将tar用作initramfs(因为我不确定100%,所以我不将其发布为答案)。使用Gentoo顺便说一句,我发现配置内置的initramfs比手工制作要容易得多。
Maciej Piechotka 2011年

@Maciej我只想知道如何去做:)此外,我看到使用自己的initramfs可以大大提高启动时间
phunehehe 2011年

你误解我了。我所讨论的方法是在配置过程中为内核提供一个规范文件,该文件应包含在initrd中(包括自定义/init等),而内核仅使用该文件。我不打算通过genkernel或类似方法来生成initramfs。
Maciej Piechotka 2011年

@Maciej看起来很有趣!我会尝试的时间。
phunehehe 2011年

好。IMHO设置起来更容易,并且可以通过内核自动更新(因此我不需要记住将新文件复制到initrd中)。
Maciej Piechotka 2011年

Answers:


9

我不确定100%,但是由于初始ramdisk需要在启动期间由内核解压缩,因此使用cpio,因为cpio已在内核代码中实现。


6
100%确定。 linux / init / initramfs.c解压缩cpio -H newc档案文件。
短暂的

@ephemient这确实是东西。如果几天之内没有答案了,我将接受cpio作为惯例的答案,我们必须使用cpio
phunehehe 2011年

有什么想法为什么选择newc格式?
CMCDragonkai

1
根据内核文档,仅出于initramdisk的目的而实现了cpio,因此它们可以实现任何其他格式。
lvella

10

报价Documentation/filesystems/ramfs-rootfs-initramfs.txt

为什么用cpio而不是tar?

该决定是在2001年12月做出的。讨论从这里开始:

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

并从此处开始生成第二个线程(特别是在tar vs cpio上):

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

快速而肮脏的摘要版本(不能替代阅读上面的线程)是:

1)cpio是标准。它已有几十年的历史(从AT&T时代开始),并且已经在Linux上广泛使用(在Red Hat的设备驱动程序磁盘RPM内部)。这是一篇关于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)在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可以处理开发文件,而tar无法处理。这使得cpio在转储出现之前成为了首选的“原始”备份实用程序。处理部分文件集和硬链接也更容易,因此增量备份也更容易。我认为GNU tar已经赶上了cpio功能,所以现在这只是用户舒适性的问题。默认情况下,应同时安装cpio和tar。


1
cpiotar在某些情况下,也许可以处理-format存档,反之亦然,但这并不重要。内核只能解压缩newc-style cpio-format档案,tar我不知道会产生什么。
ephemient 2011年

GNU cpio错误调用的格式newc是正式命名的asc,当然也受支持star
schily

1
@schily:这很好地显示了隐性原因之一。“好吧,这是某种tar存档。但是,哪种可能的tar格式,并且与该tar提取程序兼容?” 太太了,cpio的版本历史要复杂得多。
Piskvor在
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.