存档的 rootfs:将 tar 转换为 cpio 以用于 initramfs

存档的 rootfs:将 tar 转换为 cpio 以用于 initramfs

我有一个 Debian rootfs 作为 tar 文件。我想将其指定为 Kconfig 中的 initramfs 源(使用 PetaLinux),但源必须是 cpio 存档。

如何将 .tar 转换为 .cpio,并保持其结构、权限等?

答案1

尝试使用 bsd tar (不是 GNU tar)——魔法@就是在你的 tarball 文件名之前加上一个:

bsdtar --format=cpio -cf - @root.tar.gz > root.cpio

但请注意,bsdtar当前无法正确处理 tar 文件中存在的任何硬链接,它会默默地为它们生成损坏的条目(已知错误没有修复计划),并且它们不会出现在启动的 initramfs 中。

答案2

由于没有程序能够以可靠的方式提供这种转换(bsdtar包含硬链接的错误处理存档),因此您需要使用以下命令解压 tar 存档:

tar xpf archive.tar

以 root 身份运行,然后从提取的目录树中创建 cpio 存档。

您可以通过在 a 中执行解包/重新打包工作来避免对 root 权限的需要假根会话,例如:

fakeroot sh -c "cd '$ROOTFS' &&
                tar -xf input.tar.gz &&
                find . | cpio -o -H newc" > output.cpio

相关内容