在 qcow 文件上使用“ls -l”和“file”命令会产生歧义

在 qcow 文件上使用“ls -l”和“file”命令会产生歧义

我有一个qcow2 文件在我的文件系统上,我正在尝试找到该文件的大小。

为此,当我ls -l在存储文件的位置执行时,我得到 13041664,这意味着文件大小约为 13 MB,而当我执行时file <filename>,我得到:

disk: QEMU QCOW Image (v2), has backing file (path 
/var/lib/nova/instances/_base/035db99541e92b5cca93bf18a997d626f), 21474836480 bytes

我推测文件大小约为 21 GB。

这是我对命令输出的误解还是文件系统内部发生了其他事情(精简配置之类的事情)?

更新:当我执行 a 时ls -l on var/lib/nova/instances/_base/035db99541e92b5cca93bf18a997d626f,我得到 als: cannot access /var/lib/nova/instances/_base/035db99541e92b5cca93bf18a997d626f: No such file or directory并且正确,那里没有文件

更新2:的输出qemu-img info <filename>如下:

image: disk
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 12M
cluster_size: 65536
backing file: /var/lib/nova/instances/_base/035db99541e92b5cca93bf18a997d626f512b73d (actual path: /var/lib/nova/instances/_base/035db99541e92b5cca93bf18a997d626f512b73d)

答案1

酷牛在维基百科中:

qcow 磁盘映像的主要特征之一是,这种格式的文件可以随着数据的添加而增大。这使得文件大小比原始磁盘映像要小,因为原始磁盘映像会将整个映像空间分配给文件,即使其中部分空间为空。

因此文件大小实际上是 13MB,但写入数据后,文件大小可能会增加到 20GB。示例:

$ qemu-img create -f qcow2 test.img 2G
Formatting 'test.img', fmt=qcow2 size=2147483648 encryption=off cluster_size=65536 lazy_refcounts=off 
$ ls -l test.img 
-rw-r--r-- 1 carvalho carvalho 197120 Jul 18 09:30 test.img
$ file test.img 
test.img: QEMU QCOW Image (v2), 2147483648 bytes

已创建空的 qcow2 文件。它可以容纳 2GB 文件系统,但目前仅占用 197KB 磁盘空间。


http://en.wikibooks.org/wiki/QEMU/Images

qcow2 中的“cow”是“copy on write”的缩写,这是一个巧妙的小技巧,允许您设置一次映像并多次使用而无需更改它。这对于开发和测试软件非常理想,因为开发和测试软件通常需要一个已知的稳定环境。您可以在一个映像中创建已知的稳定环境,然后创建几个一次性的写时复制映像来工作。

要基于已知良好映像启动新的一次性环境,请使用选项 -o backing_file 调用 qemu-img 命令并告诉它以哪个映像为基础进行复制。使用一次性环境运行 QEMU 时,对虚拟磁盘的所有写入都将转到此一次性映像,而不是基本副本。

来自qemu-img手册页:

如果指定了选项 backing_file,则映像将仅记录与 backing_file 的差异。在这种情况下,无需指定大小。除非您使用“commit”监视命令(或 qemu-img commit),否则 backing_file 永远不会被修改。

例子:

$ qemu-img create -f qcow2 -o backing_file=test.img test01.img
Formatting 'test01.img', fmt=qcow2 size=2147483648 backing_file='test.img' encryption=off cluster_size=65536 lazy_refcounts=off 
$ file test01.img 
test01.img: QEMU QCOW Image (v2), has backing file (path test.img), 2147483648 bytes

在您的例子中,/var/lib/nova/instances/_base/035db99541e92b5cca93bf18a997d626f512b73d 是备份文件。如果您尝试在没有备份文件的情况下使用 qcow 文件,我不知道预期的行为是什么。


关于/var/lib/nova/instancesOpenStack文档:

此目录包含托管在该计算节点上的实例的 libvirt KVM 基于文件的磁盘映像。如果您没有在共享存储环境中运行云,则此目录在所有计算节点中都是唯一的。

/var/lib/nova/instances 包含两种类型的目录。

第一个是 _base 目录。它包含该计算节点上启动的每个唯一映像的所有来自 Glance 的缓存基础映像。以 _20(或其他数字)结尾的文件是临时基础映像。

其他目录的标题为 instance-xxxxxxxx。这些目录对应于在该计算节点上运行的实例。里面的文件与 _base 目录中的某个文件相关。它们本质上是基于差异的文件,仅包含对原始 _base 目录所做的更改。

相关内容