web-dev-qa-db-fra.com

Ambiguïté à l'aide des commandes "ls -l" et "file" sur un fichier qcow

J'ai un fichier qcow2 sur mon système de fichiers et j'essaie de trouver la taille de ce fichier.

Pour cela, quand je fais un ls -l à l’emplacement où le fichier est stocké, j’obtiens 13041664, ce qui signifie que la taille du fichier est d’environ 13 Mo et quand je fais un file <filename>, j’obtiens:

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

qui, je suppose, dit que la taille du fichier est d’environ 21 Go.

S'agit-il d'une mauvaise interprétation de la sortie de la commande ou y a-t-il autre chose qui se passe à l'intérieur du système de fichiers (type de provisionnement léger)?

UPDATE: Quand je fais un ls -l on var/lib/nova/instances/_base/035db99541e92b5cca93bf18a997d626f, j'obtiens un ls: cannot access /var/lib/nova/instances/_base/035db99541e92b5cca93bf18a997d626f: No such file or directory et il est correct que je n'ai aucun fichier là-bas.

UPDATE 2: La sortie de qemu-img info <filename> est la suivante:

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)
7
jobin

De Qcow sur Wikipedia:

Une des caractéristiques principales des images de disque qcow est que les fichiers avec ce format peuvent croître à mesure que des données sont ajoutées. Cela permet de réduire la taille des fichiers par rapport aux images de disque brutes, qui allouent tout l’espace image à un fichier, même si certaines parties sont vides.

La taille du fichier est donc vraiment de 13 Mo, mais elle peut atteindre 20 Go lorsque des données y sont écrites. Exemple:

$ 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

Un fichier qcow2 vide a été créé. Il peut contenir un système de fichiers de 2 Go, mais pour l'instant, il n'occupe que 197 Ko sur le disque.


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

La partie "vache" de qcow2 est un acronyme pour copy on write, la copie sur écriture, une astuce qui vous permet de configurer une image une fois et de l’utiliser plusieurs fois sans la modifier. Ceci est idéal pour développer et tester des logiciels, ce qui nécessite généralement un environnement stable connu. Vous pouvez créer votre environnement stable connu dans une image, puis créer plusieurs images de copie sur écriture jetables dans lesquelles travailler.

Pour démarrer un nouvel environnement jetable basé sur une bonne image connue, appelez la commande qemu-img avec l'option -o backing_file et indiquez-lui l'image sur laquelle baser sa copie. Lorsque vous exécutez QEMU en utilisant l'environnement jetable, toutes les écritures sur le disque virtuel iront sur cette image jetable, et non sur la copie de base.

De la page de manuel qemu-img:

Si l'option backing_file est spécifiée, l'image n'enregistrera que les différences par rapport à backing_file. Aucune taille ne doit être spécifiée dans ce cas. backing_file ne sera jamais modifié à moins que vous n'utilisiez la commande de moniteur "commit" (ou le commit qemu-img).

Exemple:

$ 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

Dans votre cas,/var/lib/nova/instances/_base/035db99541e92b5cca93bf18a997d626f512b73d est le fichier de sauvegarde. Je ne sais pas quel est le comportement attendu si vous essayez d'utiliser votre fichier qcow sans le fichier de sauvegarde.


À propos de /var/lib/nova/instances dans OpenStack documentation:

Ce répertoire contient les images de disque basées sur fichier libvirt KVM pour les instances hébergées sur ce nœud de calcul. Si vous n'exécutez pas votre cloud dans un environnement de stockage partagé, ce répertoire sera unique sur tous les nœuds de calcul.

/ var/lib/nova/instances contient deux types de répertoires.

Le premier est le répertoire _base. Celui-ci contient toutes les images de base mises en cache de manière générale pour chaque image unique lancée sur ce nœud de calcul. Les fichiers se terminant par _20 (ou un numéro différent) sont les images de base éphémères.

Les autres répertoires sont nommés instance-xxxxxxxx. Ces répertoires correspondent aux instances exécutées sur ce nœud de calcul. Les fichiers qu’il contient sont liés à l’un des fichiers du répertoire _base. Ce sont essentiellement des fichiers à base différentielle contenant uniquement les modifications apportées à partir du répertoire _base d'origine.

8
Eric Carvalho