我正在为一件嵌入式设备编写软件升级功能。当前,通过获取新的rootfs.tar.gz文件并将其解压缩到根文件系统(覆盖现有文件并添加新文件)来升级根文件系统。但这不会删除不在新软件包中的文件。
因此,现在我将必须rm -rf所有现有文件,然后解压缩新的rootfs tar文件。这似乎是一项艰巨的工作,并且需要花费大量时间,并且也许唯一改变的是一个配置文件。
相反,我希望能够将.tar.gz文件的内容同步到目录。在不经过某种中介的情况下就可以做到这一点吗(意味着,无需将tar解压到临时目录中,然后再执行rsync)?
直接地,没有任何方法可以做您想要的。如注释中所述,archivemount可能是一个选项,尽管它有其自身的局限性(其中之一是在构建内核时依赖于启用的特定配置选项)。
但是,想到了两个替代选项:
使用SquashFS图像而不是压缩的tar文件。这些可以直接由内核安装,并且在许多情况下,它们实际上比等效的压缩tar文件小。然后,您可以仅从挂载的SquashFS映像使用rsync。如果您使用Buildroot实际为此构建根文件系统,则可以选择直接生成此类映像。
而不是只有一个根分区,而要使用两个。进行初始安装时,请将所有数据写入两个分区,并将引导加载程序设置为仅从其中一个引导。升级系统时,核对另一个分区,在该分区中解压缩您的根归档文件,更新引导加载程序以从中引导,然后重新引导。尽管运行更新所需的时间比您建议的要长一些,但它具有两个相当大的优点:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句