我的文件系统上有一个qcow2 文件,我正在尝试查找该文件的大小。
为此,当我ls -l
在存储文件的位置执行 a 时,我得到 13041664,这意味着文件大小约为 13 MB,当我执行 a 时file <filename>
,我得到:
disk: QEMU QCOW Image (v2), has backing file (path
/var/lib/nova/instances/_base/035db99541e92b5cca93bf18a997d626f), 21474836480 bytes
Run Code Online (Sandbox Code Playgroud)
我认为,文件大小约为 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)
Run Code Online (Sandbox Code Playgroud)
来自维基百科中的Qcow:
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
Run Code Online (Sandbox Code Playgroud)
创建了一个空的 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
Run Code Online (Sandbox Code Playgroud)
在您的情况下, /var/lib/nova/instances/_base/035db99541e92b5cca93bf18a997d626f512b73d 是后备文件。如果您尝试使用没有支持文件的 qcow 文件,我不知道预期的行为是什么。
关于/var/lib/nova/instances
在OpenStack的文档:
此目录包含该计算节点上托管的实例的基于 libvirt KVM 文件的磁盘映像。如果您不在共享存储环境中运行云,则此目录在所有计算节点中都是唯一的。
/var/lib/nova/instances 包含两种类型的目录。
第一个是 _base 目录。这包含已在该计算节点上启动的每个唯一映像的所有缓存基本映像。以 _20(或其他数字)结尾的文件是临时基础映像。
其他目录的标题是 instance-xxxxxxxx。这些目录对应于在该计算节点上运行的实例。里面的文件与_base目录中的文件之一相关。它们本质上是基于差异的文件,仅包含对原始 _base 目录所做的更改。