4

我有一个包含很多 KVM qcow2 文件的文件夹,它们都是稀疏文件。现在我需要获取文件夹的总大小,qcow2 文件大小应该算作表观大小(不是实际大小)。

例如:

图像:c9f38caf104b4d338cc1bbdd640dca89.qcow2 文件格式:qcow2 虚拟大小:100G(107374182400 字节)磁盘大小:3.3M cluster_size:65536

图像应被视为 100G 而不是 3.3M

最初我使用 statvfs() 但它只能返回文件夹的实际大小。然后我切换到“du --apparent-size”,但考虑到我有 10000 多个文件,它太慢了,而且计算需要将近 5 分钟。

任何人都知道一种快速的方法可以获取计算 qcow2 虚拟大小的文件夹大小吗?谢谢你

4

3 回答 3

3

stat()如果不ing 目录中的每个文件,就无法找出这些信息。如果您在一个目录中有这么多文件,这会很慢。stat()需要检索每个文件的 inode。

由于缓存,添加更多内存可能会有所帮助。

于 2012-12-20T19:59:00.580 回答
0

你可以使用这样的东西:

find images/ -name "*.qcow2" -exec qemu-img info {} \; | grep virtual | cut -d"(" -f2 | awk '{ SUM += $1} END { print SUM }'

于 2012-12-20T14:59:58.827 回答
0

现代 Unix*ish 操作系统提供了一种一次性检索目录所有条目统计信息的方法。这也需要查看所有 inode,但可能可以在文件系统驱动程序本身中进行优化,因此可能更快。

显然你不是在寻找一种方法来使用来自 C 的系统调用来做到这一点,所以我想一个可行的方法可能是使用 Python。scandir()在那里,您可以使用模块中的功能访问此功能os

于 2019-03-19T14:42:06.700 回答