Disques virtuels - Format qcow2

Mise à jour : Debian 11.1 / Bullseye


Référence :

Sommaire

1 - Création d'un disque vierge

1.1 - Création standard

$ qemu-img create -f qcow2 disk.qcow2 1G
Formatting 'vdisk.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off compression_type=zlib size=1073741824 lazy_refcounts=off refcount_bits=16
$ qemu-img info disk.qcow2 |grep size
virtual size: 1 GiB (1073741824 bytes)
disk size: 196 KiB
$ ls -ln disk.qcow2 
-rw-r--r-- 1 1000 1000 196624 6 déc. 14:53 disk.qcow2

$ du -B K disk.qcow2 # Taille occupation disque en KiB
196K disk.qcow2

$ du -k disk.qcow2 # Taille disque virtuel en KiB
196624 disk.qcow2
$ cat disk.qcow2 |wc -c
196624

$ sudo fdisk -l disk.qcow2 |grep Disque
Disque disk.qcow2: 192 KiB, 196608 octets, 384 secteurs
$ sudo parted disk.qcow2 -s mktable msdos mkpart primary ext2 1K 100% print
......
Number Start End Size Type File system Flags
1 512B 197kB 196kB primary ext2 lba


$ qemu-img info disk.qcow2
image: disk.qcow2
file format: raw
virtual size: 192 KiB (197120 bytes).
disk size: 196 KiB

1.2 - Preallocation

$ qemu-img convert -f qcow2 -O qcow2 -o preallocation=metadata vdisk.qcow2 vdisk2.qcow2
$ qemu-img create -f qcow2 -o size=1G,preallocation=metadata vdisk_.qcow2
Formatting 'vdisk_.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off preallocation=metadata compression_type=zlib size=1073741824 lazy_refcounts=off refcount_bits=16
$ qemu-img info disk2.qcow2 |grep size
virtual size: 1 GiB (1073741824 bytes)
disk size: 324 KiB

$ ls -lnh disk2.qcow2
-rw-r--r-- 1 1000 1000 1,1G 6 déc. 16:01 disk2.qcow2

$ du -B K disk2.qcow2 # Taille occupation disque en KiB
324K disk2.qcow2

$ du -B K --apparent-size disk2.qcow2 # Taille disque virtuel en KiB
1048960K disk2.qcow2

$ cat disk2.qcow2 |wc -c
1074135040

$ sudo fdisk -l disk2.qcow2 |grep Disque
Disque disk2.qcow2: 1 GiB, 1074135040 octets, 2097920 secteurs
$ sudo parted disk2.qcow2 -s mktable msdos mkpart primary ext2 2MiB 100% print
Model: (file)
.....

Number Start End Size Type File system Flags
1 2097kB 1074MB 1072MB primary ext2 lba
$ qemu-img create -f qcow2 -o ? |grep preallocation
preallocation=<str> - Preallocation mode (allowed values: off, metadata, falloc, full)

1.3 - Bilan

$ qemu-img create -f qcow2 disk.qcow2 1G
$ qemu-img create -f qcow2 -o size=1G,preallocation=metadata disk.qcow2

2 - Formatage et montage

$ lsblk disk2.qcow2 
lsblk: disk2 : n'est pas un périphérique bloc

2.1 - Installation du serveur nbd

$ sudo modinfo -d nbd
Network Block Device

$ sudo modprobe -av nbd
$ ls /dev/nbd*
/dev/nbd0 /dev/nbd1p1 /dev/nbd2 /dev/nbd4 /dev/nbd6
/dev/nbd1 /dev/nbd1p2 /dev/nbd3 /dev/nbd5 /dev/nbd7
$ lsblk -f /dev/nbd?
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINT

2.2 - Utilisation

$ sudo qemu-nbd -c /dev/nbd0 disk2.qcow2             # option -c ou --connect

$ lsblk -f /dev/nbd?
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
nbd0
└─nbd0p1
$ sudo mkfs.ext4 -L nbd0p1 /dev/nbd0p1

$ sudo mount /dev/nbd0p1 /mnt

$ lsblk /dev/nbd0 -o name,label,fstype,size,mountpoint
NAME LABEL FSTYPE SIZE MOUNTPOINT
nbd0 1G
└─nbd0p1 nbd0p1 ext4 1022M /mnt

2.3 - Dissociation

$ sudo qemu-nbd --disconnect /dev/nbd0                      # option -d ou --disconnect     

$ sudo modprobe -rv nbd

3 - Opérations diverses

3.1 - Réduction taille fichier

$ du -h --apparent-size disk.qcow2 
5,6G disk.qcow2
$ qemu-img convert -f qcow2 -O qcow2 -c disk.qcow2 disk_compress.qcow2 -p

$ du -h --apparent-size disk_compress.qcow2
2,0G demo3.qcow2

Signification des options :

-f format de départ
-O format de sortie
-c compression
-p progress

3.2 - Conversion entre format brut et qcow2

$ qemu-img convert -f qcow2 -O raw demo.qcow2 demo.raw -p

$ du -h --apparent-size demo.raw
20G demo.raw
$ qemu-img convert -f raw -O qcow2 demo.raw demo2.qcow2 -p

$ du -h --apparent-size demo2.qcow2
5,3G demo2.qcow2
$ qemu-img convert -f raw -O qcow2 -c demo.raw demo3.qcow2 -p -c

$ du -h --apparent-size demo3.qcow2
2,0G demo3.qcow2