我正在按照Gentoo Wiki制作自己的initramfs 。取而代之的是熟悉的tar
和gzip
,页面告诉我使用cpio
和gzip
。Wikipedia表示cpio
2.6内核的initramfs使用了它,但没有解释原因。
这仅仅是约定还是cpio
对initramfs更好?我仍然可以使用tar
和gzip
?
/init
等),而内核仅使用该文件。我不打算通过genkernel或类似方法来生成initramfs。
我正在按照Gentoo Wiki制作自己的initramfs 。取而代之的是熟悉的tar
和gzip
,页面告诉我使用cpio
和gzip
。Wikipedia表示cpio
2.6内核的initramfs使用了它,但没有解释原因。
这仅仅是约定还是cpio
对initramfs更好?我仍然可以使用tar
和gzip
?
/init
等),而内核仅使用该文件。我不打算通过genkernel或类似方法来生成initramfs。
Answers:
我不确定100%,但是由于初始ramdisk需要在启动期间由内核解压缩,因此使用cpio,因为cpio已在内核代码中实现。
cpio -H newc
档案文件。
cpio
作为惯例的答案,我们必须使用cpio
。
报价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代码。
从我以前的SysV时代,cpio可以处理开发文件,而tar无法处理。这使得cpio在转储出现之前成为了首选的“原始”备份实用程序。处理部分文件集和硬链接也更容易,因此增量备份也更容易。我认为GNU tar已经赶上了cpio功能,所以现在这只是用户舒适性的问题。默认情况下,应同时安装cpio和tar。
cpio
tar
在某些情况下,也许可以处理-format存档,反之亦然,但这并不重要。内核只能解压缩newc
-style cpio
-format档案,tar
我不知道会产生什么。
newc
是正式命名的asc
,当然也受支持star
。