有没有一种方法可以在由Yocto生成的文件系统上运行存储统计信息?

4
我使用Yocto构建文件系统,使用core-image-minimal的.bbappend。有两个问题:
  1. 如何确定哪个软件包占用了根文件系统的大量存储空间? 我无法想到其他方法,只能查看每个软件包的${D}并查看其组件的大小。必须有一种更系统化和智能化的方法来完成这项工作。

从清单中我可以解密出的信息是,没有任何与包含的软件包大小相关的内容。
另外,删除使用IMAGE_INSTALL对象添加的某些软件包似乎会删除该软件包,但构建镜像的最终结果并未显示出大小的变化!
  1. 我比较了构建机上的一个特定.so文件的大小和安装设备(虚拟机)上的大小,发现在安装设备上的大小只有构建机上看到的原始大小的20-30%。有什么解释吗?
谢谢!
2个回答

7

一种方法是启用buildhistory,通过将以下内容添加到local.con文件中:

INHERIT += "buildhistory"
BUILDHISTORY_COMMIT = "1"

这将在$BUILDDIR目录下创建一个名为buildhistory的目录(git仓库)。您可以在其中找到例如:
images/$MACHINE/eglibc/$IMAGE/installed-package-sizes.txt

那个文件将给你所有已安装软件包的大小。
从buildhistory中可以学到更多有用的东西,请参见buildhistory介绍
2)你是在哪里比较特定的.so文件?如果是来自软件包的 ${B} 目录(也就是库文件构建的地方),那么被安装后的 .so 文件将会被剥离。调试信息被安装到 -deb.rpm 中(因为调试信息通常对目标平台无用,而尽可能减小文件体积则更加重要)。

谢谢 @Anders。我会尝试使用buildhistory方法(顺便说一下,我已经启用了它,但是没有想到它与pkg指标有任何关系)。另外,请查看我的答案,关于实际的yocto提供的脚本,用于完全相同的功能。 - user3342339

0

通过查看scripts/子目录并搜索现有脚本,结果发现Yocto的好人们已经将这些脚本正确地开箱即用:

scripts/tiny/dirsize.py和ksize.py。

dirsize.py将为您提供根文件系统中软件包大小的详细信息;而ksize.py将为您提供内核的等效信息。


只是一个快速的评论,scripts/tiny/dirsize.py 不会给你安装的 packages 的大小,而是你的 rootfs 上目录的大小。从那里,你当然可以推断出哪个包或哪些包负责最大的文件... - Anders
@Anders O.. 那么你建议的buildhistory方法,我可以得到已安装软件包的大小? - user3342339
当然,它会列出已安装的软件包及其大小。尽管你自己发现的方法在缩小文件系统方面同样有效。 - Anders

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接