Mehrdeutigkeit mit den Befehlen "ls -l" und "file" in einer qcow-Datei

7

Ich habe eine qcow2-Datei in meinem Dateisystem und versuche, die Größe dieser Datei zu ermitteln.

Wenn ich ls -lan dem Ort, an dem die Datei gespeichert ist, eine mache, erhalte ich 13041664, was bedeutet, dass die Dateigröße etwa 13 MB beträgt, und wenn ich eine mache file <filename>, bekomme ich:

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

Ich nehme an, dass die Dateigröße etwa 21 GB beträgt.

Ist dies meine Fehlinterpretation der Befehlsausgabe oder geschieht etwas anderes im Dateisystem (Thin Provisioning)?

UPDATE: Wenn ich ein mache ls -l on var/lib/nova/instances/_base/035db99541e92b5cca93bf18a997d626f, bekomme ich ein ls: cannot access /var/lib/nova/instances/_base/035db99541e92b5cca93bf18a997d626f: No such file or directoryund es ist richtig, dass ich dort keine Datei habe

UPDATE 2: Die Ausgabe von qemu-img info <filename>ist wie folgt:

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)
Job in
quelle
2
Ich vermute, dass die Datei die nominelle Dateigröße ausgibt, während ls den von der Datei belegten Speicherplatz angibt. Schauen Sie sich die qemu-img Manpage an. "Wenn Ihr Dateisystem Lücken unterstützt (z. B. in ext2 oder ext3 unter Linux oder NTFS unter Windows), reservieren nur die geschriebenen Sektoren Speicherplatz. Verwenden Sie" qemu-img info ", um die tatsächliche Größe des Bildes oder" ls "zu ermitteln -ls "unter Unix / Linux."
Seelenquelle
Danke @soulsearch, das scheint ein bisschen Luft geklärt zu haben, bitte schau dir mein Update an. Wenn man sich die "Festplattengröße" ansieht, ist dies vermutlich die Menge an Speicherplatz, die sie belegt.
Jobin

Antworten:

8

Von Qcow in Wikipedia:

Eines der Hauptmerkmale von qcow-Disk-Images ist, dass Dateien mit diesem Format beim Hinzufügen von Daten wachsen können. Dies ermöglicht kleinere Dateigrößen als Raw-Disk-Images, die einer Datei den gesamten Image-Speicherplatz zuweisen, selbst wenn Teile davon leer sind.

Die Dateigröße beträgt also wirklich 13 MB, aber sie kann bis zu 20 GB groß werden, wenn Daten darauf geschrieben werden. Beispiel:

$ 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

Eine leere qcow2-Datei wurde erstellt. Es kann ein 2-GB-Dateisystem aufnehmen, belegt jedoch derzeit nur 197 KB Festplatte.


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

Der "Kuh" -Teil von qcow2 ist eine Abkürzung für "Copy on Write", ein kleiner Trick, mit dem Sie ein Bild einmal einrichten und mehrmals verwenden können, ohne es zu ändern. Dies ist ideal zum Entwickeln und Testen von Software, für die zunächst eine bekannte stabile Umgebung erforderlich ist. Sie können Ihre bekannte stabile Umgebung in einem Bild erstellen und dann mehrere Einweg-Copy-on-Write-Bilder erstellen, in denen Sie arbeiten können.

Um eine neue Einwegumgebung basierend auf einem bekanntermaßen guten Image zu starten, rufen Sie den Befehl qemu-img mit der Option -o backup_file auf und teilen Sie ihm mit, auf welchem ​​Image die Kopie basieren soll. Wenn Sie QEMU in der Einwegumgebung ausführen, werden alle Schreibvorgänge auf die virtuelle Festplatte in dieses Einweg-Image und nicht in die Basiskopie verschoben.

Aus der qemu-imgManpage:

Wenn die Option Backing_Datei angegeben ist, zeichnet das Bild nur die Unterschiede zu Backing_Datei auf. In diesem Fall muss keine Größe angegeben werden. backing_file wird niemals geändert, es sei denn, Sie verwenden den Monitorbefehl "commit" (oder qemu-img commit).

Beispiel:

$ 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

In Ihrem Fall ist / var / lib / nova / instance / _base / 035db99541e92b5cca93bf18a997d626f512b73d die Sicherungsdatei. Ich weiß nicht, was das erwartete Verhalten ist, wenn Sie versuchen, Ihre qcow-Datei ohne die Sicherungsdatei zu verwenden.


Informationen /var/lib/nova/instanceszur OpenStack- Dokumentation:

Dieses Verzeichnis enthält die auf libvirt KVM-Dateien basierenden Disk-Images für die Instanzen, die auf diesem Rechenknoten gehostet werden. Wenn Sie Ihre Cloud nicht in einer gemeinsam genutzten Speicherumgebung ausführen, ist dieses Verzeichnis für alle Rechenknoten eindeutig.

/ var / lib / nova / instance enthält zwei Arten von Verzeichnissen.

Das erste ist das _base-Verzeichnis. Dies enthält alle zwischengespeicherten Basisbilder auf einen Blick für jedes eindeutige Bild, das auf diesem Rechenknoten gestartet wurde. Dateien, die mit _20 (oder einer anderen Nummer) enden, sind die kurzlebigen Basisbilder.

Die anderen Verzeichnisse tragen den Titel instance-xxxxxxxx. Diese Verzeichnisse entsprechen Instanzen, die auf diesem Rechenknoten ausgeführt werden. Die darin enthaltenen Dateien beziehen sich auf eine der Dateien im Verzeichnis _base. Es handelt sich im Wesentlichen um differenzielle Dateien, die nur die Änderungen enthalten, die gegenüber dem ursprünglichen _base-Verzeichnis vorgenommen wurden.

Eric Carvalho
quelle
Vielen Dank an @Eric, ein großes Lob an Ihre Bemühungen, dies hat sehr geholfen! Dies hat nicht nur dazu beigetragen, das Verhalten von qcow image zu verstehen, sondern mir auch dabei geholfen, die Dateien in /var/lib/nova/instances/<instance>/und zu unterscheiden /var/lib/nova/instances/_base/. Danke noch einmal! :)
Jobin