我的 cpio 命令中的错误是什么意思?

mat*_*975 3 embedded initramfs cpio

我一直在我的系统上使用以下命令来创建 .cpio 存档来为我的嵌入式目标设备创建一个 initramfs

sudo find . | cpio -H newc -oc > ~/initramfs.cpio
Run Code Online (Sandbox Code Playgroud)

这一直对我有用,没有任何问题。昨天我正在生成一个新的存档,我收到以下错误:

cpio: Archive format multiply defined: Operation not permitted
cpio: ./etc/shadow: Function open failed: Permission denied
cpio: ./usr/lib/ssh-keysign: Function open failed: Permission denied
64842 blocks
Run Code Online (Sandbox Code Playgroud)

我过去从未收到过这些错误,提到的打开失败的文件也没有被触及,所以我不明白为什么会发生这种情况。我使用 Ubuntu 包管理器更新了我的主机系统,因此我的cpio包也可能已更新。由于所有让我非常困惑的错误,我显然不相信这里生成的 initramfs。我能想到的唯一选择是尝试找出我的cpio版本是否已更改,如果已更改,请删除并替换为我拥有的旧版本。有什么办法可以在我的系统(Ubuntu 12.04)上找到这些信息?或者有其他方法可以解决这个问题吗?

Sté*_*las 5

第一个错误是因为您同时传递-H newc-c。您必须决定要生成的存档的格式。在“不允许操作”是在GNU的cpio一个错误,它传递错误的函数的自变量,用于输出错误信息,并应退出那里。

其他错误是因为您没有以超级用户身份运行该命令,或者更有可能是因为您没有从正确的位置运行它。只有超级用户才能读取文件,/etc/shadow因为它包含敏感信息。您还应该确保您生成的存档只能由超级用户读取。如果它是initramfs您正在创建的,则很可能/etc/shadow没有业务存在,除非它initramfs包含完整的操作系统。