![在 qcow 文件上使用“ls -l”和“file”命令会产生歧义](https://linux22.com/image/1080647/%E5%9C%A8%20qcow%20%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BD%BF%E7%94%A8%E2%80%9Cls%20-l%E2%80%9D%E5%92%8C%E2%80%9Cfile%E2%80%9D%E5%91%BD%E4%BB%A4%E4%BC%9A%E4%BA%A7%E7%94%9F%E6%AD%A7%E4%B9%89.png)
我有一个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/instances
OpenStack文档:
此目录包含托管在该计算节点上的实例的 libvirt KVM 基于文件的磁盘映像。如果您没有在共享存储环境中运行云,则此目录在所有计算节点中都是唯一的。
/var/lib/nova/instances 包含两种类型的目录。
第一个是 _base 目录。它包含该计算节点上启动的每个唯一映像的所有来自 Glance 的缓存基础映像。以 _20(或其他数字)结尾的文件是临时基础映像。
其他目录的标题为 instance-xxxxxxxx。这些目录对应于在该计算节点上运行的实例。里面的文件与 _base 目录中的某个文件相关。它们本质上是基于差异的文件,仅包含对原始 _base 目录所做的更改。